Pregunta

Si tengo un bloque de declaración como este:

if (/*condition here*/){ }
else{ }

o como este:

if (/*condition here*/)
else if (/*condition here*/) {}
else if (/*condition here*/) {}

¿Cuál es la diferencia?

Parece que con if / else, si parte es para el estado verdadero y la parte else es para todas las demás opciones posibles (falso). Un else-if sería útil para una serie de condiciones. Este es mi entendimiento, ¿hay algo más que deba tener en cuenta?

¿Fue útil?

Solución

Situación a:

if( condition )
{
}
else
{
}

Cuando la condición en la declaración anterior es falsa, las declaraciones en el bloque else siempre se ejecutarán.

Situación b:

if( condition )
{
}
else if( condition2 )
{
}
else
{
}

Cuando 'condición' es falsa, entonces las declaraciones en el bloque else solo se ejecutarán cuando la condición2 sea verdadera. Las declaraciones en el bloque else se ejecutarán cuando la condición2 sea falsa.

Otros consejos

Sin " elseif " sintaxis, tendría que escribir sentencias if en cadena para procesar uno de varios resultados posibles de esta manera:

if( str == "string1" ) {
   //handle first case
} else {
    if( str == "string2" ) {
       //handle second case
    } else {
       if( str == "string3" ) {
           //handle third case
       } else {
          //default case
       }
    }
 }

en cambio puedes escribir

if( str == "string1" ) {
   //handle first case
} else if( str == "string2" ) {
   //handle second case
} else if( str == "string3" ) {
   //handle third case
} else {
   //default case
}

que es completamente igual al anterior, pero se ve mucho mejor y es mucho más fácil de leer.

Muchos idiomas tienen una gramática como esta (aquí: Especificación del lenguaje ECMAScript , entonces JavaScript):

  

IfStatement :
  & nbsp; & nbsp; & nbsp; & nbsp; if ( Expresión ) Declaración else Declaración
  & nbsp; & nbsp; & nbsp; & nbsp; if ( Expresión ) Declaración

     

Declaración :
  & nbsp; & nbsp; & nbsp; & nbsp; Bloquear
  & nbsp; & nbsp; & nbsp; & nbsp; VariableStatement
  & nbsp; & nbsp; & nbsp; & nbsp; EmptyStatement
  & nbsp; & nbsp; & nbsp; & nbsp; ExpressionStatement
  & nbsp; & nbsp; & nbsp; & nbsp; IfStatement
  & nbsp; & nbsp; & nbsp; & nbsp; IterationStatement
  & nbsp; & nbsp; & nbsp; & nbsp; ContinueStatement
  & nbsp; & nbsp; & nbsp; & nbsp; BreakStatement
  & nbsp; & nbsp; & nbsp; & nbsp; DeclaraciónDeRetorno
  & nbsp; & nbsp; & nbsp; & nbsp; WithStatement
  & nbsp; & nbsp; & nbsp; & nbsp; LabelledStatement
  & nbsp; & nbsp; & nbsp; & nbsp; SwitchStatement
  & nbsp; & nbsp; & nbsp; & nbsp; ThrowStatement
  & nbsp; & nbsp; & nbsp; & nbsp; TryStatement

     

Bloquear :
  & nbsp; & nbsp; & nbsp; & nbsp; { StatementList opt }

     

Lista de declaraciones :
  & nbsp; & nbsp; & nbsp; & nbsp; Declaración
  & nbsp; & nbsp; & nbsp; & nbsp; Lista de declaraciones Declaración

Por lo tanto, las ramas de un ifStatement pueden contener un bloque de declaraciones ( Block ) o una de las otras declaraciones (que no sea Block ) . Eso significa que esto es válido:

if (expr)
    someStatement;
else
    otherStatement;

Y como StatementList puede contener una sola declaración, estos ejemplos son equivalentes a los anteriores:

if (expr) {
    someStatement;
} else {
    otherStatement;
}

if (expr)
    someStatement;
else {
    otherStatement;
}

if (expr) {
    someStatement;
} else
    otherStatement;

Y cuando reemplazamos otherStatement por un IfStatement adicional, obtenemos esto:

if (expr) {
    someStatement;
} else
    if (expr) {
        someOtherStatement;
    }

El resto es solo formato de código:

if (expr) {
    someStatement;
} else if (expr) {
    someOtherStatement;
}

Enfatizando lo que dijo Gumbo.

Además, si un idioma tiene un elif / elsif / elseif real (digamos, una instrucción '' real '' else-if, en lugar de un tipo de encadenamiento anidado oculto por el formateo), entonces el compilador puede emitir fácilmente un solo nodo en un árbol de sintaxis abstracta (o similar, consulte http://en.wikipedia.org/wiki/Abstract_syntax_tree ) en lugar de anidarlos.

Para dar un ejemplo:

Di en C / C ++ que tienes:

if (a) {
    X
} else if (b) {
    Y
} else if (c) {
    Z
} else {
    0
}

Entonces el compilador construirá un nodo AST como este:

   a
  / \
 X   b
    / \
   Y   c
      / \
     Z   0

Pero si el idioma de elección tiene un if-else real:

if (a) {
    X
} elif (b) {
    Y
} elif (c) {
    Z
} else {
    0
}

Entonces el AST podría verse más fácilmente así:

   (a--b--c)
   /  /  /  \
  X  Y  Z    0

En dicho lenguaje, un "si más" solo sería posible si las llaves no son obligatorias:

if (a) {
    X
} elif (b) {
    Y
} else if (c) {  // syntax error "missing braces" if braces mandatory
    Z
} else {
    0
}

AST correspondiente ( si las llaves no son obligatorias ):

   (a--b)
   /  /  \
  X  Y    c
         / \
        Z   0

Esto podría hacer un análisis CFG ( http://en.wikipedia.org/wiki/Control_flow_graph ) más fácil de implementar (aunque puede que no haya un beneficio de optimización real; por lo tanto, solo beneficiaría al programador perezoso: D).

else if básicamente significa la parte else de if es otra declaración if .

**if/else**
if(condition)
  statement;
else
   statement;

if / else if / else

if(condition)
 {
   if(condition)
      statement;
   else 
     statement;
  }   
else if(condition)
{
    if(condition)
     statement;
    else
     statement;
}
else
    statement;

if / else y if / else si se usa también así

Dada una sola variable, usará la estructura simple if-else . Cuando hay varias variables y tiene una ruta diferente para ejecutar para las diferentes posibilidades, utilizará if-else if -...- else . Tenga en cuenta que este último también termina con una instrucción else .

Ya has dado la respuesta tú mismo. if / else es para un resultado verdadero / falso, como es un int = 2 o cualquier otro valor int posible, y si / elseif es para más de 2 resultados, como un int = 2 y int = 3 y así sucesivamente.

También agrupa el contexto de una variable. Puede verificar cada resultado individual como

if (a == 2) { do one thing };
if (a == 3) { do another thing };
...
if (a != 2 && a != 3 ...) { do something else };

Con if / else / elseif es mejor legible.

si desea verificar más condiciones, podemos usar if..elseif. condición única, entonces podemos usar if o if ... else.

Aquí no puedo cargar la explicación completa con un ejemplo, así que vaya a los siguientes enlaces.

if..else detalles de la declaración
http://allinworld99.blogspot.in/2016 /02/ifelse-flow-chart-with-easy-example.html
if ... elseif detalles
http://allinworld99.blogspot.in /2016/02/flow-chart-with-example-for-if-then.html

import java.util.*;

public class JavaApplication21 {
    public static void main(String[] args) {

        Scanner obj = new Scanner(System.in);
        System.out.println("You are watching an example of if & else if statements");

        int choice, a, b, c, d;
        System.out.println(" Enter 1-Addition & 2-Substraction");

        int option = obj.nextInt();
        switch (option) {
            case (1):
                System.out.println("how many numbers you want to add.... it can add up to 3 numbers only");
                choice = obj.nextInt();
                if (choice == 2) {
                    System.out.println("Enter 1st number");
                    a = obj.nextInt();

                    System.out.println("Enter 2nd number");
                    b = obj.nextInt();

                    c = a + b;

                    System.out.println("Answer of adding " + a + " & " + b + " is= " + c);
                } else if (choice == 3) {
                    System.out.println("Enter 1st number");
                    a = obj.nextInt();

                    System.out.println("Enter 2nd number");
                    b = obj.nextInt();

                    System.out.println("Enter 3rd number");
                    c = obj.nextInt();

                    d = a + b + c;

                    System.out.println("Answer of adding " + a + " , " + b + " & " + c + "  is= " + d);
                }
            case (2):
                System.out.println("how many numbers you want to substract.... it can substract up to 3 numbers only");
                choice = obj.nextInt();
                if (choice == 2) {
                    System.out.println("Enter 1st number");
                    a = obj.nextInt();

                    System.out.println("Enter 2nd number");
                    b = obj.nextInt();

                    c = a - b;
                    System.out.println("Answer of substracting " + a + " & " + b + " is= " + c);
                } else if (choice == 3) {
                    System.out.println("Enter 1st number");
                    a = obj.nextInt();

                    System.out.println("Enter 2nd number");
                    b = obj.nextInt();

                    System.out.println("Enter 3rd number");
                    c = obj.nextInt();

                    d = a - b - c;
                    System.out.println("Answer of substracting " + a + " , " + b + " & " + c + "  is= " + d);
                }
            default:
                System.out.println("no option you have chosen" + option);
        }
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top