Pular para o conteúdo

Binding com @

Nesta página

Binding simples (n =>) captura qualquer valor sem restrição. Faixas (1..=5) verificam sem capturar. O @ faz os dois ao mesmo tempo: verifica o subpadrão e liga o valor a um nome.

Sintaxe

name @ subpadrão => corpo

O subpadrão pode ser uma faixa, um or-pattern, um literal — qualquer padrão válido. Se o subpadrão não casar, o braço é ignorado normalmente.

@ com faixas numéricas, or-pattern e score com rótulo.

07-binding-with-at.zolo
Playground
// Feature: Binding with `@` — capture AND check a subpattern

// Syntax: `name @ subpattern => ...`

// When to use: you need the value that matched a structured pattern

// (range, literal, or-pattern) — instead of just checking it.


let n = 5
let msg = match n {
  x @ 1..=3 => "small: {x}",
  x @ 4..=6 => "medium: {x}",
  x @ 7..=9 => "large: {x}",
  x => "other: {x}",
}
print(msg)  // medium: 5


// Binding with or-pattern.

let day = "Saturday"
let label = match day {
  d @ ("Saturday" | "Sunday") => "weekend ({d})",
  d => "weekday ({d})",
}
print(label)  // weekend (Saturday)


// Binding with continuous numeric range.

let score = 92
let r = match score {
  s @ 90..=100 => "great ({s})",
  s @ 70..=89 => "good ({s})",
  s => "bad ({s})",
}
print(r)  // great (92)

// expected:

// medium: 5

// weekend (Saturday)

// great (92)

O @ é especialmente útil quando você precisa usar o valor em uma interpolação de string ou cálculo dentro do braço, sem abrir mão da checagem estruturada. Compare:

  • x if x >= 1 && x <= 5 => ... — guarda, funciona mas é mais verboso.
  • x @ 1..=5 => ...@ com faixa, mais declarativo.

Desafio

Reescreva o terceiro exemplo do arquivo usando guardas em vez de @ e compare a legibilidade. Qual você prefere para esse caso?

Buscar no Zolo

9 resultados

enespt-br