Introdução
A instrução switch é uma ferramenta poderosa e conveniente para controlar o fluxo do seu programa. Ele permite que você crie múltiplas ramificações de código de forma rápida e fácil, dependendo do valor de uma determinada variável ou expressão. É comumente usado quando você precisa executar lógicas diferentes dependendo do valor de uma determinada variável, que pode ter mais de 2 (mas um número finito) de valores.
Neste artigo, exploraremos como usar a instrução switch em Python e discutiremos suas vantagens sobre outras estruturas de controle. Quer você seja novo em Python ou um desenvolvedor experiente, a instrução switch pode ajudá-lo a escrever um código mais limpo e eficiente.
Antes da v3.10
Antes que a instrução switch do Python estivesse disponível nativamente na linguagem, os programadores tinham que usar outras estruturas de controle para obter a mesma funcionalidade. Uma abordagem comum era usar uma série de instruções if-else, com cada ramo do código associado a um valor diferente da variável que estava sendo testada.
Por exemplo, considere o seguinte código:
value = "foo"
if value == "foo":
print("foo was selected")
elif value == "bar":
print("bar was selected")
else:
print("Nothing valid was selected")
Neste código, estamos usando uma instrução if-else para determinar qual ramo do código executar com base no valor da variável value
. Se value
for igual a “foo”, a primeira ramificação do código será executada. Se value
for igual a “bar”, a segunda ramificação do código será executada. Caso contrário, o código no else
bloco será executado.
Embora essa abordagem funcione, ela pode rapidamente se tornar complicada à medida que o número de valores possíveis para a variável aumenta. Além disso, pode dificultar a leitura e compreensão do código.
Outra abordagem que pode ser usada para criar uma instrução semelhante a switch em Python é usar um dicionário. Nesta abordagem, as chaves do dicionário são os valores possíveis da variável que está sendo testada e os valores são os ramos correspondentes do código.
Por exemplo, considere o seguinte código:
value = "foo"
switch = {
"foo": lambda: print("foo was selected"),
"bar": lambda: print("bar was selected"),
"default": lambda: print("Nothing valid was selected"),
}
switch.get(value, "default")()
Neste código, definimos um dicionário chamado switch
, com chaves representando os possíveis valores da variável value
. Para cada chave, atribuímos uma função lambda como valor, que contém o ramo de código correspondente. Para executar o ramo apropriado do código, usamos o get()
método do dicionário, que nos permite especificar um valor padrão a ser usado se a chave fornecida não existir no dicionário.
Embora esta abordagem seja mais flexível e compacta do que usar instruções if-else, ainda pode ser difícil de ler e compreender, especialmente se o código em cada ramificação for complexo. Além disso, requer o uso de funções lambda, o que pode ser confuso para alguns programadores. Não sugerimos usar esse método, a menos que por algum motivo você não possa usar os outros métodos deste artigo.
Com a introdução da instrução switch do Python no Python v3.10, os programadores agora têm uma maneira mais conveniente e intuitiva de controlar o fluxo de seus programas com base no valor de uma determinada variável ou expressão. Na próxima seção, exploraremos como usar uma instrução switch real em Python.
A match
/case
Declaração (após v3.10)
Após o Python v3.10, a instrução switch é tratada usando o match
palavra-chave. Esta palavra-chave é usada para criar uma expressão de correspondência de padrões, que permite testar o valor de uma determinada variável ou expressão em relação a uma série de padrões. Se uma correspondência for encontrada, o ramo de código correspondente será executado.
Por exemplo, considere o seguinte código:
value = "foo"
match value:
case "foo":
print("foo was selected")
case "bar":
print("bar was selected")
case _:
print("Nothing valid was selected")
Confira nosso guia prático e prático para aprender Git, com práticas recomendadas, padrões aceitos pelo setor e folha de dicas incluída. Pare de pesquisar comandos Git no Google e realmente aprender -lo!
Neste código, estamos usando o match
palavra-chave para criar uma expressão de correspondência de padrões, que testa o valor da variável value
contra uma série de padrões. Se value
for igual a “foo”, a primeira ramificação do código será executada. Se value
for igual a “bar”, a segunda ramificação do código será executada. Caso contrário, o código do bloco else será executado.
Cair em
Uma das principais diferenças entre as instruções switch em Python e as instruções switch tradicionais em outras linguagens é que o Python match
declaração não suporta falhas. Em outras palavras, uma vez encontrada uma correspondência e o ramo de código correspondente executado, o match
expressão termina e nenhum outro código no match
instrução é executada. Em outras línguas, isso geralmente é conseguido usando o break
palavra-chave, que não é necessária ou suportada aqui.
Se você deseja obter o mesmo comportamento do fall-through em uma instrução switch tradicional, você pode usar o comando |
operador para combinar vários casos. Este operador permite especificar vários padrões em um único case
, e qualquer um dos padrões pode ser correspondido para acionar a execução dessa ramificação.
Por exemplo, considere o seguinte código:
value = "y"
match value:
case "yes" | "y":
print("The user confirmed")
case _:
print("The user denied")
Aqui, se o valor de value
é igual a “sim” or “y”, a primeira ramificação do código será executada. Isso é equivalente ao comportamento de falha em uma instrução switch tradicional.
Padrões
Como você provavelmente notou nos exemplos acima, o caso “padrão” é tratado usando um sublinhado (_
). Este é considerado o “curinga” e corresponde a todos os valores. Se um dos casos anteriores corresponder ao valor, a ramificação do código padrão será ignorada e não executada.
Conclusão
Como você pode ver, a instrução match (também conhecida como “switch”) do Python oferece uma maneira poderosa e conveniente de controlar o fluxo do seu programa. Quer você seja novo em Python ou um desenvolvedor experiente, a instrução switch pode ajudá-lo a escrever um código mais limpo e eficiente.