vb6 es tonto

Iniciado por Psyke1, 2 Octubre 2011, 01:08 AM

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

Sanlegas

Cita de: $Edu$ en  9 Octubre 2011, 15:00 PM
Gracias seba, y Tenient.. el mensaje "OK!" saldra SOLAMENTE si el la condicion es verdadera, y como dices es falsa entonces obvio que no entra, lo que estamos diciendo es que sea True o False la condicion, pasara uno por uno, en este caso tiene que mirar todos obligado por el xor que pusiste pero deciamos en caso como if true or true or true or true or true or true or true..., con el primero ya da True la condicion y no necesitaria comprobar todos los otros, pero si lo hace, pero en .net como dice seba existe el OrElse que no va a verificar el resto de las condiciones ya que no cambiaran el resultado.

Exactamente... solo con los OR pasa, y no con todas las condiciones o que sea algo común del VB, salu2  :D

skapunky

No estoy deacuerdo con ustedes....la visión de que si A es TRUE no deba leer B es errónea, lo que no seria lógico de parte del programador es:
Citar
If A = True Or A = False Then  [Siempre se cumple]

Lo que ustedes plantean:

CitarIf A = True Or B = False Then

Es válido totálmente y el compilador da igual si lo interpreta de izquierda a derecha o viceversa. Fíjense que A y B són independientes y el estado TRUE/FALSE simplemente es un boolean.

Lo que planteo esque quizá haya una situación que para que se de mediante el IF, A deba ser cierta y B falsa siendo entre ellas independientes. Si fueran dependientes entonces la construcción debe ser otra pero no es culpa del compilador, es del programador.

Por cierto:

CitarIf Calculo(1) Or Calculo(2) Or Calculo(3) Or Calculo(4) Or Calculo(5) Then
    '...
End If

Para algo inventaron el "SWITCH" o en el caso de vb el "CASE"
Killtrojan Syslog v1.44: ENTRAR

$Edu$

Tenient y skapunky, estan entendiendo mal.

Lo que hablamos es simple, no hablamos del resultado que da la condicion, sino simplemente hablamos que recorre todas ya sabiendo que no cambiara el resultado final.

Código (vb) [Seleccionar]

If Calculo(1) Or Calculo(2) Or Calculo(3) Or Calculo(4) Or Calculo(5) Then
    '...
End If


Si Calculo() es una funcion que devuelve True O False pero a la vez nos manda un msgbox para avisarnos del error o de la verificacion de que todo esta bien.. con que el primer Calculo(1) sea true, nos mostrara nuestro mensaje "OK" pero luego verifica los otros "en vano" ya que la condicion sera True de todos modos, y en que nos perjudica? en que nos mostrara en este caso 4 msgbox mas, ya sean de "OK" o de "Error". Pero esta bien eso, ya que a veces talvez necesitamos que lea esas funciones de todos modos, pero a veces no, y por eso en .net estan los "Or" y los "OrElse" que este ultimo, cuando ya 1 condicion se dio True, ya no lee las otras, entonces ahora con .net tenemos la opcion de cuando queremos que lea todas las condiciones y cuando no ;) Pero en vb6 tenemos el "Or" comun solamente :/

Lo mismo es para And, que en .net existe AndAlso para que si el primero ya da False, que no siga leyendo los demas.

Hurubnar

#13
CitarSi Calculo() es una funcion que devuelve True O False pero a la vez nos manda un msgbox para avisarnos del error o de la verificacion de que todo esta bien.. con que el primer Calculo(1) sea true, nos mostrara nuestro mensaje "OK" pero luego verifica los otros "en vano" ya que la condicion sera True de todos modos, y en que nos perjudica? en que nos mostrara en este caso 4 msgbox mas, ya sean de "OK" o de "Error".
En absoluto. Nos perjudica en que tarda más tiempo comprobando la función. Es decir, tenemos el siguiente código:

Código (vb) [Seleccionar]
If var0 = "1" Or var1 = "1" Or var2 = "1" Then
   msgbox "El mensaje"
End If

Si únicamente var0 contiene el valor "1" nos mostrará el mensaje una sola vez pero también comprobará (malgastando tiempo) los valores de var1 y var2.

En cambio, si las tres variables contienen el valor "1", según tú nos mostrará el mensaje tres veces. Por el contrario, nos mostrará el mensaje una sola vez, insisto, esto nos afecta únicamente en que tarda más tiempo en comprobar la función.

Un saludo,
atte. Herio

$Edu$

Me rindo, que alguien que me haya entendido que lo explique xDD o lee tranquilo desde el primer post hacia abajo, probando los codigos, etc xD