Sobes.tech
Junior

Como implementar uma estrutura condicional com o operador switch na linguagem Dart?

sobes.tech IA

Resposta da IA

A bifurcação com o operador switch em Dart é feita da seguinte forma:

void main() {
  var color = 'red';

  switch (color) {
    case 'red':
      print('A cor selecionada é vermelha.');
      break; // Termina a execução do bloco switch
    case 'blue':
      print('A cor selecionada é azul.');
      break;
    case 'green':
      print('A cor selecionada é verde.');
      break;
    default: // Executa se nenhum case corresponder
      print('Cor desconhecida.');
  }
}

switch compara o valor da variável (neste caso color) com as constantes indicadas após case. Quando há correspondência, o código associado a esse case é executado. A palavra-chave break é necessária para sair do bloco switch após executar o case correspondente. Se omitido, a execução continua no próximo case (chamado "fallthrough"), o que geralmente não é desejado. default é usado para tratar os casos em que nenhum case corresponde.

É importante lembrar que, em Dart, num switch, apenas os seguintes tipos de expressões podem ser usados em case:

  • int
  • Strings (String)
  • Constantes em tempo de compilação (const) ou variáveis finais (final) de tipos primitivos
  • Enumerados (enum)

Também é possível usar correspondência por tipo com case (Type value):

void process(dynamic value) {
  switch (value) {
    case String s:
      print('O valor é uma string: $s');
      break;
    case int i when i > 0: // Uso de guard com when
      print('O valor é um inteiro positivo: $i');
      break;
    case List _: // Correspondência com o tipo List sem ligação a variável
      print('O valor é uma lista');
      break;
    default:
      print('O valor é de outro tipo');
  }
}

void main() {
  process('olá');
  process(10);
  process([1, 2, 3]);
  process(3.14);
}

No Dart 3.0, foram introduzidas novas capacidades de pattern matching que expandem as expressões switch:

var number = 1;
var text = switch (number) {
  1 => 'um',
  2 => 'dois',
  _ => 'outro' // Equivalente a default
};
print(text); // Vai imprimir: um

Aqui, switch é usado como uma expressão que devolve um valor. O operador _ funciona como um curinga, correspondendo a qualquer valor.