Autor
|
Tema: Un if realmente se lee cuando la condición es falsa? (Leído 10,912 veces)
|
BlackM4ster
Desconectado
Mensajes: 499
Error, el teclado no funciona. Pulse F1 para continuar
|
ABDERRAMAH el sabio jajajajajajajaj
|
|
|
En línea
|
|
|
|
El Benjo
|
jajajajajajajajajajajajajaja Es que no debemos perder el tiempo, Frodo. XD Bueno, aprovecho para comentar un mito que según sé es falso, pero quisiera saber si alguno de ustedes ha escuchado de él. Se dice que en las aplicaciones de VB.net cuando uno coloca un if de la forma: If A = True And B = True Then End If
Aunque la primera evaluación sea falsa se hace la segunda evaluación y por ello es mejor realizar un if anidado. Yo sigo creyendo que es un mito, pero qué dicen ustedes?
|
|
|
En línea
|
www.es.neftis-ai.comSí hay un mejor lenguaje de programación y es ese con el que puedes desarrollar tus objetivos.
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
Una explicacion en detalle de ese tema se encuentra en la pagina Evaluación de "cortocircuitos" en Microsoft Visual Basic .NETUn saludo
|
|
|
En línea
|
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly. -- Kernighan & Ritchie, The C programming language
|
|
|
.:UND3R:.
|
Hola soy del subforo de Ing. Inversa paso para intentar aclarar algunas cosas, es que creo que estás algo confundido. Creo que la pregunta que quieres plantear: ¿Cómo se elabora un if y cómo este actúa? En cuanto a la elaboración de las instrucciones, estas se realizan en tiempo de compilación o interpretación (dependiendo del lenguaje), creo que entre tus dudas y otros comentarios (que son del todo correcto), no van al tema. Es que ~ tiene toda la razón, pero el plantea la forma de elaboración en tiempo de compilación. Si quieres más detalles, deberías estudiar Teoría atómata y de compiladores, una ciencia en donde podrías crear tu propio lenguaje de programación (si es que entiendes la teoría que hay detrás de los compiladores). Ahora la pregunta es cómo el IF actúa, la estructura del if depende netamente del compilador, pero la comparación generalmente llega a una comparación CMP (instrucción de lenguaje ensamblador). if (var_a == true) { return 0; } ..... .... ..
Esto en lenguaje ensamblador sería más menos así (reitero esto depende del compilador): mov eax, dword ptr:[40381200] ; mueve el contenido de una dirección de memoria a la variable eax cmp eax,1 ; compara si eax (variable cual posee el contenido de var_a) es 1. jne continuar ; si no se cumple se dirigirá al label o etiqueta continuar. retn ; retorna a la dirección apuntada al principio del stack o pila continuar: ...... .... ..
Espero que se entienda más menos
|
|
|
En línea
|
Solicitudes de crack, keygen, serial solo a través de mensajes privados (PM)
|
|
|
ABDERRAMAH
Desconectado
Mensajes: 431
en ocasiones uso goto ¬¬
|
jajajajajajajajajajajajajaja Es que no debemos perder el tiempo, Frodo. XD Bueno, aprovecho para comentar un mito que según sé es falso, pero quisiera saber si alguno de ustedes ha escuchado de él. Se dice que en las aplicaciones de VB.net cuando uno coloca un if de la forma: If A = True And B = True Then End If
Aunque la primera evaluación sea falsa se hace la segunda evaluación y por ello es mejor realizar un if anidado. Yo sigo creyendo que es un mito, pero qué dicen ustedes? pues te respondo co toda seguuridad, se comprueban las dos condiciones, y estoy tan seguro por la existencia de los operadores andalso y orelse, que sirven para ignorar las demas condiciones si la sentencia no puede ser verdadera
|
|
|
En línea
|
|
|
|
Eleкtro
Ex-Staff
Desconectado
Mensajes: 9.878
|
Aunque la primera evaluación sea falsa se hace la segunda evaluación y por ello es mejor realizar un if anidado. En lugar de anidar podemos servirnos del resto de operadores del lenguaje (los que ya ha nombrado ABDERRAMAH), solo es necesario leer la referencia de los operadores de VBNET para entender como funcionan y saber las expresiones que se evaluan y las que no... -> Logical/Bitwise Operators (Visual Basic)Saludos!
|
|
« Última modificación: 4 Octubre 2013, 16:02 pm por EleKtro H@cker »
|
En línea
|
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
Hablando de C++: En un IF con varias condiciones unidas por un AND (Ejemplo: "if(1 && 0);"), se leen en orden, y en el momento en que una sea falsa, acaba con el IF. Esto lo podemos ver fácilmente (¬¬ vagos) con un código como este: #include <iostream> bool asd(){ std::cout << "Hola"; return false; } int main () { if(2==0 && asd()); system("pause>nul"); }
Compilado con MinGW*Haced la prueba en VB, y los lenguajes que uséis, y así tenemos este hilo para saber que lenguajes leen todas las condiciones xD Respecto a la pregunta original, Ikillnukes, el compilador lo que hace es compilar, no averiguar si las condiciones (excepto las del tipo "#if") son o no son verdaderas.
|
|
|
En línea
|
|
|
|
~
|
jajajajajajajajajajajajajaja Es que no debemos perder el tiempo, Frodo. XD Bueno, aprovecho para comentar un mito que según sé es falso, pero quisiera saber si alguno de ustedes ha escuchado de él. Se dice que en las aplicaciones de VB.net cuando uno coloca un if de la forma: If A = True And B = True Then End If
Aunque la primera evaluación sea falsa se hace la segunda evaluación y por ello es mejor realizar un if anidado. Yo sigo creyendo que es un mito, pero qué dicen ustedes? No es cierto. Un código compilado que ejecutara todo el IF aunque este ya no cumpla una condición requerida sería extremadamente ineficiente. De hecho no es tan difícil programar a mano este tipo de optimización, y es más breve y hasta claro. Por ejemplo para el código anterior sería más eficiente compilarlo así: 1. comparar A==TRUE 2. si es FALSE, terminar el IF en 6 (y no se ejecuta la siguiente condición) 3. comparar B==TRUE 4. si es FALSE, terminar el IF en 6
5. { Código dentro del IF }
6. terminar el IF Que compilarlo así: 1. comparar A==TRUE 2. si es TRUE, seguir comparando en 3 (un salto inmediato poco inteligente) 3. comparar B==TRUE 4. si es TRUE, entrar en el IF en 6 5. ir a terminar el IF en 7
6 { Código dentro del IF }
7. terminar el IF Son más comprobaciones ejecutadas sin razón cuando se sabe que si se usa AND y no se cumple no hay caso de seguir ejecutando, y requiere un salto incondicional como terminador del IF (en el segundo caso, que es más ineficiente). Y si el IF fuera mucho más complejo, la ejecución sería menos que óptima, y eso no sería aceptable en aplicaciones de grado industrial que tienen elementos mucho más complejos que esto. Hablando de C++: En un IF con varias condiciones unidas por un AND (Ejemplo: "if(1 && 0);"), se leen en orden, y en el momento en que una sea falsa, acaba con el IF. Esto lo podemos ver fácilmente (¬¬ vagos) con un código como este: #include <iostream> bool asd(){ std::cout << "Hola"; return false; } int main () { if(2==0 && asd()); system("pause>nul"); }
Compilado con MinGW*Haced la prueba en VB, y los lenguajes que uséis, y así tenemos este hilo para saber que lenguajes leen todas las condiciones xD Respecto a la pregunta original, Ikillnukes, el compilador lo que hace es compilar, no averiguar si las condiciones (excepto las del tipo "#if") son o no son verdaderas. Eso depende de la comprobación y de la forma en la que se optimiza el código. Si por ejemplo hay valores constantes que siempre van a evaluar a verdadero o a falso, el compilador haría bien en eliminarlos, entre otras optimizaciones más complejas. Tener que comprobar todas las condiciones determinables en tiempo de compilación debería ser una optimización básica. También es necesario realizar otras comprobaciones para las demás optimizaciones y para eso se necesita algún nivel de evaluación del IF (el simple hecho de tener que compilarlo requiere eso).
|
|
|
En línea
|
|
|
|
Juan.
Desconectado
Mensajes: 85
|
En VB no lo puedo confirmar, lo odio y no pienso probar nada, pero en C# si se evalua false el primero el otro no se realiza public static Boolean a() { Console.WriteLine("Entro en A"); return false; }
public static Boolean b() { Console.WriteLine("Entro en B"); return false; }
private static void Main() { if (Program.a() && Program.b()) { Console.WriteLine("Entro"); } } Este código solo imprime entro en a, nada de lo demás
|
|
|
En línea
|
|
|
|
ABDERRAMAH
Desconectado
Mensajes: 431
en ocasiones uso goto ¬¬
|
¿C# no dispone del equivalente a andalso y orelse?
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Problema con php Condicion de session
« 1 2 »
PHP
|
alexkof158
|
15
|
11,829
|
27 Noviembre 2009, 22:10 pm
por [u]nsigned
|
|
|
Realmente tengo que usar clases cuando puedo simplemente usar Querys?
Java
|
Aikanáro Anário
|
3
|
3,454
|
27 Noviembre 2011, 01:54 am
por sapito169
|
|
|
No me sale INNER JOIN con condición
Bases de Datos
|
javirk
|
3
|
3,133
|
5 Abril 2012, 20:49 pm
por Runex
|
|
|
Duda_con condicion if
Java
|
Tuplado
|
3
|
2,263
|
28 Diciembre 2012, 17:01 pm
por 1mpuls0
|
|
|
Duda en una condición con return
« 1 2 »
Programación C/C++
|
Blaster
|
10
|
5,621
|
28 Junio 2013, 12:40 pm
por eferion
|
|