Lição: 59: Correspondência de Padrões e Declarações Switch Avançadas em Swift
Em Swift, a correspondência de padrões permite que você combine diferentes tipos de dados e destrua valores usando a declaração switch
. Esse recurso poderoso torna seu código mais limpo, legível e muitas vezes mais eficiente. Esta aula abordará conceitos avançados de correspondência de padrões com exemplos, mostrando como você pode utilizar declarações switch
de forma eficaz.
Declaração Switch Básica
Vamos começar com uma declaração switch
básica. Essa declaração avalia um valor e executa diferentes ramos com base em seu valor.
let numero = 3
switch numero {
case 1:
print("Um")
case 2:
print("Dois")
case 3:
print("Três")
default:
print("Outro número")
}
Neste exemplo, a variável numero
é comparada com os casos, e "Três" será impresso como saída.
Correspondência de Padrões com Tuplas
Você também pode combinar com tuplas, permitindo estruturas de dados mais complexas.
let coordenadas = (x: 2, y: 3)
switch coordenadas {
case (0, 0):
print("Na origem")
case (let x, 0):
print("Sobre o eixo X em \(x)")
case (0, let y):
print("Sobre o eixo Y em \(y)")
case (let x, let y):
print("Ponto em (\(x), \(y))")
}
Neste exemplo, a declaração switch
destrói a tupla coordenadas
e combina com cada caso.
Correspondência de Padrões com Enums
Enums são uma combinação perfeita para correspondência de padrões. Você pode definir um enum e fazer um switch
facilmente sobre seus casos.
enum Direcao {
case norte, sul, leste, oeste
}
let direcao = Direcao.leste
switch direcao {
case .norte:
print("Rumo ao Norte")
case .sul:
print("Rumo ao Sul")
case .leste:
print("Rumo ao Leste")
case .oeste:
print("Rumo ao Oeste")
}
A declaração switch
lida de forma organizada com diferentes direções, permitindo um código limpo e estruturado.
Correspondência Avançada de Tuplas com Condições
Você também pode adicionar condições às suas correspondências de padrões usando cláusulas where
. Isso é especialmente útil quando você precisa de mais controle sobre quais casos considerar.
let velocidade = (velocidade: 30, direcao: "norte")
switch velocidade {
case (let velocidade, let direcao) where velocidade > 40:
print("Rápido \(direcao) movendo a \(velocidade) km/h")
case (let velocidade, let direcao):
print("Movendo \(direcao) a uma velocidade de \(velocidade) km/h")
}
Neste exemplo, combinamos com uma tupla e usamos uma condição para executar diferentes declarações de impressão com base na velocidade.
Vínculo de Valor em Casos Switch
Você pode vincular valores a constantes ou variáveis dentro dos casos do switch, permitindo que você use esses valores mais tarde em seu código.
let valorOpcional: Int? = 42
switch valorOpcional {
case .some(let valor):
print("O valor é \(valor)")
case .none:
print("O valor é nulo")
}
Neste exemplo, o valor opcional é verificado e, se não for nulo
, ligamos o valor desembrulhado a valor
.
Usando Fallthrough
Às vezes, você pode querer executar mais de um caso. Você pode usar a palavra-chave fallthrough
para continuar executando casos.
let nota = "B"
switch nota {
case "A":
print("Excelente")
fallthrough
case "B":
print("Bom trabalho")
case "C":
print("Boa postura")
default:
print("Você pode fazer melhor")
}
Neste trecho, se a nota for "B", tanto "Bom trabalho" quanto "Boa postura" serão impressas.
Conclusão
A correspondência de padrões e as declarações switch
avançadas em Swift oferecem aos desenvolvedores um poder e flexibilidade significativos no manuseio de estruturas de dados e condições complexas. Ao entender e utilizar esses recursos, você pode escrever um código mais limpo e eficiente. Explore esses conceitos mais a fundo em seus projetos e veja como eles podem aprimorar sua experiência de programação em Swift!