Junio 20, 2018, 05:24:21 am

Autor Tema: Porque No for con return adentro!!!  (Leído 2284 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado jonhy_jona

  • Me das tu IP?
  • *
  • Mensajes: 73
  • Sexo: Masculino
  • Slash lo màs
    • Ver Perfil
Porque No for con return adentro!!!
« en: Marzo 27, 2014, 11:31:14 am »
Buenos días.
Disculpen la molestia pero el otro día en mi clase de programación 2 me surgió una duda:
Es sencilla y estoy de acuerdo con que no se debe hacer pero no me convence para nada la explicacion de mi profesor la duda es la siguiente:


public bool buscar(string pComparador){
   for(int i=0;i<milista.count(),i++){
      if (pComparador==milista.Comparado){
         return false;
      }
   }

return true;
}


Ella me dice que Funciona pero no es la forma de hacerlo que debería hacerlo con un while a lo cual yo pregunte ¿por que? y su respuesta fue que el for es una estructura para recorre por completo otras estructuras(array, listas,ETC) y no cortarlo,y que el while fue mas pensado para eso.
La cuestión es que no encontré mejor argumento que ese lo cual a mi no me convence ¿alguien podría aportar algo mejor?
el teclado es mi arma te acercas y disparo

Desconectado seth

  • El mas real
  • G#
  • **
  • Mensajes: 7936
  • Sexo: Masculino
    • Ver Perfil
Re:Porque No for con return adentro!!!
« Respuesta #1 en: Marzo 27, 2014, 12:10:44 pm »
No está mal poner un return en el medio de la funcion, el problema es usar un for en lugar de un while
Los dos funcionan, pero el while transmite mas claramente lo que queres hacer, por lo tanto es mas facil de entender y mas facil de mantener
Cuando un programador ve un for asume que normalmente se va a recorrer entero y si el programa es mas complejo que el tuyo va a tardar un rato largo en darse cuenta de que no es el caso

Ademas, tenes una diferencia de performance, ya que con el for tenes que actualizar y comparar i, pero normalmente esa no es la razon mas importante


Ves links a xd-blog.com.ar que no andan? buscalos en You are not allowed to view links. Register or Login

Desconectado OnTheCore

  • Si te metes con CPH
    te metes conmigo
  • ****
  • Mensajes: 1610
  • Sexo: Masculino
    • Ver Perfil
Re:Porque No for con return adentro!!!
« Respuesta #2 en: Marzo 27, 2014, 12:17:45 pm »
el for se usa generalmente para recorrer, por ejemplo del 1 al 10. Es decir que sabes cuando termina el bucle exactamente y sabes que el valor final no va a modificarse durante el ciclo.
El while se usa cuando no sabes exactamente cuando es el limite y este puede variar en cada ejecucion o durante el ciclo. El while se usa cuando lo que esta dentro de { } puede no ejecutarse. Primero se hace la comparacion y despues la ejecucion. Por ejemplo:

while(ConexionAInternet()) {
    printf("Hay internet")
}

El Do-While se usa para el mismo caso, pero cuando queres que lo de adentro de { } se ejecute por lo menos una vez, es decir antes de la comparacion.

Yo no veo mal tu codigo, porque estas recorriendo un ciclo de 0 a el numero maximo de "items" en tu lista.

Edito: No habia leido lo que puso seth antes, perdon.
« Última modificación: Marzo 27, 2014, 12:20:58 pm por OnTheCore »
No me mandes mensajes privados sobre troyanitos,  "crypters" o alguna otra boludez. No voy a ser tu maestro personal ni te voy a vender un curso para ser hacker. Si me envias un mensaje asi, probablemente no te guste la respuesta.

Desconectado jonhy_jona

  • Me das tu IP?
  • *
  • Mensajes: 73
  • Sexo: Masculino
  • Slash lo màs
    • Ver Perfil
Re:Porque No for con return adentro!!!
« Respuesta #3 en: Marzo 27, 2014, 01:13:18 pm »
Muchas Gracias seth y OnTheCore, me pareció interesante las respuestas y me queda bien claro, les agradezco que me aclaren y voy a tener en cuenta sus opiniones en un futuro ;D .
Nuevamente Muchas gracias.

Desconectado JuanC++

  • Me das tu IP?
  • *
  • Mensajes: 5
  • Sexo: Masculino
  • ( :
    • Ver Perfil
Re:Porque No for con return adentro!!!
« Respuesta #4 en: Junio 03, 2015, 10:53:23 am »
Al menos yo suelo usar un FOR para casos como este, y lo veo bastante claro.
Si se cumple una condición a mitad del for y no hace falta continuar, es lógico usar un return (o break en otros casos) que lo detenga.
Si ello no sucedió, al final se adopta el valor correspondiente.

¿Cómo escribirían lo mismo usando un while de forma que sea "más entendible"?

Desconectado seth

  • El mas real
  • G#
  • **
  • Mensajes: 7936
  • Sexo: Masculino
    • Ver Perfil
Re:Porque No for con return adentro!!!
« Respuesta #5 en: Junio 03, 2015, 12:12:21 pm »
Código: You are not allowed to view links. Register or Login
function buscar(lista, elemento_a_comparar){
   i=0
   while i<lista.length and lista[i]!=elemento_a_comparar{
        i++
   }
   return ! lista.length == i
}

asi, capaz?
la linea del return me parece poco legible

otra opcion es hacer lo mismo que en el post original pero con while para indicar que no necesariamente se recorre la estructura completa
te copio un ejemplo de wikipedia
Código: You are not allowed to view links. Register or Login
pos = 0
while pos < tam:
  if vec[pos] == dato:
      Retorne  verdadero y/o pos,
  else:
     pos = pos + 1
Fin (while)
Retorne falso

Desconectado JuanC++

  • Me das tu IP?
  • *
  • Mensajes: 5
  • Sexo: Masculino
  • ( :
    • Ver Perfil
Re:Porque No for con return adentro!!!
« Respuesta #6 en: Junio 03, 2015, 09:20:31 pm »

Entonces podría hacerse también de esta forma ...
Código: You are not allowed to view links. Register or Login
function buscar(arreglo, elemento_buscado) {
   for(i=0; arreglo[i] != elemento_buscado and i < arreglo.length; i++);
   return arreglo.length != i;
}
(Intenté seguir su sintaxis... ¿es pseudocódigo o algún lenguaje?)

No le parece legible el uso del return sin embargo cita un ejemplo en el que lo usan jeje.

A fin de cuentas es lo mismo, pero por alguna razón me parece más entendible usar el for de la forma escrita por el autor del tema.
Debe ser porque "cuando leo" un for, lo leo considerando un "mientras" en la lectura.

Desconectado seth

  • El mas real
  • G#
  • **
  • Mensajes: 7936
  • Sexo: Masculino
    • Ver Perfil
Re:Porque No for con return adentro!!!
« Respuesta #7 en: Junio 03, 2015, 09:55:50 pm »
es pseudocodigo

Citar
No le parece legible el uso del return sin embargo cita un ejemplo en el que lo usan jeje.
lo usan dentro de un while, el problema aca es el return adentro del for

Citar
Debe ser porque "cuando leo" un for, lo leo considerando un "mientras" en la lectura.
normalmente los for se ejecutan completos, por eso la mayoria de la gente ve un for y considera que va a recorrer toda la estructura


nadie se va a morir por poner un return en un for y el programa va a andar igual, pero la pregunta era por que el profesor se lo rechazó y si estaba bien dicho rechazo


xx
Un Analisis desde adentro... ¿Porque negros de mierda?

Iniciado por Diego Arenas

7 Respuestas
3194 Vistas
Último mensaje Marzo 14, 2008, 09:54:31 am
por txged
xx
Una vez adentro

Iniciado por bristol

7 Respuestas
1795 Vistas
Último mensaje Junio 11, 2006, 06:21:06 am
por TiTuS
xx
Handshake desde adentro

Iniciado por francotirador

5 Respuestas
3354 Vistas
Último mensaje ſeptiembre 27, 2009, 12:23:09 am
por .xAk.
xx
principiante html :( , como escribir adentro de un hr ?

Iniciado por zeta1337

1 Respuestas
674 Vistas
Último mensaje Enero 19, 2015, 11:13:28 am
por HolyKnight
xx
Return 0;

Iniciado por joaco36

3 Respuestas
1374 Vistas
Último mensaje Enero 04, 2012, 08:22:37 am
por WaesWaes
resuelto
return y arrays...

Iniciado por ralymontes

6 Respuestas
1580 Vistas
Último mensaje Noviembre 23, 2009, 04:11:42 pm
por tragantras
question
Error con SDL: return [RESUELTO]

Iniciado por 60NZ4L3Z

6 Respuestas
2306 Vistas
Último mensaje Noviembre 07, 2009, 03:04:15 am
por 60NZ4L3Z
resuelto
Duda con el return(solucionado)

Iniciado por Dark Hero

10 Respuestas
1364 Vistas
Último mensaje Mayo 31, 2011, 12:52:33 am
por Dark Hero
xx
char main?? ayuda con return

Iniciado por brujo696

7 Respuestas
1800 Vistas
Último mensaje Marzo 13, 2009, 03:58:39 pm
por mycrox
xx
Modificar el return de una función en otra clase.

Iniciado por Mr. X

9 Respuestas
1657 Vistas
Último mensaje ſeptiembre 24, 2013, 09:07:24 pm
por Kreusser