0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[翻訳転載] Golang Tip #5: メソッドチェーン

Posted at

はじめに

本記事は以下のツイートの翻訳転載です。

メソッドチェーンについての内容になります。

メソッドチェーン

メソッドを定義する場合、レシーバをそのまま返してください。

image

これはメソッドチェーンとして知られています。
複数のメソッドを流れるように連続して呼び出すことができる方法を実現することができ、クリーンで効率的なコードを生み出すことができます。

image

おわりに

個人の感想ですが、メソッドチェーンを設計できていると「お、できるやつだ」ってなります。

また、構造体に対してファクトリ関数を用意しておくとよりクリーンに見えるかと思います。

type Person struct {
	Name string
	Age  int
}

func NewPerson(name string, age int) Person {
	return Person{
		Name: name,
		Age:  age,
	}
}

func (p Person) String() string {
	return fmt.Sprintf("hi, i am %s and i am %d years old", p.Name, p.Age)
}

func (p Person) AddAge() Person {
	p.Age++
	return p
}

func (p Person) Rename(name string) Person {
	p.Name = name
	return p
}

func main() {
	// hi, i am Aiden 2 and i am 31 years old
	fmt.Println(
		NewPerson("Aiden", 30).
			AddAge().
			Rename("Aiden 2"),
	)
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?