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 = 36Boas 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
- Sobrecarga de operadores e grupos de precedência
- Subscripts e índices personalizados revisitados
- Derivações de Hashable/Equatable/Comparable