"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como evitar a duplicação de código ao implementar métodos idênticos em estruturas com campos compartilhados?

Como evitar a duplicação de código ao implementar métodos idênticos em estruturas com campos compartilhados?

Publicado em 19/11/2024
Navegar:900

How to Avoid Code Duplication When Implementing Identical Methods on Structs with Shared Fields?

Práticas recomendadas para utilizar uma função comum entre estruturas com campos idênticos

Em cenários onde duas estruturas possuem campos idênticos, é desejável evitar duplicação de código ao definir métodos que operam nesses campos.

Tipo personalizado como receptor de método

A abordagem recomendada é introduzir um tipo personalizado (por exemplo, Versão) que sirva como receptor do método. Como todos os tipos personalizados podem ser utilizados como receptores de métodos, esta técnica permite a criação de um único método que pode ser aplicado a múltiplas estruturas.

Composição

Uma vez personalizado type é definido, ele pode ser incorporado nas estruturas usando composição. Isso envolve incorporar o tipo personalizado nas estruturas, essencialmente criando uma estrutura aninhada.

Exemplo

Considere o seguinte snippet de código:

type Version string

func (v Version) PrintVersion() {
    fmt.Println("Version is", v)
}

type Game struct {
    Name               string
    MultiplayerSupport bool
    Genre              string
    Version
}

type ERP struct {
    Name               string
    MRPSupport         bool
    SupportedDatabases []string
    Version
}

Aqui, o tipo Version serve como receptor do método, e seu método PrintVersion pode ser acessado pelas estruturas Game e ERP devido aos seus campos Version incorporados.

Uso

O campo Versão incorporado pode ser usado e modificado como qualquer outro campo:

main() {
    g := Game{
        "Fear Effect",
        false,
        "Action-Adventure",
        "1.0.0",
    }

    g.PrintVersion() // Version is 1.0.0

    e := ERP{
        "Logo",
        true,
        []string{"ms-sql"},
        "2.0.0",
    }

    e.PrintVersion() // Version is 2.0.0
}

Ao empregar essa abordagem, a repetição de código associada a métodos duplicados é eliminada, mantendo a flexibilidade e a segurança de tipo.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3