IT・プログラミング雑学

関数とメソッドの違いとは?オブジェクト指向って何?使い分けや注意点もプログラマーがわかりやすく解説

・プログラムがわかりやすくなる
・関係するものをまとめることで分業しやすくなる
・クラスの中と外を分けるので中の変更をしても外に影響しにくい
・これらの結果、プログラムの品質が良くなる

クラスでデータと関数(メソッド)をまとめよう

実際には、どう使うのでしょう。例えば、学生の名前、生徒番号、各教科の点数というデータがあるとします。そのデータを使い、名前、生徒番号、点数を表示する関数や、全教科の合計点数を求める関数が必要な場合を考えましょう。

これらは関係するものですので、成績クラスにまとめます。まとめたクラスの中のデータや関数を呼び出すときにはどうするのでしょう?「クラス.データ(変数)」や「クラス.メソッド(関数)」の様にクラスの後にドット(.)をつけて変数名や関数名を書きます。下のものが簡単なプログラムの例です。

class Grades: # 成績クラス
   name = “” # 名前
   japanese = 0 # 国語
   mathematics = 0 # 算数
   science = 0 # 理科
   social = 0 # 社会

   def __init__(self, name, japanese, mathematics, science, social):
      self.name = name
      self.japanese = japanese
      self.mathematics = mathematics
      self.science = science
      self.social = social

   def display(self): # 成績の表示
      print(self.name, ” 国語:”, self.japanese, ” 算数:”, self.mathematics,
      ” 理科:”, self.science, ” 社会:”, self.social)

   def total_score(self): # 全教科の点数を取得
      return self.japanese + self.mathematics + self.science + self.social

# 桜木健二の成績
sakuragi = Grades(“桜木健二”, 100, 100, 100, 100)

# 成績を表示
sakuragi.display()

# 全教科の合計点を表示
print(“合計:”, sakuragi.total_score())

no-img2″>
 <figcaption class=桜木建二

命令をまとめたものが関数だが、関係のあるデータや関数をまとめてわかりやすくしたものがクラスだ。クラスの中に変数(データ)や関数(メソッド)を集めれば、それらがひとまとまりのものだと分かりやすい。また、クラスの中と外は別扱いなので、クラスの中を変更しても外に影響しないぞ。これらの特徴からクラスはプログラミングに欠かせないものになっているわけだ。

関数とメソッドの使い分けは?

image by iStockphoto

関数とメソッドがどういうものかは分かりましたが、ではどう使い分けるのでしょう。プログラミング言語の全てがオブジェクト指向だったりクラスがあるわけではありません。使える言語の中でも、これは関数でこれはメソッドという使い分けもあります。

クラスやメソッドが使える言語、使えない言語

現在主流のプログラミング言語でもオブジェクト指向のものそうでないもの、オブジェクト指向でもクラスがないものとあるものがあります。C++より前のCやBASICなどの言語では使えませんが、それ以降の言語では使えるものが多いです。

オブジェクト指向でもクラスとは違う考え方のものもあります。Googleが作ったGo言語はオブジェクト指向を取り入れ、メソッドがありますがクラスはなしJavaScriptも元々はクラスなしでしたが、2015年にクラスが追加されました。プログラミング言語によってオブジェクト指向やクラスの細かい考え方が違うので、よく確認しましょう。

関数とメソッドはどう使い分ける?

では、関数とメソッドはどう使い分けるのでしょう。ポイントはクラスに含めるべきかどうかです。クラスとは関数とデータをまとめたもの。そのまとまりの中に含むべきであればクラスのメソッドですし、含めるべきでないものは関数になります。

例えば、先ほどの成績プログラムをもとに考えてみましょう。成績クラスでは生徒一人一人の教科別の成績を持っています。ある生徒の平均点を求める関数はクラスのメソッドにすべきですね。では、各生徒の中から合計点が一番高い人の名前を表示する関数はどうでしょうか。成績クラスは個人の点数しかないので、この中にまとめるのはおかしいですよね。そのため、関数にするのがよいのです。

Pythonではモジュールとの違いに注意

メソッドは「クラス.メソッド」のように書くと説明しましたが、ドット(.)を挟んで書いたものが全てメソッドではないので注意が必要です。

例えばPythonでは別のファイルのプログラムから関数を呼び出すことができます。その別のファイルがモジュール。「モジュール.関数」と書くことで呼び出すので、ドットの左がクラスなのかモジュールなのか注意が必要です。他の言語でも同様なケースがあるので、注意してください。

no-img2″>
 <figcaption class=桜木建二

プログラミング言語にはオブジェクト指向の考え方を取り入れたものとそうでないものがある。取り入れているものでもクラスとは違う考え方のものもあるぞ。プログラミング言語によってオブジェクト指向やクラスの考え方は異なるので確認が必要だな。

メソッドか関数かはまとめるべきかそうでないかだ。分かりやすいようにまとめたものがクラスなのだから、まとめるべきかどうかで判断するのが当然だな。

命令をまとめたものが関数、関連するデータと関数をまとめたのがクラス

プログラムはコンピュータへの命令を書いたものです。そのプログラムの中であるまとまりに名前をつけて分けることで分かりやすくするものが関数。そして、変数や関数の中でも関係するものをまとめたものがクラスです。クラスにまとめた変数をデータ、関数をメソッドと呼びます。

クラスには関係のあるものだけをまとめるべき。そのため、そのクラスに関係のあるものはメソッドにしますし、関係ないものは関数にします。

1 2
Share: