Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Boa prática usar a segunda declaração?

Olá.

Seguindo o exemplo abaixo que editei, retirado da aula. É uma boa prática usar parâmetro Abs(num int) também na segunda parte do método?

type MyFloat float64

func (f MyFloat) Abs(num int) float64 {
    if f < 0 {
        return float64(-f) + num
    }
    return float64(f) + num
}

func main() {
    f := MyFloat(-math.Sqrt2)
    fmt.Println(f.Abs(10))
}
2 respostas
solução!

Olá Anderson, tudo bem?

É ótimo que você esteja explorando diferentes maneiras de implementar métodos em Go! Quanto à sua dúvida, usar um parâmetro como Abs(num int) na segunda parte do método é uma questão de design e depende do que você deseja alcançar.

No exemplo que você editou, o método Abs está sendo usado para calcular um valor absoluto e adicionar um número a ele. Isso é um pouco diferente do uso típico de um método Abs, que geralmente apenas calcula o valor absoluto.

Se a intenção é sempre adicionar um número ao resultado, pode fazer sentido incluir esse parâmetro. No entanto, isso pode confundir outras pessoas que esperam que Abs funcione como em outros contextos, onde ele simplesmente retorna o valor absoluto.

Se a adição de um número é uma operação comum que você precisa realizar, uma alternativa poderia ser criar um método separado, como AbsPlus(num int), que deixa claro que a operação envolve mais do que apenas calcular o valor absoluto.

Aqui está um exemplo de como poderia ser:

type MyFloat float64

func (f MyFloat) Abs() float64 {
    if f < 0 {
        return float64(-f)
    }
    return float64(f)
}

func (f MyFloat) AbsPlus(num int) float64 {
    return f.Abs() + float64(num)
}

func main() {
    f := MyFloat(-math.Sqrt2)
    fmt.Println(f.AbsPlus(10))
}

Dessa forma, você mantém o método Abs com sua funcionalidade tradicional e cria um método adicional para a operação específica que você precisa.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.

Olá Armano, obrigado pela resposta completa.

Realmente o ABS tem um objetivo e o meu objetivo era apenas dar um exemplo de uso do parâmetro no type MyFloat float64 especificamente nessa função, mas acabei ferindo ele.

Reforçando que o meu objetivo era apenas dar um exemplo se era possível usar nesse tipo de declaração com método.

Obrigado.