0Pricing
Swift Academy · Aula

Sobrecarga de operadores e grupos de precedência

Sobrecarregue operadores integrados para seus tipos e defina grupos de precedência para que as expressões sejam analisadas como pretendido. Mantenha os designs mínimos e previsíveis.

Sobrecarga de operadores e grupos de precedência é uma aula grátis de Swift Academy no CoddyKit. Esta é a aula 1 de 3. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Swift Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Swift Academy inclui 3 aulas no total.

Por que personalizar operadores?

O Swift permite sobrecarregar operadores para seus tipos e criar novos operadores. Use-os com moderação: prefira clareza, documente o comportamento e defina a precedência para evitar surpresas.

Sobrecarregar um operador integrado

Sobrecarregue um operador existente escrevendo uma função livre com o mesmo símbolo e o seu tipo. Mantenha uma semântica previsível (por exemplo, + adiciona valores).

struct Vector2D: CustomStringConvertible, Equatable {
    var x: Double
    var y: Double
    var description: String { "(\(x), \(y))" }
}
func + (lhs: Vector2D, rhs: Vector2D) -> Vector2D {
    Vector2D(x: lhs.x + rhs.x, y: lhs.y + rhs.y)
}
func == (lhs: Vector2D, rhs: Vector2D) -> Bool {
    lhs.x == rhs.x && lhs.y == rhs.y
}
let a = Vector2D(x: 1, y: 2)
let b = Vector2D(x: 3, y: 4)
let c = a + b
print(c)     // (4.0, 6.0)

Operador personalizado e precedência

Declare um precedencegroup e associe-o ao seu operador. A associatividade à direita faz com que 2 ** 3 ** 2 seja interpretado como 2 ** (3 ** 2).

// Define power operator ** with right-associative precedence
precedencegroup PowerPrecedence {
    higherThan: MultiplicationPrecedence
    associativity: right
}
infix operator ** : PowerPrecedence

// Simple integer exponent (education-only; no overflow checks)
func ** (base: Int, exp: Int) -> Int {
    guard exp >= 0 else { return 0 }   // keep it simple for demo
    if exp == 0 { return 1 }
    var result = 1
    for _ in 0..<exp { result *= base }
    return result
}
print(2 ** 3)          // 8
print(2 ** 3 ** 2)     // 2 ** (3 ** 2) = 2 ** 9 = 512 (right-assoc)

Operadores de prefixo e pós-fixo

É possível definir operadores de prefixo/pós-fixo. Reserve-os para contextos matemáticos claros e evite significados surpreendentes.

prefix operator √
prefix func √ (x: Double) -> Double { x.squareRoot() }

postfix operator !
postfix func ! (x: Bool) -> Bool { !x }  // purely demo; avoid confusing overrides

print(√9)     // 3.0
print(true!)  // false (demo only — don't ship this)

Precedência na prática

Defina cuidadosamente a precedência em relação aos operadores integrados (por exemplo, MultiplicationPrecedence). Teste as expressões para confirmar a legibilidade e a intenção.

// Demonstrate how precedence affects parsing
// Our PowerPrecedence is higher than Multiplication.
// So this parses as: 2 * (3 ** 2) = 18
let r1 = 2 * 3 ** 2
print(r1)

// Compare if we had lower precedence (hypothetical):
// Then it would parse as (2 * 3) ** 2 = 36

Boas práticas

Diretrizes:

  • Prefira methods para ações não padronizadas; reserve os operadores para operações matemáticas ou bit a bit conhecidas.
  • Corresponda às expectativas dos usuários (+ soma, * multiplica).
  • Documente os operadores personalizados e mantenha o conjunto pequeno.
  • Defina a precedência e a associatividade para evitar uma análise ambígua.

Declarando operadores corretamente

Verificação rápida: qual é a maneira correta de adicionar um novo operador com um grupo de precedência?

Recapitulação

Recapitulação: sobrecarregue operadores somente quando a semântica for óbvia; defina grupos de precedência e a associatividade para controlar a análise; teste as expressões para garantir clareza.

Perguntas Frequentes

A aula “Sobrecarga de operadores e grupos de precedência” é grátis?

Sim — o texto completo de “Sobrecarga de operadores e grupos de precedência” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Swift Academy, atualize para CoddyKit PRO. O curso de Swift Academy inclui 3 aulas no total.

O que vou aprender em “Sobrecarga de operadores e grupos de precedência”?

Sobrecarregue operadores integrados para seus tipos e defina grupos de precedência para que as expressões sejam analisadas como pretendido. Mantenha os designs mínimos e previsíveis. Você pratica Swift Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Swift Academy?

Nenhuma experiência prévia é necessária. Swift Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 3.

Quanto tempo leva a aula “Sobrecarga de operadores e grupos de precedência”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Swift Academy?

Sim. Cada aula de Swift Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Sobrecarga de operadores e grupos de precedência
  2. Subscripts e índices personalizados revisitados
  3. Derivações de Hashable/Equatable/Comparable
← Voltar para Swift Academy