7
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?

More than 3 years have passed since last update.

【Go】メソッド=関数でしょ?と考えてきちんと躓く

Last updated at Posted at 2020-05-26

メソッド = 関数でしょ?

なんででしょう。なんとなくこういう感覚でした。
もちろん違いますね。オブジェクト指向をきちんと勉強しましょうね(自戒)

とりあえず、一歩前進して以下の解釈になりました。

関数とは

IT用語辞典 -- 関数 【 function 】 ファンクション

関数とは、コンピュータプログラム上で定義されるサブルーチンの一種で、数学の関数のように与えられた値(引数)を元に何らかの計算や処理を行い、結果を呼び出し元に返すもののこと。

うん。こちらの意味は想像と一致してました。

メソッドとは

IT用語辞典 -- メソッド 【 method 】 メンバ関数

オブジェクト指向ではデータと手続きをオブジェクトとして一体化(カプセル化)して定義、利用する。この、オブジェクトに内包された手続き(データに対する処理内容を記述したプログラム)のことをメソッドという。言語によっては「メンバ関数」などということもあるが、ほぼ同じ機能を表す。

オブジェクトに内包された手続き(データに対する処理内容を記述したプログラム)のことをメソッドという。(ここ大事)

Goで見てみる

関数

A Tour of Go -- Functions

functions.go
package main

import "fmt"

func add(x int, y int) int {
	return x + y
}

func main() {
	fmt.Println(add(42, 13))
}

これはとっても理解できました。最初は

メソッド

A Tour of Go -- Methods

Go does not have classes. However, you can define methods on types.

クラスはありませんが、types(型)に紐づく関数(メソッド)を定義できるとのこと。

methods.go
package main

import (
	"fmt"
	"math"
)

type Vertex struct {
	X, Y float64
}

func (v Vertex) Abs() float64 {
	return math.Sqrt(v.X*v.X + v.Y*v.Y)
}

func main() {
	v := Vertex{3, 4}
	fmt.Println(v.Abs())
}

初見でコレを見たときは、関数定義時のこの点がよく理解できなかった

func (v Vertex) Abs() float64 {
     ↑↑これは?↑↑

こちらもきちんと説明がありました。

A method is a function with a special receiver argument.

The receiver appears in its own argument list between the func keyword and the method name.

これはreceiver(レシーバー)と言い、どのtypes(型)と紐づいているかを明示しているとのこと。
そのため、main内では、Vertex(types)からメソッドを呼び出すことができていますね!

関数と違い、型と紐づいて初めてメソッドと呼ばれるようになるということだったのか。
前述のメソッドの意味ときちんと一致していますね。

オブジェクトに内包された手続き(データに対する処理内容を記述したプログラム)のことをメソッドという。(ここ大事)

後書き

ようやく関数とメソッドの違いについて疑問に思うことができました。
正直なんとなく使っていた事に気づいて反省。

7
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
7
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?