elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Un if realmente se lee cuando la condición es falsa?
0 Usuarios y 3 Visitantes están viendo este tema.
Páginas: 1 [2] 3 Ir Abajo Respuesta Imprimir
Autor Tema: Un if realmente se lee cuando la condición es falsa?  (Leído 10,912 veces)
BlackM4ster


Desconectado Desconectado

Mensajes: 499


Error, el teclado no funciona. Pulse F1 para continuar


Ver Perfil WWW
Re: Un if realmente se lee cuando la condición es falsa?
« Respuesta #10 en: 3 Octubre 2013, 08:27 am »

ABDERRAMAH el sabio jajajajajajajaj


En línea

- Pásate por mi web -
https://codeisc.com
El Benjo


Desconectado Desconectado

Mensajes: 392



Ver Perfil WWW
Re: Un if realmente se lee cuando la condición es falsa?
« Respuesta #11 en: 4 Octubre 2013, 02:04 am »

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:

Código
  1. If A = True And B = True Then
  2.  
  3. 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.com

Sí hay un mejor lenguaje de programación y es ese con el que puedes desarrollar tus objetivos.
rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Un if realmente se lee cuando la condición es falsa?
« Respuesta #12 en: 4 Octubre 2013, 03:15 am »

Una explicacion en detalle de ese tema se encuentra en la pagina Evaluación de "cortocircuitos" en Microsoft Visual Basic .NET

Un 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:.
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.118


Ingeniería inversa / MASM


Ver Perfil WWW
Re: Un if realmente se lee cuando la condición es falsa?
« Respuesta #13 en: 4 Octubre 2013, 03:27 am »

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).

Código
  1. if (var_a == true) {
  2. return 0;
  3. }
  4. .....
  5. ....
  6. ..

Esto en lenguaje ensamblador sería más menos así (reitero esto depende del compilador):

Código
  1. mov eax, dword ptr:[40381200] ; mueve el contenido de una dirección de memoria a la variable eax
  2. cmp eax,1 ; compara si eax (variable cual posee el contenido de var_a) es 1.
  3. jne continuar ; si no se cumple se dirigirá al label o etiqueta continuar.
  4. retn ; retorna a la dirección apuntada al principio del stack o pila
  5. continuar:
  6. ......
  7. ....
  8. ..

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 Desconectado

Mensajes: 431


en ocasiones uso goto ¬¬


Ver Perfil WWW
Re: Un if realmente se lee cuando la condición es falsa?
« Respuesta #14 en: 4 Octubre 2013, 10:11 am »

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:

Código
  1. If A = True And B = True Then
  2.  
  3. 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 Desconectado

Mensajes: 9.878



Ver Perfil
Re: Un if realmente se lee cuando la condición es falsa?
« Respuesta #15 en: 4 Octubre 2013, 15:15 pm »

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 Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Un if realmente se lee cuando la condición es falsa?
« Respuesta #16 en: 4 Octubre 2013, 17:04 pm »

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:

Código
  1. #include <iostream>
  2. bool asd(){
  3. std::cout << "Hola";
  4. return false;
  5. }
  6. int main () {
  7. if(2==0 && asd());
  8. system("pause>nul");
  9. }

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

~

Desconectado Desconectado

Mensajes: 85


Ver Perfil WWW
Re: Un if realmente se lee cuando la condición es falsa?
« Respuesta #17 en: 4 Octubre 2013, 22:16 pm »

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:

Código
  1. If A = True And B = True Then
  2.  
  3. 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í:
Código:
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í:
Código:
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:

Código
  1. #include <iostream>
  2. bool asd(){
  3. std::cout << "Hola";
  4. return false;
  5. }
  6. int main () {
  7. if(2==0 && asd());
  8. system("pause>nul");
  9. }

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

Donar con PayPal para que siga trabajando:
https://www.ebay.com/usr/udocproject3

Streams en vivo de programación:
PC 1 - PC 2

http://www.youtube.com/@AltComp126/streams
Juan.

Desconectado Desconectado

Mensajes: 85



Ver Perfil
Re: Un if realmente se lee cuando la condición es falsa?
« Respuesta #18 en: 5 Octubre 2013, 16:45 pm »

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

Código:
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 Desconectado

Mensajes: 431


en ocasiones uso goto ¬¬


Ver Perfil WWW
Re: Un if realmente se lee cuando la condición es falsa?
« Respuesta #19 en: 8 Octubre 2013, 14:13 pm »

¿C# no dispone del equivalente a andalso y orelse?
En línea

Páginas: 1 [2] 3 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema con php Condicion de session « 1 2 »
PHP
alexkof158 15 11,829 Último mensaje 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 Último mensaje 27 Noviembre 2011, 01:54 am
por sapito169
No me sale INNER JOIN con condición
Bases de Datos
javirk 3 3,133 Último mensaje 5 Abril 2012, 20:49 pm
por Runex
Duda_con condicion if
Java
Tuplado 3 2,263 Último mensaje 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 Último mensaje 28 Junio 2013, 12:40 pm
por eferion
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines