普段業務でプログラミングをしていて無意識に関数とメソッドを使い分けている人も多いと思います。
動けばOKというような感じはしますが、人に説明するときに微妙に伝えたいことと言葉がミスマッチを起こしてしまうことがあります。
この記事では関数とメソッドはどう違うのかを改めて整理してみます。
みなさんもコミュニケーションをするときに注意してみてください。
(かく言う私も過去には気にせずに先輩エンジニアに多大な負荷をかけてしまっていたので誰かの役に立つと良いなと思いながら書きます)
関数とは
関数(function)はプログラムの中で処理をまとめたものです。
関数は引数を受け取り、処理を行い、戻り値を返すことができます。
何を今更感がありますが、Goでサンプルを書くとこんな感じです。
func add(a, b int) int {
return a + b
}
言うまでもないですがadd関数は引数を2つ受け取り、足し算をして戻り値として返しています。
メソッドとは
一方でメソッドとは、オブジェクト指向プログラミングにおいて、オブジェクトに対して行う処理をまとめたものです。
大体は関数みたいなものですがオブジェクトに対して処理を行うという点が異なります。
Goで書く場合はこんな感じです。
type Calculator struct {
a, b int
}
func (c Calculator) add() int {
return c.a + c.b
}
関数とは形が違いますね。
関数では足し算をする対象が引数で与えられましたが、メソッドでは足し算をする対象がレシーバとして与えられています。
メソッドでは操作する対象の値が引数だけでなくレシーバとしても与えられるという点が関数との大きな違いです。
timeパッケージで関数とメソッドの差を見てみると、関数はtime.Now()のように呼び出し、メソッドはtime.Time型のレシーバに対して呼び出すことができます。
package main
import (
"fmt"
"time"
)
func main() {
fmt.Println(time.Now()) // 関数
now := time.Now()
fmt.Println(now.Year()) // メソッド
}
まとめ
言葉の定義をしっかり抑えて人に説明するときに自信を持って伝えられるようにしましょう。
(過去の自分に届け)