質問: JAVAを勉強・練習している者です。説明が下手ですいませんが、 コード ``` public static void main(String[] args) { } ``` このコードの部分を「メソッド」と呼びますが、なぜ「メソッド」と呼ぶんですか? ネットや参考書をみても 「1つの巨大なプログラムを複数の部品に分けることができる」とか 「複数の文にまとめそれを1つの処理として名前を付けたもの」とか 「メソッド(機能)」 と書いてあるんですが、「メソッド」と呼ばれるようになった理由が書いておりません。 英語辞書を見ても「方法」「方式」としか書いておりません。 「メソッド」と呼ばれるようになった理由は何でしょうか?
回答: こちら)とこちらが参考になりそうですね。初出は1960年代頃に開発が進められたSimulaという言語で産まれた概念のようです。 「開発者がそういう風に名づけた」が端的な説明かと思いますが私の私見も踏まえてもう少し踏み込んでみます。 当時、既に概念として「関数」という概念はあったと思われます。英語にするとfunctionですね。要するに「処理を依頼すると何か値を返す機能」のことです。 狭義では「メソッド」の概念は「関数」に含まれています。特に「オブジェクトのメンバ関数」のことを「メソッド」と呼んでいるようですね。 ここからが私見になりますが、「メソッド」というのは直訳すると英語辞書等で調べられたとおり「方法、方式」のことです。 プログラミングにおける「メソッド」とはオブジェクト志向の概念の登場と共に現れた考え方のようです。オブジェクト志向とは、数学的で無味乾燥なプログラミングコードよりも可読性や保守性を高めるために、現実世界に即した内容をコーディングで実現しようとして産まれた考え方です。 そこで、「あるオブジェクトにプログラマが提供する機能」のことを表す最も良い英単語としてmethodが選ばれたのではないかと思います。 例えば「人間」というクラスを考えたとして、「話す」という機能をプログラマが加えたとします。 クラスを使うときはインスタンス化して利用しますが、コンストラクタ(初期化処理)呼び出し時にその人の母国語を指定するとします。 そうするとボブは英語で「話す」、タクヤは日本語で「話す」、リュウは中国語で・・・とやっていると、その機能はまるでインスタンス化されたオブジェクトそれぞれは「話す」という方法を持っているものの、それぞれに与えられた属性によってそれぞれごとに振舞っているように見えます。 話は戻って、「話す」という機能はプログラマが定義したものです。ですが、上記のようなオブジェクトの具体的な振る舞いを想像すると、定義した「話す」という機能は「関数」などと呼ぶにはちょっとピントがずれている気がします。プログラマはオブジェクトたちに「話す」という機能を提供したわけですが、その後はオブジェクトたちが自主的にその機能を解釈して、それぞれがそれぞれごとに振舞います。 上記のようなことを想像した上で、何か「オブジェクトに与える機能」としての適当な語彙はないかということで探した結果、「method」という英単語が割り当てられたのだと予想します。 つまりプログラマはオブジェクトに対してメソッドを与えることでオブジェクトの動作を増やすことができるわけですね。上記「人間」オブジェクトであれば、「話す」メソッドとは別に「踊る」メソッドや「歩く」メソッドをプログラマが提供することで、「人間」はできることが増えていくわけです。 かなり難しいオブジェクト志向の概念まで引用しましたので、良く分からなければ申し訳ありません。 また、関数とメソッドは現状そこまで厳密に区別されていないように思います。区別しようとすると、上記説明のように「オブジェクトのメンバ関数」という説明になりそうですが、その理解のためにはオブジェクト志向の考え方を習得する必要があります。 ですのでJavaの教本としては、話をややこしくしないため、メソッドの説明をあたかも「関数」のように説明していると思われます。根本的なところが知りたい人にとっては、ちょっと疑問が残るかもしれませんね。