ternario operador ejemplo condicional php language-agnostic coding-style ternary-operator

php - ejemplo - ¿Qué estilo de codificación usa para el operador ternario?



operador ternario php (15)

Disentiré con la opinión común. Soy algo así como Imran con mi estilo de operador condicional. Si encaja limpiamente en una línea, la mantengo en una línea. Si no encaja limpiamente en una línea, la rompo, pero utilizo solo una sola pestaña (4 espacios; tengo VS configurado para insertar espacios para pestañas) para la sangría. No salto inmediatamente a - else , porque muchas veces el operador condicional tiene más sentido contextualmente. (Sin embargo, si no tiene sentido contextual, simplemente no lo uso).

Además, no anido operadores condicionales. En ese momento, me resulta muy difícil de leer, y es hora de ir al estilo más detallado if - else .

Lo mantengo en una sola línea, si es corto. Últimamente he estado usando este estilo para expresiones de operador ternarias más largas o anidadas. Un ejemplo artificial:

$value = ( $a == $b ) ? ''true value # 1'' : ( $a == $c ) ? ''true value # 2'' : ''false value'';

Personalmente, ¿qué estilo usa o encuentra más legible?

Editar: (cuando usar ternary-operator)

Normalmente evito el uso de más de 2 niveles de operador ternario profundo. Yo prefiero un operador ternario profundo de 2 niveles sobre 2 niveles si, de lo contrario, cuando hago eco de variables en scripts de plantilla PHP.


El operador ternario generalmente se debe evitar, pero esta forma puede ser bastante legible:

result = (foo == bar) ? result1 : (foo == baz) ? result2 : (foo == qux) ? result3 : (foo == quux) ? result4 : fail_result;

De esta manera, la condición y el resultado se mantienen juntos en la misma línea, y es bastante fácil analizar y entender lo que está sucediendo.


Imran, has formateado esto maravillosamente. Sin embargo, el operador ternario tiende a ser ilegible cuando anida más de dos. un bloque if-else puede darle un nivel extra de anidamiento comprensible. Más allá de eso, usa una función o programación basada en tablas.


Personalmente, solo uso el operador ternario si cabe en una línea. Si necesita abarcar, entonces es hora de que el bien viejo

if else if else


Tiendo a encerrar la condición entre paréntesis: (a == b)? 1: 0


Tiendo a no utilizar el operador ternario en absoluto, ya que si ... si no, es mucho más legible.


Yo no lo uso Siempre me olió como tratar de ahorrar espacio y escribir el código fuente con la expectativa de que la fuente pequeña == código compilado más eficiente.

No me parece nada legible, pero gran parte de eso se debe a que nunca lo uso.


los operadores ternarios son formas cortas y efectivas de escribir declaraciones simples si. No deberían estar anidados o ser difíciles de leer. Recuerde: Usted escribe el software una vez, pero se lee 100 veces. Debería ser más fácil de leer que de escribir.


Personalmente, solo lo uso para una asignación de una variable (en java), por ejemplo:

String var = (obj == null) ? "not set" : obj.toString();

y (otro ejemplo) cuando se usa una función que no permite un parámetro nulo, como:

String val; [...] int var = (val == null) ? 0 : Integer.parseInt(val);


$foo = (isset($bar)) ? $bar : ''default'';


Intento no utilizar un operador ternario para escribir condiciones anidadas. Desafía la legibilidad y no proporciona ningún valor extra sobre el uso de un condicional.

Solo si puede caber en una sola línea, y es claro lo que significa, lo uso:

$value = ($a < 0) ? ''minus'' : ''plus'';


El "ejemplo inventado" es cómo lo sangraría, excepto que sangría desde el margen izquierdo, no según dónde (o lo que sea que esté en la línea superior).

Para los detractores ternarios: la legibilidad es el punto. Si no cree que sea un código más legible, no lo use. Pero encuentro que al contrario es el caso al menos algunas veces.


un estilo que uso a veces , que estoy mencionando desde que no se ha mencionado, es así:

$result = ($x == y) ? "foo" : "bar";

..pero generalmente solo si ponerlo todo en una línea lo hace demasiado largo. Me parece que tiene el = ? : = ? : toda la alineación lo hace parecer más ordenado.


Los operadores ternarios anidados de PHP se comportan de manera diferente.

Esta sintaxis pasa todas las siguientes pruebas. Basado en http://deadlytechnology.com/web-development-tips/php-ternary-syntax/

$myvar = ($x == $y) ?(($x == $z)?''both'':''foo'') :(($x == $z)?''bar'':''none'');

.

Ver: http://au.php.net/ternary

Ejemplo # 3 "Comportamiento ternario no obvio" explica por qué lo siguiente no funciona en PHP.

$x = 1; $y = 2; $z = 3; $myvar = ($x == $y) ? "foo" : ($x == $z) ? "bar" : "none"; $myvar == ''none''; // Good $x = 1; $y = 2; $z = 1; $myvar = ($x == $y) ? "foo" : ($x == $z) ? "bar" : "none"; $myvar == ''bar''; // Good $x = 1; $y = 1; $z = 3; $myvar = ($x == $y) ? "foo" : ($x == $z) ? "bar" : "none"; $myvar == ''bar''; // Bad! $x = 1; $y = 1; $z = 1; $myvar = ($x == $y) ? "foo" : ($x == $z) ? "bar" : "none"; $myvar == ''bar''; // Bad!


El condicional ternario puede hacer que el código sea más limpio y más elegante, y lo más importante, lo ayudará a poner énfasis en las cosas correctas y evitar repetirlo. Considere usarlos, pero no haga que el código sea menos legible al hacerlo. En VB.NET:

''before refactoring If x = 0 Then '' If-Then-Else puts emphasis on flow control label = "None" Else label = Foo.getLabel(x) '' If-Then-Else forces repeat of assignment line End If ''after refactoring label = If(x = 0, "None", Foo.getLabel(x)) '' ternary If puts emphasis on assignment

Tenga en cuenta que "es menos legible" no es lo mismo que "No estoy acostumbrado a ver eso".