es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo usar una declaración switch al pasar un argumento a una función? (Dart)

En Dart, se pueden utilizar las instrucciones de cambio (switch) en lugar de un largo if-then-else.

var command = 'OPEN';
switch (command) {
  case 'CLOSED':
    executeClosed();
    break;
  case 'OPEN':
    executeOpen();
    break;
  default:
    executeUnknown();
}

Pero a veces solo queremos proporcionar un valor basado en una condición. Por ejemplo, dentro de una llamada a una función, instanciación de una clase o establecimiento del valor de una variable, etc.

Por ejemplo:

// No funciona, pero desearía que sí
MakeNametag(
  adjustFontSize: switch(status) {
    case 'young': return 'large';
    case 'old': return 'largest';
    default: return 'normal';
  } // fin switch
);

Si solo tienes dos opciones, se puede utilizar el operador condicional (a veces llamado operador ternario).

// Funciona
MakeNametag(
  adjustFontSize: ['old','young'].contains(status) ? 'larger' : 'normal');

(Javascript tiene el mismo operador y problema)

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Dart – Sentencias Switch vs Operadores Ternarios

    En Dart, las sentencias switch se pueden utilizar para simplificar la comprobación condicional en lugar de utilizar largas declaraciones if-then-else. Sin embargo, a veces solo queremos proporcionar un valor basado en una condición, como dentro de una llamada de función, la instanciación de una clase o establecer el valor de una variable.

    Un ejemplo de esto es:

    // No funciona, pero ojalá lo hiciera
    MakeNametag(
       adjustFontSize: switch(status) {
         case 'young' : return 'large';
         case 'old' : return 'largest';
         default: return 'normal';
        } //end switch
      }
    );
    

    Si solo hay dos opciones, se puede utilizar un operador condicional, también conocido como operador ternario.

    // Funciona
    MakeNametag(
      adjustFontSize: ['old','young'].contains(status) ? 'larger' : 'normal');
    

    Ten en cuenta que JavaScript tiene el mismo operador y problema.

Comments are closed.