Condicional (programación informática)

Declaración de flujo de control que ejecuta código de acuerdo con algunas condiciones
Diagrama de flujo if-then-else (si-entonces-de lo contrario)
Diagrama de flujo anidado if-then-else

En informática , los condicionales (es decir, declaraciones condicionales , expresiones condicionales y construcciones condicionales ) son construcciones del lenguaje de programación que realizan diferentes cálculos o acciones o devuelven diferentes valores dependiendo del valor de una expresión booleana , llamada condición .

Los condicionales se implementan normalmente mediante la ejecución selectiva de instrucciones. 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

Las sentencias condicionales son construcciones imperativas que se ejecutan para obtener efectos secundarios, mientras que las expresiones condicionales devuelven valores. Muchos lenguajes de programación (como C) tienen sentencias condicionales y expresiones condicionales distintas. Aunque en la programación funcional pura , las expresiones condicionales no tienen efectos secundarios , muchos lenguajes con expresiones condicionales (como Lisp) admiten efectos secundarios condicionales.

Si-entonces(-de lo contrario)

La construcción if–thenor if–then–elsese utiliza en muchos lenguajes de programación. Aunque la sintaxis varía de un lenguaje a otro, la estructura básica (en forma de pseudocódigo ) es la siguiente:

Si (condición booleana) Entonces (consiguiente)Demás (alternativa)Fin si

Por ejemplo:

Si stock=0 Entonces mensaje=pedir nuevo stockDemás mensaje=hay stockFin 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 sustituirse por cualquiera de los valores Trueo False) pero que no tiene significado intrínseco. Por el contrario, la combinación de esta expresión, el Ify Thenque la rodea y el consecuente que le sigue después constituyen una declaración condicional , que tiene un significado intrínseco (por ejemplo, expresa una regla lógica coherente) pero no tiene valor intrínseco.

Cuando un intérprete encuentra un 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, se ejecutan las instrucciones que siguen al then. 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 elserama, después del 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 algunos dialectos de BASIC en los ordenadores domésticos de los años 1980 , una if–thensentencia sólo podía contener GOTOsentencias (equivalentes a una instrucción de bifurcación ). Esto dio lugar 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 poner sentencias (prácticamente) arbitrarias en bloques de sentencias dentro de una ifsentencia, ganó popularidad, hasta convertirse en la norma incluso en la mayoría de los círculos de programación BASIC. Dichos mecanismos y principios se basaban en la antigua pero más avanzada familia de lenguajes ALGOL , y los lenguajes similares a ALGOL como Pascal y Modula-2 influyeron en las variantes modernas de BASIC durante muchos años. Si bien es posible, utilizando sólo GOTOsentencias en if–thensentencias, escribir programas que no sean código espagueti y que estén tan bien estructurados y sean tan legibles como los programas escritos en un lenguaje de programación estructurado, la programación estructurada lo hace más fácil y lo refuerza. Las declaraciones estructuradas if–then–elsecomo 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 del "dejar algo pendiente"

La elsepalabra clave está diseñada para apuntar a una if–thendeclaración específica que la precede, pero en el caso de las declaraciones anidadas if–then , los lenguajes de programación clásicos como ALGOL 60 tenían dificultades para definir a qué declaración específica apuntar. Sin límites claros para cada declaración, una elsepalabra clave podría apuntar a cualquier if–thendeclaración anterior en el anidamiento, tal como se analiza.

Si a entonces  si b entonces s de lo contrario s2

se puede analizar como

Si a entonces ( si b entonces s) de lo contrario s2

o

Si a entonces ( si b entonces s de lo contrario s2)

Dependiendo de si el elseestá asociado con el primero ifo el segundo if. Esto se conoce como el problema del else colgante y se resuelve de varias maneras, según el lenguaje (comúnmente a través de la end ifdeclaración o {...}corchetes).

De lo contrario si

Al utilizar else if, es posible combinar varias condiciones. Solo se ejecutarán las instrucciones que siguen a la primera condición que se considere verdadera. Se omitirán todas las demás instrucciones.

si condición entonces  -- declaraciones elseif condición entonces  -- más declaraciones elseif condición entonces  -- más declaraciones;...else  - otras declaraciones; fin si ;

Por ejemplo, para una tienda que ofrece hasta un 30% de descuento en un artículo:

Si el descuento < 11% entonces imprimir (tienes que pagar $30)De lo contrario, si el descuento es <21% , entonces imprimir (tienes que pagar $20)De lo contrario, si el descuento es <31% , entonces imprimir (tienes que pagar $10)fin si ;

En el ejemplo anterior, si el descuento es del 10 %, la primera declaración if se evaluará como verdadera y se imprimirá "tienes que pagar $30". Se omitirán todas las demás declaraciones que se encuentren debajo de esa primera declaración if.

La elseifdeclaración, en el lenguaje Ada por ejemplo, es simplemente azúcar sintáctica para elseseguido de if. En Ada, la diferencia es que solo end ifse necesita uno, si se usa elseifen lugar de elseseguido de if. PHP usa la elseifpalabra clave [1] tanto para sus sintaxis de llaves como de dos puntos. Perl proporciona la palabra clave elsifpara evitar la gran cantidad de llaves que serían requeridas por múltiples declaraciones ify else. Python usa la palabra clave especial elifporque la estructura se denota por sangría en lugar de llaves, por lo que un uso repetido de elsey ifrequeriría una sangría aumentada después de cada condición. Algunas implementaciones de BASIC , como Visual Basic , [2] usan ElseIftoo. De manera similar, los shells UNIX anteriores (posteriormente 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 que descienden más directamente de Algol, como Simula , Pascal , BCPL y C , esta sintaxis especial para la else ifconstrucción no está presente, ni tampoco está presente en los muchos derivados sintácticos de C, como Java , ECMAScript , etc. Esto funciona porque en estos lenguajes, cualquier declaración individual (en este caso ...) puede seguir a un condicional sin estar encerrada en un bloque.if cond

Esta opción de diseño tiene un pequeño "costo". Cada else iframa añade efectivamente un nivel de anidación adicional. Esto complica el trabajo del compilador (o de las personas que escriben el compilador), porque el compilador debe analizar e implementar else ifcadenas arbitrariamente largas de forma recursiva.

Si todos los términos de 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...), una alternativa es la sentencia switch , también llamada sentencia case o sentencia select. Por el contrario, en lenguajes que no tienen sentencia switch, estas pueden ser producidas por una secuencia de else ifsentencias.

Expresiones if-then-else

Muchos lenguajes admiten expresiones if , que son similares a las instrucciones if, pero devuelven un valor como resultado. Por lo tanto, son expresiones verdaderas (que se evalúan como un valor), no instrucciones (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–elsecomo expresión:

 mivariable := si x > 20 entonces 1 sino 2

Dialectos de Lisp

En los dialectos de Lisp  ( Scheme , Racket y Common Lisp  ), el primero de los cuales se inspiró en gran medida en ALGOL:

;; Esquema ( define myvariable ( if ( > x 12 ) 1 2 )) ; Asigna 'myvariable' a 1 o 2, dependiendo del 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 , no hay ninguna declaración if y la elseparte 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.

Como Haskell es perezoso , es posible escribir estructuras de control, como if , como expresiones ordinarias; la evaluación perezosa significa que una función if puede evaluar solo la condición y la rama apropiada (donde un lenguaje estricto evaluaría las tres). Se puede escribir de esta manera: [5]

si' :: Bool -> a -> a -> a si' Verdadero x _ = x si' Falso _ y = y                  

Lenguajes similares a C

Los lenguajes C y similares tienen un operador ternario especial ( ?: ) para expresiones condicionales con una función que puede describirse mediante una plantilla como esta:

condition ? evaluated-when-true : evaluated-when-false

Esto significa que se puede incorporar en expresiones, a diferencia de las declaraciones if, en lenguajes tipo C:

my_variable = x > 10 ? "foo" : "bar" ; // En lenguajes tipo C         

que puede compararse con las expresiones if–then–else de la familia Algol (en contraste con una declaración ) (y similares en Ruby y Scala, entre otros).

Para lograr lo mismo usando una declaración if, esto tomaría más de una línea de código (bajo las convenciones de diseño típicas) y requeriría mencionar "my_variable" dos veces:

si ( x > 10 ) mi_variable = "foo" ; de lo contrario mi_variable = "bar" ;         

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

x = TextWindow . ReadNumber () If ( x > 10 ) Then TextWindow . WriteLine ( "Mi variable se llama 'foo'." ) Else TextWindow . WriteLine ( "Mi variable se llama 'bar'." ) EndIf        

En primer lugar, cuando el usuario ejecuta el programa, aparece un cursor esperando a que el lector escriba un número. Si ese número es mayor que 10, se muestra en la pantalla el texto "Mi variable se llama 'foo'". Si el número es menor que 10, se imprime en la pantalla el mensaje "Mi variable se llama 'bar'".

Visual Basic

En Visual Basic y otros lenguajes, IIfse proporciona una función llamada, que se puede utilizar 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; simplemente, el resultado de una de ellas se descarta, mientras que el resultado de la otra lo devuelve la función IIf.

Tcl

En Tcl if no es una palabra clave sino una función (en Tcl se la conoce como comando o proc). Por ejemplo

si { $x > 10 } { pone "¡Foo!" }      

invoca una función llamada ify pasa 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 llaves 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 iffunción recibe la condición como un valor de cadena y es responsable de evaluar esta cadena como una expresión en el ámbito de los llamadores. [7]

Este comportamiento es posible mediante el uso de los comandos uplevely expr:

Uplevel permite 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 que ifen realidad es una función, también devuelve un valor:

El valor de retorno del comando es el resultado del cuerpo del script que se ejecutó, o una cadena vacía si ninguna de las expresiones era distinta de cero y no había ningún bodyN. [9]

Óxido

En Rust , ifsiempre es una expresión. Se evalúa como el valor de la rama que se ejecuta, o como el tipo de unidad ()si no se ejecuta ninguna rama. Si una rama no proporciona un valor de retorno, se evalúa como ()de forma predeterminada. Para garantizar ifque se conozca el tipo de la expresión en el momento de la compilación, cada rama debe evaluarse como un valor del mismo tipo. Por este motivo, una elserama es efectivamente obligatoria a menos que las otras ramas evalúen como (), porque una ifsin una elsesiempre puede evaluarse como ()de forma predeterminada. [10]

// Asigna a my_variable algún valor, dependiendo del valor de x let my_variable = if x > 20 { 1 } else { 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 sean necesarios si x > 20 { println! ( "x es mayor que 20" ); }     

Condicionales protegidos

El lenguaje de comandos protegidos (GCL) de Edsger Dijkstra admite la ejecución condicional como una lista de comandos que consta de una protección con valor booleano (que corresponde a una condición ) y su instrucción correspondiente. En GCL, se evalúa exactamente una de las instrucciones cuya protección es verdadera, pero cuál es arbitraria. En este código

si G0 → S0 □ G1 → S1... □ Gn → Snen fin

Las G i son las protecciones y las S i son las instrucciones. Si ninguna de las protecciones es verdadera, el comportamiento del programa no está definido.

GCL está pensado principalmente para razonar sobre programas, pero se han implementado notaciones similares en Concurrent Pascal y Occam .

Aritmética si

Hasta Fortran 77 , el lenguaje Fortran tenía una declaración aritmética if que salta a una de tres etiquetas dependiendo de si su argumento e es e < 0, e = 0, e > 0. Esta fue la primera declaración condicional en Fortran. [11]

Sintaxis

SI ( e ) etiqueta1 , etiqueta2 , etiqueta3    

Donde e es cualquier expresión numérica (no necesariamente un número entero).

Semántica

Esto es equivalente a esta secuencia, donde e se evalúa solo una vez.

SI ( e . LT . 0 ) IR A etiqueta1 SI ( e . EQ . 0 ) IR A etiqueta2 SI ( e . GT . 0 ) IR A etiqueta3               

Estilística

La aritmética if es una declaración de control no estructurada y no se utiliza en programación estructurada .

En la práctica se ha observado que la mayoría de IFlas declaraciones aritméticas hacen referencia a la siguiente declaración 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 bifurcación tenía tres direcciones para esos tres estados. Otras computadoras tendrían registros de "indicadores" como positivo, cero, negativo, par, desbordamiento, acarreo, asociados con las últimas operaciones aritméticas y usarían instrucciones como 'Bifurcar si acumulador negativo' y luego 'Bifurcar si acumulador cero' o similares. Tenga en cuenta que la expresión se evalúa solo una vez y, en casos como la aritmética de números enteros donde puede ocurrir 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 Booleancomo un método abstracto que toma dos parámetros, ambos cierres . Booleantiene dos subclases, Truey False, que definen el método, Trueejecutando solo el primer cierre, Falseejecutando solo el segundo cierre. [12]

var  =  condición  ifTrue: [ 'foo' ] ifFalse: [ 'bar' ]

JavaScript

JavaScript utiliza declaraciones if-else similares a las de los lenguajes C. Se acepta un valor booleano entre paréntesis entre la palabra clave reservada if y una llave izquierda.

if ( Math . random () < 0.5 ) { console . log ( "¡Obtuviste cara!" ); } else { console . log ( "¡Obtuviste cruz!" ); }        

El ejemplo anterior toma la condición de Math.random() < 0.5que se genera truesi un valor flotante aleatorio entre 0 y 1 es mayor que 0,5. La instrucción la utiliza para elegir aleatoriamente entre generar You got Heads!o enviar You got Tails!a la consola. Las instrucciones else y else-if también se pueden encadenar después de la llave de la instrucción que la precede tantas veces como sea necesario, como se muestra a continuación:

var x = Math . random (); if ( x < 1 / 3 ) { console . log ( "¡Una persona ganó!" ); } else if ( x < 2 / 3 ) { console . log ( "¡Dos personas ganaron!" ); } else { console . log ( "¡Es un empate entre tres!" ); }                  

Cálculo lambda

En el cálculo lambda , el concepto de una condición if-then-else se puede expresar utilizando las siguientes expresiones:

verdadero = λx. λy. xfalso = λx. λy. ysiEntoncesDemás = (λc. λx. λy. (cxy))
  1. true toma hasta dos argumentos y una vez que se proporcionan ambos (ver currying ), devuelve el primer argumento dado.
  2. false toma hasta dos argumentos y una vez que se proporcionan ambos (ver currying ), devuelve el segundo argumento proporcionado.
  3. ifThenElse acepta 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, dados dos argumentos, produce un resultado). Esperamos que ifThenElse solo acepte verdadero o falso como argumento, los cuales proyectan los dos argumentos dados a su único argumento preferido, que luego se devuelve.

nota : si a ifThenElse se le pasan dos funciones como condicionales izquierdo y derecho, es necesario pasar también una tupla vacía () al resultado de ifThenElse para poder llamar realmente a la función elegida; de lo contrario, ifThenElse simplemente devolverá el objeto de función sin ser llamado.

En un sistema donde se pueden usar números sin definición (como Lisp, matemáticas tradicionales en papel, etc.), lo anterior se puede expresar como un único cierre a continuación:

 (( λverdadero. λfalso. λsiEntoncesDemás. ( siEntoncesDemás verdadero 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 ámbito al final de su bloque.

Una analogía funcional de JavaScript (usando solo funciones de una sola variable para mayor rigor) es la siguiente:

 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 donde se asumen números.

El primer ejemplo muestra cómo se toma la primera rama, mientras que el segundo ejemplo muestra cómo se toma la segunda rama.

 (( λverdadero. λfalso. λsiEntoncesDemás. ( siEntoncesDemás verdadero ( λPrimeraRama. PrimeraRama ) ( λSegundaRama. SegundaRama )) )( λx. λy. x )( λx. λy. y )( λc. λl. λr. c l r ))                   (( λverdadero. λfalso. λsiEntoncesDemás. ( siEntoncesDemás falso ( λPrimeraRama. PrimeraRama ) ( λSegundaRama. SegundaRama )) )( λx. λy. x )( λx. λy. y )( λc. λl. λr. c l r ))                  

Smalltalk utiliza una idea similar para sus representaciones verdaderas y falsas, donde Verdadero y Falso son objetos singleton que responden a los mensajes ifTrue/ifFalse de manera diferente.

Haskell solía usar este modelo exacto para su tipo booleano, pero al momento de escribir esto, la mayoría de los programas Haskell usan la construcción sintáctica "si a entonces b sino c" que, a diferencia de ifThenElse, no se compone a menos que esté envuelta en otra función o se vuelva a implementar como se muestra en la sección Haskell de esta página.

Sentencias de caso y de cambio

Las sentencias switch (en algunos lenguajes, sentencias case o ramas multidireccionales) comparan un valor dado con constantes especificadas y toman acción de acuerdo con la primera constante que coincida. Generalmente hay una disposición para que se tome una acción predeterminada ('else', 'otherwise') si no se logra ninguna coincidencia. Las sentencias switch pueden permitir optimizaciones del compilador , como tablas de búsqueda . En lenguajes dinámicos, los casos pueden no limitarse a expresiones constantes y pueden extenderse a la coincidencia de patrones , como en el ejemplo de script de shell a la derecha, donde '*)' implementa el caso predeterminado como una expresión regular que coincide con cualquier cadena.

Pascual :C :Script de shell :
caso someChar de 'a' : acciónEnA ; 'x' : acciónEnX ; 'y' , 'z' : acciónEnYyZ ; de lo contrario acciónEnNoMatch ; fin ;         
switch ( someChar ) { caso 'a' : acciónEnA ; romper ; caso 'x' : acciónEnX ; romper ; caso 'y' : caso 'z' : acciónEnYyZ ; romper ; predeterminado : acciónEnNoMatch ; }                  
caso $someChar en a ) acciónEnA ; ;; x ) acciónEnX ; ;; [ yz ]) acciónEnYandZ ; ;; * ) acciónEnNoMatch ;; esac               

Coincidencia de patrones

La comparación de patrones puede considerarse una alternativa a las instrucciones if-then-else y case . Está disponible en muchos lenguajes de programación con funciones de programación funcional, como Wolfram Language , ML y muchos otros. A continuación, se muestra un ejemplo simple escrito en el lenguaje OCaml :

combina  la fruta  con |  "manzana"  ->  cocinar  pastel |  "coco"  ->  cocinar  dango_mochi |  "banana"  ->  mezclar ;;

El poder de la comparación de patrones es la capacidad de hacer coincidir de forma concisa no solo acciones sino también valores con patrones de datos. A continuación se muestra un ejemplo escrito en Haskell que ilustra ambas características:

mapa _ [] = [] mapa f ( h : t ) = f h : mapa f t               

Este código define una función map , 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 en el que la lista está vacía (solo devuelve una lista vacía) y el otro caso en el que la lista no está vacía.

En sentido estricto, la comparación de patrones no siempre es una construcción de elección, porque en Haskell es posible escribir solo una alternativa, que siempre se garantiza que coincidirá; en esta situación, no se utiliza como una construcción de elección, sino simplemente como una forma de vincular nombres a valores. Sin embargo, se utiliza con frecuencia como una construcción de elección en los lenguajes 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 o Objective-C , es idiomático utilizarlas para implementar la asignación condicional. [13]

mascota  =  input ( "Ingresa el tipo de mascota que quieres nombrar: " ) mascotas_conocidas  =  {  "Perro" :  "Fido" ,  "Gato" :  "Miau" ,  "Pájaro" :  "Tweety" , } mi_nombre  =  mascotas_conocidas [ mascota ]

En los 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 utilizando un hash como tabla de despacho .

Predicación

Una alternativa a las instrucciones de bifurcación condicional es la predicación . La predicació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 hace referencia a la especificación de lenguaje más reciente de cada lenguaje. En el caso de los lenguajes que no tienen una especificación, se hace referencia a la última implementación publicada oficialmente.

Lenguaje de programaciónEstructurado sicambiar –seleccionar–casoAritmética siCoincidencia de patrones [A]
entoncesdemásDe lo contrario, si
AdaNoNo
APLNoNoNo
Concha bashNo
C , C++NoInnecesario [B] [C]CaídaNoNo
DO#NoInnecesario [B] [C]NoNo
COBOLInnecesarioInnecesario [C]NoNo
Torre EiffelNoNo
F#Innecesario [D]No
Fortran 90[G]No
IrNoInnecesario [C]NoNo
HaskellNecesarioInnecesario [C]Sí, pero no es necesario [D]No
JavaNoInnecesario [C]Caída [14]NoNo
ECMAScript ( JavaScript )NoInnecesario [C]Caída [15]NoNo
MatemáticaNoNo
OberónNoNo
PerlNoNoNo
PHPNoCaídaNoNo
Pascal , Objeto Pascal ( Delphi )InnecesarioNoNo
PitónNoNoNo
QuickBASICNoNo
RubíNo[H]
ÓxidoNoInnecesarioNo
EscalaNoInnecesario [C]Caída [ cita requerida ]No
SQL[F][F]NoNo
RápidoNoNo
TclNoNo
Visual Basic , clásicoNoNo
Visual Basic .NETNoNo
Windows PowerShellNoCaídaNoNo
  1. ^ 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 cadenas, como el soporte de expresiones regulares .
  2. 1 2 Se utiliza una directiva #ELIF en el sublenguaje del preprocesador que se utiliza para modificar el código antes de la compilación y para incluir otros archivos.
  3. 1 2 3 4 5 6 El uso frecuente de la familia de lenguajes C, COBOL y Haskell, no es una característica del lenguaje sino un conjunto de instrucciones if then else anidadas e independientes combinadas 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. else if
  4. 1 2 En Haskell y F#, no es necesaria una construcción de elección constante separada, porque la misma tarea se puede realizar con la coincidencia de patrones.
  5. ^ En una caseconstrucción Ruby, la coincidencia de expresiones regulares es una de las alternativas de control de flujo condicional disponibles. Para ver un ejemplo, consulte esta pregunta de Stack Overflow.
  6. 1 2 SQL tiene dos construcciones similares que cumplen ambas funciones, ambas introducidas en SQL-92 . Una expresión "buscada" funciona como , mientras que una expresión "simple ": funciona como una sentencia switch. Para obtener más detalles y ejemplos, consulte Caso (SQL) .CASECASE WHEN cond1 THEN expr1 WHEN cond2 THEN expr2 [...] ELSE exprDflt ENDif ... else if ... elseCASECASE expr WHEN val1 THEN expr1 [...] ELSE exprDflt END
  7. ^ La aritmética ifestá obsoleta en Fortran 90.
  8. ^ La coincidencia de patrones se agregó en Ruby 3.0. [16] Algunas construcciones de coincidencia de patrones aún son experimentales.

Véase también

Referencias

  1. ^ Sintaxis elseif de PHP
  2. ^ Sintaxis ElseIf de Visual Basic
  3. ^ Sintaxis del shell estándar POSIX
  4. ^ Lenguaje y bibliotecas Haskell 98: Informe revisado
  5. ^ "Propuesta if-then-else en HaskellWiki"
  6. ^ "Consejos eficientes para C n.° 6: no utilice el operador ternario « Stack Overflow ». Embeddedgurus.com. 18 de febrero de 2009. Consultado el 7 de septiembre de 2012 .
  7. ^ "Nuevas estructuras de control". Wiki de Tcler . Consultado el 21 de agosto de 2020 .
  8. ^ "página del manual de nivel superior" www.tcl.tk . Consultado el 21 de agosto de 2020 .
  9. ^ "si es la página del manual". www.tcl.tk . Consultado el 21 de agosto de 2020 .
  10. ^ "Expresiones if y if let" . Consultado el 1 de noviembre de 2020 .
  11. ^ "Lenguaje de programación estándar nacional estadounidense FORTRAN". 3 de abril de 1978. Archivado desde el original el 11 de octubre de 2007. Consultado el 9 de septiembre de 2007 .
  12. ^ "VisualWorks: procesamiento condicional". 16 de diciembre de 2006. Archivado desde el original el 22 de octubre de 2007. Consultado el 9 de septiembre de 2007 .
  13. ^ "Método Python para implementar sentencias switch/case". Archivado desde el original el 20 de enero de 2015. Consultado el 19 de enero de 2015 .
  14. ^ Java.sun.com, Especificación del lenguaje Java, 3.ª edición.
  15. ^ Ecma-international.org Archivado el 12 de abril de 2015 en Wayback Machine Especificación del lenguaje ECMAScript, quinta edición.
  16. ^ "Coincidencia de patrones". Documentación para Ruby 3.0 .
  • Medios relacionados con Condicional (programación informática) en Wikimedia Commons
  • Vídeo SI NO (ActionScript 3.0)
Obtenido de "https://es.wikipedia.org/w/index.php?title=Condicional_(programación_informática)&oldid=1241506078"