Extensões (extend)
Soyuz permite adicionar novos métodos a tipos já definidos através do bloco extend. Isso é útil para estender a funcionalidade de bibliotecas ou da stdlib sem usar herança.
Sintaxe básica
Section titled “Sintaxe básica”O bloco extend recebe o nome do tipo que você deseja estender:
extend String { pub fn exclamar(self) -> String = "$(self)!"
pub fn repetir(self, n: Int) -> String { var resultado = "" for i in 0..n { resultado = "$(resultado)$(self)" } return resultado }}Agora, qualquer String no seu programa pode usar esses métodos:
val msg = "Olá"print(msg.exclamar()) // "Olá!"print("abc".repetir(3)) // "abcabcabc"Características das extensões
Section titled “Características das extensões”- Sem Herança: Extensões não criam novos tipos; elas apenas adicionam comportamento ao tipo original.
- Acesso a
self: O método estendido recebeselfcomo primeiro parâmetro. - Visibilidade: Use
pubdentro do blocoextendpara que o método seja visível fora do módulo. - Tipos Suportados: Você pode estender tipos primitivos (
Int,String, etc.),classeenum.
Exemplo: Estendendo uma classe
Section titled “Exemplo: Estendendo uma classe”class Usuario { val nome: String}
extend Usuario { pub fn saudar(self) = print("Olá, $(self.nome)")}
val u = Usuario { nome: "Vand" }u.saudar()