Pregunta

Teniendo en cuenta los siguientes modismos:

1)

variable = value1
if condition
  variable = value2

2)

variable = value2
if not condition
  variable = value1

3)

if condition
  variable = value2
else
  variable = value1

4)

if not condition
  variable = value1
else
  variable = value2

¿Cuál prefieres y por qué?

Suponemos que la ruta de ejecución más común es que la condición es falsa.

Tiendo a aprender a usar 1), aunque no estoy exactamente seguro de por qué me gusta más.

Nota: los siguientes ejemplos pueden ser más simples & # 8212; y por lo tanto posiblemente más legibles & # 8212; pero no todos los idiomas proporcionan tal sintaxis, y no son adecuados para extender la asignación de variables para incluir más de una declaración en el futuro.

variable = condition ? value2 : value1
...
variable = value2 if condition else value1
¿Fue útil?

Solución

En teoría, prefiero el # 3, ya que evita tener que asignar un valor a la variable dos veces. En el mundo real, aunque uso cualquiera de los cuatro anteriores, sería más legible o expresaría más claramente mi intención.

Otros consejos

Prefiero el método 3 porque es más conciso y una unidad lógica. Establece el valor solo una vez, se puede mover como un bloque, y no es tan propenso a errores (lo que sucede, especialmente en el método 1 si se establece en valor1 y se verifica y se configura opcionalmente en valor2 están separados por otras declaraciones)

3) es la expresión más clara de lo que quieres que suceda. Creo que todos los demás requieren un pensamiento adicional para determinar qué valor terminará en la variable.

En la práctica, usaría el operador ternario (? :) si estuviera usando un idioma que lo admitiera. Prefiero escribir en estilo funcional o declarativo sobre el imperativo siempre que puedo.

Tiendo a usar el # 1 mucho. si la condición se lee más fácilmente que si! condición , especialmente si extraña accidentalmente el '!', al menos, en mi opinión, al menos.

La mayoría de la codificación que hago es en C #, pero todavía tiendo a alejarme del operador terniario, a menos que esté trabajando con (principalmente) variables locales. Las líneas tienden a alargarse MUY rápidamente en un operador ternario si está invocando tres capas en alguna estructura, lo que vuelve a disminuir rápidamente la legibilidad.

  

Nota: los siguientes ejemplos pueden ser más simples y, por lo tanto, posiblemente más legibles, pero no todos los idiomas proporcionan tal sintaxis

Este no es un argumento para no usarlos en idiomas que sí proporcionan tal sintaxis. Por cierto, eso incluye todos los idiomas principales actuales después de mi último recuento.

  

y no son adecuados para extender la asignación de variables para incluir más de una declaración en el futuro.

Esto es cierto. Sin embargo, a menudo es seguro que tal extensión nunca tendrá lugar porque la condición siempre dará uno de dos casos posibles.

En tales situaciones, siempre preferiré la variante de expresión sobre la variante de declaración porque reduce el desorden sintáctico y mejora la expresividad. En otras situaciones tiendo a ir con la declaración de switch mencionada anteriormente, si el idioma permite este uso. Si no es así, recurra al if genérico.

La instrucción

switch también funciona. Si es simple y tiene más de 2 o 3 opciones, eso es lo que uso.

En una situación en la que la condición podría no ocurrir. Iría con 1 o 2. De lo contrario, solo se basa en lo que quiero que haga el código. (es decir, estoy de acuerdo con cruizer)

Tiendo a usar si no ... regresar.

Pero eso es si está buscando devolver una variable. Eliminar los descalificadores de la manera primero hace que sea más legible. Realmente depende del contexto de la declaración y también del idioma. Una declaración de caso podría funcionar mejor y ser legible la mayor parte del tiempo, pero el rendimiento sufre bajo VB, por lo que una serie de declaraciones if / else tiene más sentido en ese caso específico.

Método 1 o método 3 para mí. El método 1 puede evitar una entrada / salida de alcance adicional, pero el método 3 evita una asignación adicional. Tiendo a evitar el Método 2, ya que trato de mantener la lógica de la condición lo más simple posible (en este caso, el! Es extraño, ya que podría reescribirse como el método 1 sin él) y la misma razón se aplica para el método 4.

Depende de cuál sea la condición que estoy probando.

Si se trata de una condición de indicador de error, utilizaré 1) configurar el indicador de error para detectar el error y luego, si la condición es exitosa, borre el indicador de error. De esa manera no hay posibilidad de perder una condición de error.

Para todo lo demás que usaría 3)

La lógica NO se agrega a la confusión cuando se lee el código; en mi mente, no puedo hablar por nadie más :-)

Si la variable tiene un valor predeterminado natural, iría con # 1. Si cualquiera de los valores es igual (in) apropiado para un valor predeterminado, iría con el # 2.

Depende. Me gustan los operadores ternarios, pero a veces es más claro si usa una declaración 'if'. Cuál de las cuatro alternativas que elija depende del contexto, pero tiendo a elegir la función del código que sea más clara, y eso varía de una situación a otra.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top