stringtranslate.com

Condicional (programación informática)

Diagrama de flujo si-entonces-si no
Un diagrama de flujo anidado si-entonces-si no

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 despacho dinámico no suele clasificarse como una construcción condicional, es otra forma de seleccionar entre alternativas en tiempo de ejecución . Las declaraciones condicionales son los puntos de control del programa que determinan el comportamiento según la situación.

Terminología

En los lenguajes de programación imperativos , generalmente se usa el término " declaración condicional", 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(-si no)

La if–thenconstrucció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í:

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

Por ejemplo:

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

Cuando un intérprete encuentra un If, espera una condición booleanax > 0 (por ejemplo, , que significa "la variable x contiene un número mayor que cero") y evalúa esa condición. Si la condición es , se ejecutan truelas declaraciones que siguen a . thenDe 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 elserama, después del archivo end If.

Después de ejecutar cualquiera de las ramas, el control vuelve al punto posterior al end If.

Historia y desarrollo

En los primeros lenguajes de programación, especialmente algunos dialectos de BASIC en las computadoras domésticas de la década de 1980 , una if–thendeclaración solo podía contener GOTOdeclaraciones (equivalente a una instrucción de rama ). Esto llevó a un estilo de programación difícil de leer conocido como programación espagueti , y los programas de este estilo se denominan código espagueti . Como resultado, la programación estructurada , que permite colocar declaraciones (virtualmente) arbitrarias en bloques de declaraciones dentro de una ifdeclaración, 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 los 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 GOTOdeclaraciones en if–thendeclaraciones para escribir programas que no sean 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 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 de "los demás colgando"

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

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 sino s2)

dependiendo de si elseestá asociado al primero ifo al segundo if. Esto se conoce como el problema de los demás pendientes y se resuelve de varias maneras, según el idioma (comúnmente mediante la end ifdeclaración o {...}los corchetes).

De lo contrario si

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

si condición entonces  - declaraciones elseif condición entonces  - más declaraciones elseif condición entonces  - más declaraciones;...else  -- otras declaraciones; terminara 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)elseif descuento <21% entonces imprimir (tienes que pagar $20)elseif descuento <31% entonces imprimir (tienes que pagar $10)terminara si ;

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

La elseifdeclaración, en el lenguaje Ada , por ejemplo, es simplemente azúcar sintáctico 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 utiliza la elseifpalabra clave [1] tanto para sus llaves como para su sintaxis de dos puntos. Perl proporciona la palabra clave elsifpara evitar la gran cantidad de llaves que requerirían las declaraciones múltiples ify else. Python usa la palabra clave especial elifporque la estructura se indica mediante sangría en lugar de llaves, por lo que un uso repetido de elsey ifrequeriría una mayor sangría después de cada condición. Algunas implementaciones de BASIC , como Visual Basic , [2] también lo utilizan ElseIf. De manera similar, los shells UNIX anteriores (más tarde reunidos en la sintaxis del shell POSIX [3] ) también usan elif, pero dan 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 y pronto. Esto funciona porque en estos lenguajes, cualquier declaración (en este caso ...) puede seguir a un condicional sin estar encerrada en un bloque.if cond

Esta elección de diseño tiene un ligero "coste". Cada else iframa efectivamente agrega 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 en la secuencia de condicionales prueban el valor de una sola expresión (por ejemplo, if x=0... else if x=1... else if x=2...), una alternativa es la declaración de cambio , también llamada declaración de caso o declaración de selección. Por el contrario, en lenguajes que no tienen una declaración de cambio, éstas pueden producirse mediante una secuencia de else ifdeclaraciones.

Expresiones si-entonces-si no

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

 mivariable := si x > 20 entonces 1 si no 2

dialectos ceceos

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

;; Esquema ( defina mivariable ( si ( > x 12 ) 1 2 )) ; Asigna 'mivariable' a 1 o 2, dependiendo del valor de 'x'        
;; Lisp común ( let (( x 10 )) ( setq mivariable ( if ( > x 12 ) 2 4 ))) ; Asigna 'mivariable' a 2           

Haskell

En Haskell 98, solo hay una expresión if , no una 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.

Debido a que Haskell es vago , es posible escribir estructuras de control, como if , como expresiones ordinarias; la evaluación diferida 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 tipo 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 incluir en expresiones, a diferencia de las sentencias if, en lenguajes tipo C:

mi_variable = x > 10 ? "foo" : "barra" ; // En lenguajes tipo 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 otros).

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

si ( x > 10 ) mi_variable = "foo" ; else mi_variable = "barra" ;         

Algunos argumentan que la declaración explícita si/entonces 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 = Ventana de texto . ReadNumber () Si ( x > 10 ) Entonces TextWindow . WriteLine ( "Mi variable se llama 'foo'." ) De lo contrario TextWindow . WriteLine ( "Mi variable se llama 'barra'." ) 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, aparecerá el mensaje "Mi variable se llama 'barra'". está impreso en la pantalla.

Visual Básico

En Visual Basic y algunos 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 siempre se evalúan tanto la rama verdadera como la falsa; es solo que el resultado de uno de ellos se desecha, mientras que el resultado del otro lo devuelve la función IIf.

tcl

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

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

invoca una función llamada ifpasando 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 alcance de la persona que llama. [7]

Este comportamiento es posible mediante el uso de los comandos uplevely 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]

Como ifen realidad es una función, también devuelve un valor:

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

Óxido

En Rust , ifsiempre es una expresión. Se evalúa según el valor de cualquier rama que se ejecute, o según el 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 ifque se conozca el tipo de expresión en el momento de la compilación, cada rama debe evaluarse como un valor del mismo tipo. Por esta razón, una elserama es efectivamente obligatoria a menos que las otras ramas evalúen como (), porque una ifsin an elsesiempre puede evaluarse como ()por defecto. [10]

// Asigna algún valor a mi_variable, dependiendo del valor de x let mi_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" ); }     

Aritmética si

Hasta Fortran 77 , el lenguaje Fortran tenía una declaración "aritmética si" que está a medio camino entre una declaración 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 ) etiqueta1 , etiqueta2 , etiqueta3    

Donde e es cualquier expresión numérica (no necesariamente un número entero); esto es equivalente a

IF ( e . LT . 0 ) GOTO etiqueta 1 IF ( e . EQ . 0 ) GOTO etiqueta 2 GOTO etiqueta 3           

Debido a que este IF aritmético es equivalente a múltiples GOTOdeclaraciones 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 IFlos enunciados aritméticos hacían 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 ramificación 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 'Branque si el acumulador es negativo' y luego 'Branque si el acumulador es cero' o similares. Tenga en cuenta que la expresión se evalúa solo una vez y, en casos como la aritmética de enteros donde puede ocurrir un desbordamiento, también se considerarán 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 y 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 ( "¡Tienes cara!" ); } más { consola . log ( "¡Tienes Tails!" ); }        

El ejemplo anterior toma el condicional de Math.random() < 0.5which produce truesi un valor flotante aleatorio entre 0 y 1 es mayor que 0,5. La declaración lo usa para elegir aleatoriamente entre salida You got Heads!o You got Tails!a la consola. Las declaraciones else y else-if también se pueden encadenar después de la llave de la declaración que la precede tantas veces como sea necesario, como se muestra a continuación:

varx = Matemáticas .aleatorio (); si ( x < 1/3 ) { consola .log ( "¡Una persona ganó!" ); } else if ( x < 2/3 ) { consola .log ( "¡Dos personas ganaron!" ); } más { consola . log ( "¡Es un empate a tres!" ); }                  

cálculo lambda

En el cálculo Lambda , el concepto de condicional si-entonces-si no se puede expresar mediante las siguientes expresiones:

verdadero = λx. λy. Xfalso = λx. λy. yifThenElse = (λ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 dado.
  3. ifThenElse toma hasta tres argumentos y una vez proporcionados todos, pasa el segundo y el tercer argumento al primer argumento (que es una función que, dados dos argumentos, 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 a ifThenElse se le pasan dos funciones como condicionales izquierdo y derecho; También es necesario pasar 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 los números se pueden usar sin definición (como Lisp, matemáticas tradicionales en papel, etc.), lo anterior se puede expresar como un cierre único a continuación:

 (( λtrue. λ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 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 resultadoComputación = (( _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 suponen números.

El primer ejemplo muestra la primera rama que se está tomando, mientras que el segundo ejemplo muestra la segunda rama que se está tomando.

 (( λ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 utiliza una idea similar para sus representaciones de verdadero y falso, siendo Verdadero y Falso objetos únicos 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 este artículo, la mayoría de los programas de Haskell usan la construcción sintáctica de azúcar "if a entonces b else c" que, a diferencia de ifThenElse, no compone a menos que se incluya en otra función o se vuelva a implementar. como se muestra en la sección The Haskell de esta página.

Declaraciones de caso y cambio

Las declaraciones de cambio (en algunos idiomas, declaraciones de casos o ramas multidireccionales) comparan un valor dado con constantes específicas y toman medidas de acuerdo con la primera constante que coincida. Generalmente existe una disposición para que se tome una acción predeterminada ("de lo contrario", "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 limitarse a expresiones constantes y pueden extenderse a la coincidencia de patrones , como en el ejemplo del script de shell de la derecha, donde '*)' implementa el caso predeterminado como una expresión regular que coincide con cualquier cadena.

La coincidencia de patrones

La coincidencia de patrones puede verse como una alternativa tanto a las declaraciones if-then-else como a las case . 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 :

combinar  fruta  con |  "manzana"  ->  cocinar  pastel |  "coco"  ->  cocinar  dango_mochi |  "plátano"  ->  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 ambas 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 (simplemente 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 sólo 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 de para vincular nombres a valores. Sin embargo, se utiliza con frecuencia como construcción de elección en los idiomas en los que está disponible.

Condicionales basados ​​en hash

En 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  =  entrada ( "Ingrese el tipo de mascota que desea nombrar: " ) mascotas_conocidas  =  {  "Perro" :  "Fido" ,  "Gato" :  "Meowsles" ,  "Pájaro" :  "Piolín" , } mi_nombre  =  mascotas_conocidas [ mascota ]

En lenguajes que tienen funciones anónimas o que permiten a un programador asignar una función con nombre a una referencia de variable, el flujo condicional se puede implementar utilizando un hash como tabla de distribución .

Predicación

Una alternativa a las instrucciones de rama 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 hace referencia a la especificación de idioma más reciente de cada idioma. Para los lenguajes que no tienen una especificación, se hace referencia a la última implementación publicada oficialmente.

  1. ^ Esto se refiere a la coincidencia de patrones como una construcción condicional distinta en el lenguaje de programación, a diferencia de la mera compatibilidad con la coincidencia de patrones de cadenas, como la compatibilidad con 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; e incluir otros archivos.
  3. 1 2 3 4 5 6 Lo que se encuentra a menudo en la familia de lenguajes C, y en COBOL y Haskell, no es una característica del lenguaje sino un conjunto de declaraciones if then else anidadas e independientes combinadas con un diseño de código fuente particular. Sin embargo, esto también significa que una construcción distinta else-if no es realmente necesaria en estos lenguajes. 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 construcción Ruby case, la coincidencia de expresiones regulares se encuentra entre las alternativas de control de flujo condicional disponibles. Para ver un ejemplo, consulte esta pregunta de desbordamiento de pila.
  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 declaración de cambio. Para obtener 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.

Ver también

Referencias

  1. ^ Sintaxis PHP elseif
  2. ^ Sintaxis de Visual Basic ElseIf
  3. ^ Sintaxis de shell estándar POSIX
  4. ^ Bibliotecas y lenguaje Haskell 98: informe revisado
  5. ^ "Propuesta si-entonces-si no en HaskellWiki"
  6. ^ "Consejos para C eficiente n.º 6: no utilice el operador ternario« Stack Overflow ". Embeddedgurus.com. 2009-02-18 . 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 de manual de nivel superior". www.tcl.tk.Consultado el 21 de agosto de 2020 .
  9. ^ "si la página del manual". www.tcl.tk.Consultado el 21 de agosto de 2020 .
  10. ^ "Si y si deja expresiones" . Consultado el 1 de noviembre de 2020 .
  11. ^ "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 .
  12. ^ "VisualWorks: procesamiento condicional". 2006-12-16. Archivado desde el original el 22 de octubre de 2007 . Consultado el 9 de septiembre de 2007 .
  13. ^ "Forma pitónica de implementar declaraciones de cambio/caso". 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, tercera edición.
  15. ^ Ecma-international.org Archivado el 12 de abril de 2015 en la especificación del lenguaje ECMAScript de Wayback Machine , quinta edición.
  16. ^ "Coincidencia de patrones". Documentación para Ruby 3.0 .

enlaces externos