En informática , los condicionales (es decir, declaraciones condicionales , expresiones condicionales y construcciones condicionales ) son comandos del lenguaje de programación para manejar decisiones. Específicamente, los condicionales realizan diferentes cálculos o acciones dependiendo de si una condición booleana definida por el programador se evalúa como verdadera o falsa. En términos de flujo de control , la decisión siempre se logra alterando selectivamente el flujo de control en función de alguna condición (aparte del caso de predicación de rama ).


Aunque el envío dinámico no suele clasificarse como una construcción condicional, es otra forma de seleccionar entre alternativas en tiempo de ejecución .
Terminología
En los lenguajes de programación imperativos , el término " declaración condicional " se usa generalmente, mientras que en la programación funcional , se prefieren los términos " expresión condicional " o "construcción condicional", porque todos estos términos tienen significados distintos.
Si – entonces (–else)
La if–then
construcción (a veces llamada if–then–else
) es común en muchos lenguajes de programación. Aunque la sintaxis varía de un idioma a otro, la estructura básica (en forma de pseudocódigo ) se ve así:
If ( condición booleana ) Then ( consecuente ) Else ( alternativa ) End If
Por ejemplo:
Si de valores = 0 Luego de mensajes = orden nueva de Else mensaje = no es de la Final si
En el código de ejemplo anterior, la parte representada por (condición booleana) constituye una expresión condicional , que tiene un valor intrínseco (por ejemplo, puede ser sustituida por cualquiera de los valores True
o False
) pero no tiene un significado intrínseco. En contraste, la combinación de esta expresión, el If
y que la Then
rodea, y el consecuente que sigue después constituyen un enunciado condicional , que tiene un significado intrínseco (por ejemplo, que expresa una regla lógica coherente) pero no un valor intrínseco.
Cuando un intérprete encuentra una If
, espera una condición booleana (por ejemplo, x > 0
que significa "la variable x contiene un número mayor que cero") y evalúa esa condición. Si la condición es true
, then
se ejecutan las declaraciones que siguen a . De lo contrario, la ejecución continúa en la siguiente rama, ya sea en el else
bloque (que suele ser opcional) o, si no hay ninguna else
rama, después de end If
.
Después de que se haya ejecutado cualquiera de las ramas, el control vuelve al punto después de end If
.
Historia y desarrollo
En los primeros lenguajes de programación, especialmente en algunos dialectos de BASIC en las computadoras domésticas de la década de 1980 , una if–then
declaración solo podía contener GOTO
declaraciones (equivalente a una instrucción de rama ). Esto llevó a un estilo de programación difícil de leer conocido como programación espagueti , con programas en este estilo llamados código espagueti . Como resultado, la programación estructurada , que permite colocar sentencias (virtualmente) arbitrarias en bloques de sentencias dentro de una if
sentencia, ganó popularidad hasta que se convirtió en la norma incluso en la mayoría de los círculos de programación BÁSICA. Dichos mecanismos y principios se basaron en la familia de lenguajes ALGOL más antigua pero más avanzada , y lenguajes similares a ALGOL como Pascal y Modula-2 influyeron en las variantes BASIC modernas durante muchos años. Si bien es posible usar solo GOTO
declaraciones en if–then
declaraciones para escribir programas que no son código espagueti y que están tan bien estructurados y legibles como los programas escritos en un lenguaje de programación estructurado, la programación estructurada hace que esto sea más fácil y lo refuerza. Las if–then–else
declaraciones estructuradas como el ejemplo anterior son uno de los elementos clave de la programación estructurada y están presentes en los lenguajes de programación de alto nivel más populares, como C , Java , JavaScript y Visual Basic .
El problema de "colgar más"
La else
palabra clave está diseñada para apuntar a una if–then
declaración específica que la precede, pero para las if–then
declaraciones anidadas , los lenguajes de programación clásicos como ALGOL 60 lucharon por definir a qué declaración específica apuntar. Sin límites claros para qué declaración es cuál, una else
palabra clave podría apuntar a cualquier if–then
declaración anterior en el nido, tal como se analizó.
si a entonces si b entonces s si no s2
se puede analizar como
si a entonces ( si b entonces s) si no s2
o
si a entonces ( si b entonces s si no s2)
dependiendo de si else
está asociado con el primero if
o el segundo if
. Esto se conoce como el problema de colgar else y se resuelve de varias formas, dependiendo del idioma (comúnmente a través de la end if
declaración o {...}
corchetes).
De lo contrario si
Al usar else if
, es posible combinar varias condiciones. Solo se ejecutarán las declaraciones que sigan la primera condición que se considere verdadera. Se omitirán todas las demás declaraciones.
Si la condición continuación --statements elseif condición continuación - más declaraciones elseif condición continuación - más sentencias; ... else - otras declaraciones; terminar si ;
Por ejemplo, para una tienda que ofrece hasta un 30% de descuento por un artículo:
si descuento < 11 % y luego imprimir ( usted tiene que pagar $ 30 de ) elseif descuento < 21 % y luego imprimir ( usted tiene que pagar $ 20 ) elseif descuento < 31 % y luego imprimir ( usted tiene que pagar $ 10 ) final si ;
La elseif
declaración, en el Ada idioma, por ejemplo, es simplemente azúcar sintáctico para else
seguido por if
. En Ada, la diferencia es que solo end if
se necesita uno, si se usa en elseif
lugar de else
seguido de if
. PHP usa la elseif
palabra clave [1] tanto para sus llaves como para la sintaxis de dos puntos. Perl proporciona la palabra clave elsif
para evitar la gran cantidad de llaves que requerirían varias declaraciones if
y else
. Python usa la palabra clave especial elif
porque la estructura se denota por sangría en lugar de llaves, por lo que un uso repetido de else
y if
requeriría una mayor sangría después de cada condición. Algunas implementaciones de BASIC , como Visual Basic , [2]ElseIf
también usan . De manera similar, los shells de UNIX anteriores (luego reunidos en la sintaxis de shell POSIX [3] ) también usan elif, pero dando la opción de delimitar con espacios, saltos de línea o ambos.
Sin embargo, en muchos lenguajes descendientes más directamente de Algol, como Simula , Pascal , BCPL y C , esta sintaxis especial para la else if
construcción no está presente, ni está presente en los muchos derivados sintácticos de C, como Java , ECMAScript y pronto. Esto funciona porque en estos idiomas, ninguna sola declaración (en este caso ...) puede seguir un condicional sin ser encerrado en un bloque.if cond
Esta elección de diseño tiene un ligero "costo" en el sentido de que la else if
rama de código está, efectivamente, agregando un nivel extra de anidamiento, complicando el trabajo para algunos compiladores (o sus implementadores), que tienen que analizar e implementar else if
cadenas arbitrariamente largas de manera recursiva.
Si todos los términos en la secuencia de condicionales están probando el valor de una sola expresión (por ejemplo, if x=0
... else if x=1
... else if x=2
...), entonces una alternativa es la instrucción switch , también llamada instrucción case o instrucción select. Por el contrario, en los lenguajes que no tienen una instrucción de cambio, estos pueden producirse mediante una secuencia de else if
declaraciones.
Expresiones if-then-else
Muchos lenguajes admiten expresiones if , que son similares a las declaraciones if, pero devuelven un valor como resultado. Por lo tanto, son expresiones verdaderas (que evalúan un valor), no declaraciones (que pueden no estar permitidas en el contexto de un valor).
Familia Algol
ALGOL 60 y algunos otros miembros de la familia ALGOL permiten if–then–else
como expresión:
myvariable: = si x> 20 entonces 1 más 2
Dialectos Lisp
En dialectos de Lisp - Scheme , Racket y Common Lisp - el primero de los cuales se inspiró en gran medida en ALGOL:
;; Esquema ( definir mivariable ( si ( > x 12 ) 1 2 )) ; Asigna 'myvariable' a 1 o 2, según el valor de 'x'
;; Common Lisp ( let (( x 10 )) ( setq myvariable ( if ( > x 12 ) 2 4 ))) ; Asigna 'myvariable' a 2
Haskell
En Haskell 98, solo hay una expresión if , una declaración no if , y la else
parte es obligatoria, ya que cada expresión debe tener algún valor. [4] La lógica que se expresaría con condicionales en otros lenguajes generalmente se expresa con coincidencia de patrones en funciones recursivas.
Debido a que Haskell es vago , es posible escribir estructuras de control, como si , como expresiones ordinarias; la evaluación perezosa significa que una función if puede evaluar solo la condición y la rama adecuada (donde un lenguaje estricto evaluaría las tres). Se puede escribir así: [5]
if ' :: Bool -> a -> a -> a if' Verdadero x _ = x si ' Falso _ y = y
Lenguajes similares a C
Los lenguajes C y C-like tienen un operador ternario especial ( ?:) Para expresiones condicionales con una función que puede ser descrita por una plantilla como esta:
condition ? evaluated-when-true : evaluated-when-false
Esto significa que se puede insertar en expresiones, a diferencia de las sentencias if, en lenguajes similares a C:
mi_variable = x > 10 ? "foo" : "barra" ; // En lenguajes similares a C
que se puede comparar con las expresiones if-then-else de la familia Algol (en contraste con una declaración ) (y similar en Ruby y Scala, entre otras).
Para lograr lo mismo usando una declaración if, esto tomaría más de una línea de código (según las convenciones de diseño típicas) y requeriría mencionar "my_variable" dos veces:
if ( x > 10 ) my_variable = "foo" ; si no mi_variable = "barra" ;
Algunos argumentan que la declaración explícita if / then es más fácil de leer y que puede compilarse en un código más eficiente que el operador ternario, [6] mientras que otros argumentan que las expresiones concisas son más fáciles de leer que las declaraciones distribuidas en varias líneas que contienen repetición.
Pequeño Básico
x = TextWindow . ReadNumber () If ( x > 10 ) Then TextWindow . WriteLine ( "Mi variable se llama 'foo'." ) Else TextWindow . WriteLine ( "Mi variable se llama 'bar'." ) EndIf
Primero, cuando el usuario ejecuta el programa, aparece un cursor esperando que el lector escriba un número. Si ese número es mayor que 10, el texto "Mi variable se llama 'foo'". se muestra en la pantalla. Si el número es menor que 10, el mensaje "Mi variable se llama 'barra'". está impreso en la pantalla.
Visual Basic
En Visual Basic y algunos otros lenguajes, IIf
se proporciona una función llamada , que se puede usar como expresión condicional. Sin embargo, no se comporta como una expresión condicional verdadera, porque tanto la rama verdadera como la falsa siempre se evalúan; es solo que el resultado de uno de ellos se desecha, mientras que el resultado del otro es devuelto por la función IIf.
Tcl
En Tcl if
no es una palabra clave sino una función (en Tcl conocida como comando o proc
). Por ejemplo
si { $ x > 10 } { pone "¡Foo!" }
invoca una función llamada if
pasando 2 argumentos: el primero es la condición y el segundo es la rama verdadera. Ambos argumentos se pasan como cadenas (en Tcl, todo lo que está entre corchetes es una cadena).
En el ejemplo anterior, la condición no se evalúa antes de llamar a la función. En cambio, la implementación de la if
función recibe la condición como un valor de cadena y es responsable de evaluar esta cadena como una expresión en el alcance de los llamadores. [7]
Este comportamiento es posible mediante el uso de los comandos uplevel
y expr
:
- Uplevel hace posible implementar nuevas construcciones de control como procedimientos Tcl (por ejemplo, uplevel podría usarse para implementar la construcción while como un procedimiento Tcl). [8]
Debido a if
que en realidad es una función, también devuelve un valor:
- El valor de retorno del comando es el resultado de la secuencia de comandos del cuerpo que se ejecutó, o una cadena vacía si ninguna de las expresiones era distinta de cero y no había cuerpoN. [9]
Oxido
En Rust , if
siempre es una expresión. Se evalúa al valor de cualquier rama que se ejecute, o al tipo de unidad ()
si no se ejecuta ninguna rama. Si una rama no proporciona un valor de retorno, se evalúa ()
de forma predeterminada. Para garantizar que if
se conozca el tipo de la expresión en el momento de la compilación, cada rama debe evaluar un valor del mismo tipo. Por esta razón, una else
rama es efectivamente obligatoria a menos que las otras ramas evalúen a ()
, porque un if
sin un else
siempre puede evaluar a ()
de forma predeterminada. [10]
// Asignar my_variable algún valor, dependiendo del valor de x let my_variable = if x > 20 { 1} más { 2};// Esta variante no se compilará porque 1 y () tienen tipos diferentes let my_variable = if x > 20 { 1};// Los valores se pueden omitir cuando no son necesarios si x > 20 { println! ( "x es mayor que 20" );}
Aritmética si
Hasta Fortran 77 , el lenguaje Fortran tiene una declaración "aritmética if" que está a medio camino entre una IF calculada y una declaración de caso, basada en la tricotomía x <0, x = 0, x > 0. Esta fue la declaración condicional más antigua en Fortran: [11]
SI ( e ) label1 , label2 , LABEL3
Donde e es cualquier expresión numérica (no necesariamente un número entero); esto es equivalente a
IF ( e . LT . 0 ) GOTO label1 IF ( e . EQ . 0 ) GOTO label2 GOTO label3
Debido a que este IF aritmético es equivalente a múltiples GOTO
declaraciones que podrían saltar a cualquier lugar, se considera una declaración de control no estructurada y no debe usarse si se pueden usar declaraciones más estructuradas. En la práctica, se ha observado que la mayoría de los IF
enunciados aritméticos hacen referencia al siguiente enunciado con una o dos de las etiquetas.
Esta fue la única declaración de control condicional en la implementación original de Fortran en la computadora IBM 704 . En esa computadora, el código de operación de prueba y rama tenía tres direcciones para esos tres estados. Otras computadoras tendrían registros de "bandera" como positivo, cero, negativo, par, desbordamiento, acarreo, asociados con las últimas operaciones aritméticas y usarían instrucciones como 'Ramificar si el acumulador es negativo' y luego 'Ramificar si el acumulador es cero' o similar. Tenga en cuenta que la expresión se evalúa solo una vez y, en casos como la aritmética de enteros, donde puede producirse un desbordamiento, también se considerarían los indicadores de desbordamiento o acarreo.
Implementación orientada a objetos en Smalltalk
A diferencia de otros lenguajes, en Smalltalk la declaración condicional no es una construcción del lenguaje, sino que se define en la clase Boolean
como un método abstracto que toma dos parámetros, ambos cierres . Boolean
tiene dos subclases, True
y False
, las cuales definen el método, True
ejecutan solo el primer cierre, False
ejecutan solo el segundo cierre. [12]
var = condición ifTrue: [ 'foo' ] ifFalse: [ 'bar' ]
JavaScript
Dos ejemplos en JavaScript :
if ( Math . random () < 0.5 ) { console . log ( "¡Tienes cabezas!" ); } else { consola . log ( "¡Tienes Tails!" ); }
[ aclaración necesaria ]
var x = Matemáticas . aleatorio (); si ( x < 1 / 3 ) { consola . log ( "¡Una persona ganó!" ); } Demás si ( x < 2 / 3 ) { consola . log ( "¡Dos personas ganaron!" ); } else { consola . log ( "¡Es un empate a tres bandas!" ); }
[ aclaración necesaria ]
Cálculo lambda
En el cálculo de Lambda , el concepto de un condicional if-then-else se puede expresar mediante las expresiones:
verdadero = λx. λy. Xfalso = λx. λy. yifThenElse = (λc. λx. λy. (cxy))
- true toma hasta dos argumentos y una vez que se proporcionan ambos (ver currying ), devuelve el primer argumento dado.
- false toma hasta dos argumentos y una vez que se proporcionan ambos (ver currying ), devuelve el segundo argumento dado.
- ifThenElse toma hasta tres argumentos y una vez que se proporcionan todos, pasa tanto el segundo como el tercer argumento al primer argumento (que es una función que da dos argumentos y produce un resultado). Esperamos que ifThenElse solo tome verdadero o falso como argumento, los cuales proyectan los dos argumentos dados a su argumento único preferido, que luego se devuelve.
nota : si ifThenElse se pasa dos funciones como condicionales izquierdo y derecho; también es necesario pasar una tupla vacía () al resultado de ifThenElse para realmente llamar a la función elegida, de lo contrario ifThenElse simplemente devolverá el objeto de la función sin ser llamado.
En un sistema donde los números se pueden usar sin definición (como Lisp, Matemáticas tradicionales en papel, etc.), lo anterior se puede expresar como un solo cierre a continuación:
(( λverdadero. λfalse. λifThenElse. ( ifThenElse true 2 3 ) ) ( λx. λy. x ) ( λx. λy. y ) ( λc. λl. λr. c l r ))
Aquí, verdadero, falso y ifThenElse están vinculados a sus respectivas definiciones que se pasan a su alcance al final de su bloque.
Una analogía de JavaScript funcional (usando solo funciones de una sola variable para el rigor) es:
var computationResult = (( _true => _false => _ifThenElse => _ifThenElse ( _true ) ( 2 ) ( 3 ) ) ( x => y => x ) ( x => y => y ) ( c => x => y => c ( x ) ( y )));
El código anterior con funciones multivariables se ve así:
var computationResult = (( _true , _false , _ifThenElse ) => _ifThenElse ( _true , 2 , 3 ) ) (( x , y ) => x , ( x , y ) => y , ( c , x , y ) => c ( x , y ));
a continuación se muestra otra versión del ejemplo anterior sin un sistema en el que se asumen números.
El primer ejemplo muestra que se está tomando la primera rama, mientras que el segundo ejemplo muestra que se está tomando la segunda rama.
(( λtrue. λfalse. λifThenElse. ( ifThenElse true ( λFirstBranch. FirstBranch ) ( λSecondBranch. SecondBranch )) ) ( λx. λy. x ) ( λx. λy. y ) ( λc. λl. λr. c l r ) (( λtrue. λfalse. λifThenElse. ( ifThenElse false ( λFirstBranch. FirstBranch ) ( λSecondBranch. SecondBranch )) ) ( λx. λy. x ) ( λx. λy. y ) ( λc. λl. λr. c l r )
Smalltalk usa una idea similar para sus representaciones verdaderas y falsas, siendo True y False objetos únicos que responden a los mensajes ifTrue / ifFalse de manera diferente.
Haskell solía usar este modelo exacto para su tipo booleano, pero en el momento de escribir este artículo, la mayoría de los programas de Haskell usan la construcción sintáctica "if a then b else c" que, a diferencia de ifThenElse, no se compone a menos que esté envuelto en otra función o re-implementado como se muestra en la sección The Haskell de esta página.
Declaraciones de casos y conmutadores
Las sentencias de cambio (en algunos lenguajes, sentencias de casos o ramas de múltiples vías) comparan un valor dado con constantes especificadas y toman medidas de acuerdo con la primera constante que coincida. Por lo general, existe una disposición para que se realice una acción predeterminada ('si no', 'de lo contrario') si ninguna coincidencia tiene éxito. Las sentencias de cambio pueden permitir optimizaciones del compilador , como tablas de búsqueda . En los lenguajes dinámicos, los casos pueden no estar limitados a expresiones constantes y pueden extenderse a la coincidencia de patrones , como en el ejemplo de script de shell de la derecha, donde '*)' implementa el caso predeterminado como una expresión regular que coincide con cualquier cadena.
Pascal : | C : | Secuencia de comandos de shell : |
---|---|---|
caso someChar de 'a' : actionOnA ; 'x' : actionOnX ; 'y' , 'z' : actionOnYandZ ; else actionOnNoMatch ; terminar ; | switch ( someChar ) { caso 'a' : actionOnA ; romper ; caso 'x' : actionOnX ; romper ; caso 'y' : caso 'z' : actionOnYandZ ; romper ; predeterminado : actionOnNoMatch ; } | case $ someChar en a ) actionOnA ; ;; x ) actionOnX ; ;; [ yz ]) actionOnYandZ ; ;; * ) actionOnNoMatch ;; esac |
La coincidencia de patrones
La concordancia de patrones puede verse como una alternativa tanto a if-then-else como a declaraciones de casos . Está disponible en muchos lenguajes de programación con características de programación funcionales, como Wolfram Language , ML y muchos otros. Aquí hay un ejemplo simple escrito en el lenguaje OCaml :
emparejar fruta con | "manzana" -> cocinar pastel | "coco" -> cocinar dango_mochi | "banana" -> mezclar ;;
El poder de la coincidencia de patrones es la capacidad de hacer coincidir de manera concisa no solo acciones sino también valores con patrones de datos. Aquí hay un ejemplo escrito en Haskell que ilustra estas dos características:
mapa _ [] = [] mapa f ( h : t ) = f h : mapa f t
Este código define un mapa de funciones , que aplica el primer argumento (una función) a cada uno de los elementos del segundo argumento (una lista) y devuelve la lista resultante. Las dos líneas son las dos definiciones de la función para los dos tipos de argumentos posibles en este caso: uno donde la lista está vacía (solo devuelve una lista vacía) y el otro caso donde la lista no está vacía.
La coincidencia de patrones no es siempre, estrictamente hablando, una construcción de elección, porque en Haskell es posible escribir solo una alternativa, que se garantiza que siempre coincidirá; en esta situación, no se utiliza como una construcción de elección, sino simplemente como una forma para vincular nombres a valores. Sin embargo, se utiliza con frecuencia como una construcción de elección en los idiomas en los que está disponible.
Condicionales basados en hash
En los lenguajes de programación que tienen matrices asociativas o estructuras de datos comparables, como Python , Perl , PHP u Objective-C , es idiomático usarlos para implementar la asignación condicional. [13]
mascota = raw_input ( "Introduzca el tipo de mascota que desea asignar un nombre:" ) known_pets = { "perro" : "Fido" , "gato" : "Meowsles" , "ave" : "Tweety" , } mi_nombre = known_pets [ mascota ]
En lenguajes que tienen funciones anónimas o que permiten a un programador asignar una función nombrada a una referencia de variable, el flujo condicional se puede implementar usando un hash como tabla de despacho .
Predicación
Una alternativa a las instrucciones de bifurcación condicional es la predicación . La predicción es una característica arquitectónica que permite que las instrucciones se ejecuten condicionalmente en lugar de modificar el flujo de control .
Referencia cruzada del sistema de elección
Esta tabla se refiere a la especificación de idioma más reciente de cada idioma. Para los idiomas que no tienen una especificación, se hace referencia a la última implementación publicada oficialmente.
Lenguaje de programación | Estructurado si | cambiar –seleccionar – caso | Aritmética si | Coincidencia de patrones [A] | ||
---|---|---|---|---|---|---|
luego | demás | si no | ||||
Ada | sí | sí | sí | sí | No | No |
APL | sí | sí | sí | sí | No | No |
Concha de Bash | sí | sí | sí | sí | No | sí |
C , C ++ | sí | sí | sí | Caer a través | No | No |
C# | sí | sí | Innecesario [B] | sí | No | No |
COBOL | sí | sí | Innecesario [B] | sí | No | No |
Eiffel | sí | sí | sí | sí | No | No |
F# | sí | sí | sí | Innecesario [C] | No | sí |
Fortran 90 | sí | sí | sí | sí | Sí [F] | No |
Ir | sí | sí | Innecesario [B] | sí | No | No |
Haskell | sí | Necesario | Innecesario [B] | Sí, pero innecesario [C] | No | sí |
Java | sí | sí | Innecesario [B] | Fall-through [14] | No | No |
ECMAScript ( JavaScript ) | sí | sí | Innecesario [B] | Fall-through [15] | No | No |
Mathematica | sí | sí | sí | sí | No | sí |
Oberon | sí | sí | sí | sí | No | No |
Perl | sí | sí | sí | sí | No | No |
PHP | sí | sí | sí | Caer a través | No | No |
Pascal , Objeto Pascal ( Delphi ) | sí | sí | Innecesario | sí | No | No |
Pitón | sí | sí | sí | No | No | No |
QuickBASIC | sí | sí | sí | sí | No | No |
Rubí | sí | sí | sí | sí | No | Sí [G] |
Oxido | sí | sí | sí | Innecesario | No | sí |
Scala | sí | sí | Innecesario [B] | Fall-through [ cita requerida ] | No | sí |
SQL | Sí [E] | sí | sí | Sí [E] | No | No |
Rápido | sí | sí | sí | sí | No | sí |
Tcl | sí | sí | sí | sí | No | sí |
Visual Basic , clásico | sí | sí | sí | sí | No | No |
Visual Basic .NET | sí | sí | sí | sí | No | No |
Windows PowerShell | sí | sí | sí | Caer a través | No | No |
- ^ Esto se refiere a la coincidencia de patrones como una construcción condicional distinta en el lenguaje de programación, a diferencia del mero soporte de coincidencia de patrones de cadena, comoelsoporte deexpresiones regulares.
- 1 2 3 4 5 La que se encuentra a menudo
else if
en la familia de lenguajes C, y en COBOL y Haskell, no es una característica del lenguaje, sino un conjunto dedeclaracionesif then elseanidadas e independientescombinadas con un diseño de código fuente particular. Sin embargo, esto también significa que en estos lenguajes no se necesita realmente una construcción else – if distinta. - 1 2 En Haskell y F #, no se necesita una construcción de elección constante separada, porque la misma tarea se puede realizar con la coincidencia de patrones.
- ^ En una
case
construcción deRuby,lacoincidencia deexpresiones regulares seencuentra entre las alternativas de control de flujo condicional disponibles. Para ver un ejemplo, consulteestapregunta sobre desbordamiento de pila. - 1 2 SQL tiene dos construcciones similares que cumplen ambos roles, ambos introducidos enSQL-92. Una
CASE
expresión"buscada"CASE WHEN cond1 THEN expr1 WHEN cond2 THEN expr2 [...] ELSE exprDflt END
funciona comoif ... else if ... else
, mientras que unaCASE
expresión"simple":CASE expr WHEN val1 THEN expr1 [...] ELSE exprDflt END
funciona como una declaración de cambio. Para obtener detalles y ejemplos, consulteCase (SQL). - ^ La aritmética
if
es obsoleta en Fortran 90. - ^ La coincidencia de patrones se agregó en Ruby 3.0. [16]Algunas construcciones de coincidencia de patrones aún son experimentales.
Ver también
- Rama (ciencias de la computación)
- Compilación condicional
- Despacho dinámico para otra forma de tomar decisiones de ejecución
- Formalismo McCarthy para la historia y las referencias históricas
- Condición nombrada
- Operador relacional
- Prueba (Unix)
- Condiciones de Yoda
- Movimiento condicional
Referencias
- ^ Sintaxis de PHP elseif
- ^ Sintaxis de Visual Basic ElseIf
- ^ Sintaxis de shell estándar POSIX
- ^ Bibliotecas y lenguaje Haskell 98: el informe revisado
- ^ " Propuesta si-entonces-si no en HaskellWiki "
- ^ "Consejos C eficaces n. ° 6: no utilice el operador ternario« Desbordamiento de pila " . Embeddedgurus.com. 2009-02-18 . Consultado el 7 de septiembre de 2012 .
- ^ "Nuevas estructuras de control" . Wiki de Tcler . Consultado el 21 de agosto de 2020 .
- ^ "página de manual de nivel superior" . www.tcl.tk . Consultado el 21 de agosto de 2020 .
- ^ "si página de manual" . www.tcl.tk . Consultado el 21 de agosto de 2020 .
- ^ "Si y si deja expresiones" . Consultado el 1 de noviembre de 2020 .
- ^ "Lenguaje de programación estándar nacional estadounidense FORTRAN" . 1978-04-03. Archivado desde el original el 11 de octubre de 2007 . Consultado el 9 de septiembre de 2007 .
- ^ "VisualWorks: procesamiento condicional" . 2006-12-16. Archivado desde el original el 22 de octubre de 2007 . Consultado el 9 de septiembre de 2007 .
- ^ "Manera Pythonic de implementar declaraciones switch / case" . Archivado desde el original el 20 de enero de 2015 . Consultado el 19 de enero de 2015 .
- ^ Java.sun.com , Especificación del lenguaje Java, 3.ª edición.
- ^ Ecma-international.org Archivado el 12 de abril de 2015 en laespecificación del lenguaje Wayback Machine ECMAScript, quinta edición.
- ^ "Coincidencia de patrones" . Documentación para Ruby 3.0 .
enlaces externos
Medios relacionados con Condicional (programación informática) en Wikimedia Commons
- SI NO (ActionScript 3.0) video