0
0

Go:レシーバについて解説(Rubyとの違いも合わせて解説)

Posted at

はじめに

レシーバは一般的に利用される関数と違い形式がわかりづらいです。
本記事を読んでいただき、レシーバの理解に役立てていただければ幸いです。

レシーバとは

レシーバは特定の型に対するメソッドを定義する際に使用されます。
メソッドが操作する主体を指し、メソッドがどの型に属するかを定義します。

レシーバの書き方

package main

import "fmt"

// 1. 型の定義:
// type ~ structは、Rectangle構造体を定義しています。Rectangleは長方形を表します。
type Rectangle struct {
	Width, Height int
}

// 2. レシーバを持つメソッドの定義:
// Rectangle構造体に対するAreaメソッドを定義しています。これは長方形の面積を計算します。
func (r Rectangle) Area() int {
	return r.Width * r.Height
}

func main() {
    // 3. Rectangle構造体のインスタンスを作成
	rect := Rectangle{Width: 10, Height: 5}
	// 4. メソッドの呼び出し
	fmt.Println("長方形の面積:", rect.Area())
}

実行結果

$ go run main.go
長方形の面積: 50

コードの説明

  1. 型の定義:
    type Rectangle struct { Width, Height int }でRectangleという新しい型を定義しています。Rectangleは長方形を表し、Width(幅)とHeight(高さ)という2つのフィールドを持っています。

  2. レシーバを持つメソッドの定義:
    func (r Rectangle) Area() int { ... }はRectangle型のメソッドです。ここで(r Rectangle)の部分がレシーバです。Rectangle型のオブジェクトに対して呼び出すことができ、そのオブジェクトのWidthとHeightを使用して面積を計算します。

  3. Rectangle構造体のインスタンスを作成:
    main関数内でRectangle型のインスタンスrectを作成しています。rectのWidthとHeightはそれぞれ10と5に設定されています。

  4. メソッドの呼び出し:
    main関数内でRectangle型のインスタンスrectを作成し、rect.Area()を呼び出しています。これにより、Areaメソッドがrectに対して実行され、rectの幅と高さを使用して面積が計算されます。

レシーバの機能

  • レシーバr Rectangleは、AreaメソッドがRectangle型に属することを示しています。このメソッドはRectangle型のインスタンスに対してのみ呼び出すことができます。
  • メソッド内でrはそのインスタンス自体を参照し、r.Widthやr.Heightのようにしてインスタンスのフィールドにアクセスします。

Rubyの場合

Rubyでは、レシーバではなく、クラス(class)やインスタンス変数(@width,@height)を使って同じことを実現します。

class Rectangle
  attr_accessor :width, :height

  def initialize(width, height)
    @width = width
    @height = height
  end

  def area
    @width * @height
  end
end

r = Rectangle.new(10, 5)
puts "長方形の面積: #{r.area}"

GoとRubyの違い

  • Go:
    • 「構造体」というものを使って、データを保持します。そして、その構造体に関連する関数を定義します。
    • Go言語では、クラスベースの言語に見られる複雑さを回避し、よりシンプルで明示的なコード構造を提供します。
  • Ruby:
    • 「クラス」というものを使って、データと関数を一緒に定義します。クラスから作られた「オブジェクト」は、そのデータと関数を持っています。
    • Rubyのようなオブジェクト指向言語では、クラスを通じてオブジェクト指向の特徴が表現されます。
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