@@ -865,7 +865,7 @@ Então o primeiro alvo seria `(record,)` e o segundo `((field,),)`.
865865Nos dois casos, esquecer aquela vírgula causa um bug
866866silencioso.footnote:[Agradeço ao revisor técnico Leonardo Rochael por esse exemplo.]
867867
868- Agora vamos estudar _pattern matching_ ,
868+ Agora vamos estudar casamento de padrões ,
869869que suporta maneiras ainda mais poderosas para desempacotar
870870sequências.((("", startref="Sunpack02")))((("", startref="iterun02")))
871871
@@ -874,21 +874,21 @@ sequências.((("", startref="Sunpack02")))((("", startref="iterun02")))
874874=== Pattern matching com sequências
875875
876876O((("match/case statement")))((("sequences", "pattern matching with", id="Spattern02")))((("pattern matching", "match/case statement")))
877- novo recurso mais visível de Python 3.10 é o _pattern matching_
878- ( casamento de padrões) com a instrução `match/case`, proposta na
877+ novo recurso mais visível de Python 3.10 é o
878+ casamento de padrões (_pattern matching_ ) com a instrução `match/case`, proposta na
879879https://fpy.li/pep634[PEP 634—Structural Pattern Matching: Specification (_Casamento Estrutural de Padrões: Especificação_)] (EN).
880880
881881[role="man-height2"]
882882[NOTE]
883883====
884884Carol Willing, uma das desenvolvedoras principais de Python,
885- escreveu uma excelente introdução ao _pattern matching_ na seção
886- https://fpy.li/2r["Casamento de padrão estrutural"]footnote:[NT: A tradução em português da documentação de
887- Python adotou o termo "casamento de padrões" no lugar de _pattern matching_.
885+ escreveu uma excelente introdução ao casamento de padrões na seção
886+ https://fpy.li/2r["Casamento de padrão estrutural"]footnote:[NT:
887+ Os tradutores da documentação de Python em português do Brasil
888+ adotaram o termo "casamento de padrões" no lugar de _pattern matching_.
888889O termo em inglês é usado nas comunidades brasileiras
889- de linguagens que implementam _pattern matching_ há muitos anos, como por exemplo Scala,
890- Elixir e Haskell.
891- Naturalmente mantivemos os títulos originais nos links externos.]
890+ de linguagens que implementam casamento de padrões há muitos anos,
891+ como por exemplo Scala, Elixir e Haskell.]
892892em https://fpy.li/2s["O que há de novo no Python 3.10"].
893893Você pode querer ler aquela revisão rápida.
894894Neste livro, dividi o tratamento do casamento de padrões em diferentes capítulos,
@@ -947,7 +947,7 @@ Uma melhoria fundamental do `match` sobre o `switch` é((("destructuring")))
947947a _desestruturação_—uma forma mais avançada de desempacotamento.
948948Desestruturação é uma palavra nova no vocabulário de Python,
949949mas é usada com frequência na documentação de linguagens
950- que suportam o _pattern matching_ —como Scala e Elixir.
950+ que suportam o casamento de padrões —como Scala e Elixir.
951951
952952Como um primeiro exemplo de desestruturação, o <<ex_nested_tuple_match>>
953953mostra parte do <<ex_nested_tuple>> reescrito com `match/case`.
@@ -1102,7 +1102,7 @@ https://fpy.li/2-10["A very deep iterable and type match with extraction" (_Um m
11021102
11031103O <<ex_nested_tuple_match>> não é melhor que o <<ex_nested_tuple>>.
11041104É apenas um exemplo para contrastar duas formas de fazer a mesma coisa.
1105- O próximo exemplo mostra como o _pattern matching_ contribui para a criação de código claro, conciso e eficaz.
1105+ O próximo exemplo mostra como o casamento de padrões contribui para a criação de código claro, conciso e eficaz.
11061106
11071107[[pattern_matching_seq_interp_sec]]
11081108==== Casando padrões de sequência em um interpretador
@@ -1115,7 +1115,7 @@ https://fpy.li/2-11[_lis.py_]:
11151115um interpretador de um subconjunto do dialeto Scheme da linguagem de programação Lisp,
11161116em 132 belas linhas de código Python legível.
11171117Peguei o código-fonte de Norvig (publicado sob a licença MIT) e o atualizei para Python 3.10,
1118- para exemplificar o _pattern matching_ .
1118+ para exemplificar o casamento de padrões .
11191119Nessa seção, vamos comparar uma parte fundamental do código de Norvig—que usa `if/elif` e
11201120desempacotamento—com uma nova versão usando `match/case`.
11211121
@@ -1166,7 +1166,7 @@ include::../code/02-array-seq/lispy/py3.9/lis.py[tags=EVAL_IF_MIDDLE]
11661166====
11671167
11681168Observe como cada instrução `elif` verifica o primeiro item da lista, e então desempacota a lista, ignorando o primeiro item.
1169- O uso extensivo do desempacotamento sugere que Norvig é um fã do _pattern matching_ ,
1169+ O uso extensivo do desempacotamento sugere que Norvig é um fã do casamento de padrões ,
11701170mas ele originalmente escreveu aquele código em Python 2 (apesar de agora ele funcionar com qualquer Python 3)
11711171
11721172Usando `match/case` em Python ≥ 3.10, podemos refatorar `evaluate`, como mostrado no <<ex_match_eval>>.
@@ -1194,7 +1194,7 @@ Sem o último `case`, para pegar tudo que tiver passado pelos anteriores,
11941194o bloco `match` não faz nada quando o sujeito não casa com algum `case`—e isso pode causar uma falha silenciosa.
11951195
11961196Norvig deliberadamente evitou a checagem e o tratamento de erros em _lis.py_, para manter o código fácil de entender.
1197- Com _pattern matching_ , podemos acrescentar mais verificações e ainda manter o programa legível.
1197+ Com casamento de padrões , podemos acrescentar mais verificações e ainda manter o programa legível.
11981198Por exemplo, no padrão `'define'`,
11991199o código original não se assegura que `name` é uma instância de `Symbol`—isso exigiria um bloco `if`,
12001200uma chamada a `isinstance`, e mais código.
@@ -1275,10 +1275,10 @@ o segundo elemento deve ser um `Symbol` na forma original de `define`,
12751275mas deve ser uma sequência começando com um `Symbol` na sintaxe de `define` para definição de função.
12761276
12771277Agora pense em quanto trabalho teríamos para adicionar o suporte a essa segunda sintaxe de `define`
1278- sem a ajuda do _pattern matching_ no <<ex_norvigs_eval>>.
1278+ sem a ajuda do casamento de padrões no <<ex_norvigs_eval>>.
12791279A instrução `match` faz mais que o `switch` das linguagens similares ao C.
12801280
1281- O _pattern matching_ é um exemplo de programação declarativa:
1281+ O casamento de padrões é um exemplo de programação declarativa:
12821282o código descreve "o que" você quer casar,
12831283em vez de "como" casar.
12841284A forma do código segue a forma dos dados, como ilustra a <<syntax_and_pattern_tbl>>.
@@ -1295,7 +1295,7 @@ A forma do código segue a forma dos dados, como ilustra a <<syntax_and_pattern_
12951295| `(define (name parms…) body1 body2…)` | `['define', [Symbol() as name, *parms], *body] if body`
12961296|============================================================================
12971297
1298- Espero que a refatoração do `evaluate` de Norvig com _pattern matching_
1298+ Espero que a refatoração do `evaluate` de Norvig com casamento de padrões
12991299tenha convencido você que `match/case` pode tornar seu código mais legível e mais seguro.
13001300
13011301[NOTE]
@@ -1306,7 +1306,7 @@ Se você quiser aprender mais sobre o _lys.py_ de Norvig, leia seu maravilhoso p
13061306https://fpy.li/2-12["(How to Write a (Lisp) Interpreter (in Python))" _(Como Escrever um Interpretador (Lisp) em (Python))_].
13071307====
13081308
1309- Isso conclui nossa primeira passagem por desempacotamento, desestruturação e _pattern matching_ com sequências.
1309+ Isso conclui nossa primeira passagem por desempacotamento, desestruturação e casamento de padrões com sequências.
13101310Vamos tratar de outros tipos de padrões mais adiante, em outros capítulos.
13111311
13121312Todo programador Python sabe que sequências podem ser fatiadas usando a sintaxe `s[a:b]`.
0 commit comments