Slide 13 de 37
Casamento de padrões com is
Padrões de variante
type Shape {
Circle { radius: Int }
Rectangle { width: Int, height: Int }
}
proc main(): void {
shape := Shape.Circle(4)
if shape is Shape.Circle(r) { echo "círculo, r={r}" }
else if shape is Shape.Rectangle(w, _) { echo "retângulo, w={w}" }
}
Padrões de vetor
proc main(): void {
command := ["move", "north", "2"]
if command is ["move", dir, ...steps] { echo "{dir}, {len(steps)} a mais" }
else if command is ["stop"] { echo "parar" }
}
Padrões de string
proc main(): void {
path := "/users/42/posts/7"
if path is "/users/{id}/posts/{postId}" { echo "{id} / {postId}" }
}
`is` verifica um valor contra um padrão e produz um Bool, estreitando-o e vinculando nomes que já podem ser usados — no resto da condição depois de &&, e no corpo do ramo. Não existe instrução match; toda combinação é uma cadeia comum de if/else if. Existem quatro tipos de padrão: uma variante, um Result, um vetor combinado posicionalmente com um ...rest opcional, e um template de string cujos {buracos} vinculam o texto entre os trechos literais.