質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

5回答

19228閲覧

関数とメソッドの違い。なぜ言い方を変えるのでしょうか?

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

5クリップ

投稿2016/12/23 05:36

・オブジェクトの中に関数をしまった時、その関数をメソッドという。
このオブジェクトの中のメソッドという良い方をする。
と聞いたのですが、この認識でよいのでしょうか?

・ソース
var user = {
name: "suzuki",
height: 160,
age: 22,
printName: function(){
console.log(this.name) ;
}
};

function(){
console.log(this.name) ;
}
の部分をメソッドという。

単独で
function(){
console.log(this.name) ;
}
とある場合は関数という。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答5

0

言い方が変わったのではありません。関数の一部をそのように呼ぶとしただけです。メソッドはやはり関数であり、関数ではないメソッドは存在しません。つまり、

  • 関数で__ない__、かつ、メソッドでも__ない__もの
  • 関数である、かつ、メソッドでは__ない__もの
  • 関数である、かつ、メソッドでもあるもの

の三種類しか存在しません。質問のコードはどちらも関数です。しかし、片方はメソッドでもあり、もう片方はメソッドではありません。メソッドになれば、関数ではなくなるのではありません。別の呼び方もできるようになっただけです。例えると、「人間のうち、生物学的に雄の特徴を持つものを男性という。」と言っているような関係です。比喩的表現を除けば、男性はすべて人間です。そして同じく、人間から男性と言い方が変わったのではありません。人間の一部を男性と呼ぶに過ぎません。

では、なぜそのように別の呼び方を付けるのかというと、動作の説明等をしやすくするためです。もし、「メソッド」という言葉が無ければ、「メソッドはレシーバー.プロパティ名(引数)という形で呼び出せる」という文章が「オブジェクトのプロパティ値になっている関数はレシーバー.プロパティ名(引数)という形で呼び出せる」としなければなりません。メソッドの説明をするところ全てでそのような表現をするのは冗長です。なので、メソッドというカテゴリー(分類)を作って、一部の関数をそのように区別して呼べるようにしただけです。

例えで出した「男性」も同じです。「こちらは男性用トイレです。」というのを「こちらは生物学的に雄の特徴を持つ人間用トイレです。」とか言っていたら不便で仕方がありません。このように人は物事のカテゴリーを細分化することで、物事の説明をさらにしやすくし、分析や理解が深められるようにします。

投稿2016/12/23 20:59

編集2016/12/23 21:01
raccy

総合スコア21739

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/12/23 23:08

TCPIPの中にhttpがあるのと一緒ですね。 関数の一種にメソッドがあるのですね。 プロパティ値になっている関数つまり、引数になっている関数のことをメソッドといい、 引数になっていない関数は関数というということですかね。 理由が難しいです。
ynakano

2016/12/24 03:18

「TCPIPの中にhttpがあるのと一緒」というのは違います。 IPとTCPとhttpは各々レイヤが異なるので「TCP/IPの一部をhttpと呼ぶ」という関係は成立しません。
think49

2016/12/24 03:48

> プロパティ値になっている関数つまり、引数になっている関数のことをメソッドといい、 違います。プロパティ値を「引数」とは呼びません。
Itosse

2020/10/23 21:50

すごく分かりやすいです! jQueryを学習中に関数とメソッドで混乱してたので、すごく助かりました。 ざっくりですが、しばらくはこの理解で進めて行こうと思います!
guest

0

"メソッド"っていうと、「xxが持つ機能」といった意味合いを持つから。
と、私は理解して"メソッド"と"関数"を使い分けています。

投稿2016/12/23 06:12

編集2016/12/23 06:31
turbgraphics200

総合スコア4269

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/12/23 06:29

var user = { name: "suzuki", height: 160, age: 22, printName: function(){ console.log(this.name) ; } }; ならオブジェクトが持つ機能ということですか?
guest

0

オブジェクトのプロパティに関数オブジェクトを設定した場合に、
そのプロパティをメソッドと呼ぶ、というのが正しいと思います。

function(){
console.log(this.name) ;
}
の部分をメソッドという

というのは正確ではないと思います。
あくまでもメソッドはprintNameです。

function(){
console.log(this.name) ;
}

の部分は関数です。

例えば…弁当が売っています。
それをあなたがお昼に買いました。実体は弁当のままですが、これはあなたにとっての「お昼ごはん」です。
夜に買えば「夜ごはん」になるかもしれません。でも実体は弁当です。

そして日本語を勉強し始めたばかりの外国人が、「なぜさっきまで弁当と言っていたものが、お昼ごはんに変わるのですか」という質問をしだした。この質問はそんな状況に似ていると思います。

「プロパティに関数を設定したらメソッドと呼ぶ、そういうものなの」と、そんな感じですよ。


関数の一種にメソッドがあるのですね。

違いますよ。「弁当の一種がお昼ごはん」というわけではありません。弁当をお昼に食べるときにお昼ごはんと呼ばれるのです。

投稿2016/12/24 02:57

miu_ras

総合スコア902

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/12/24 03:27

難しいですね。 TCPIPの中にhttpがあるのと一緒ですね。 関数の一種にメソッドがあるのですね。 というわけではないということですね。 console.logのconsoleというオブジェクトに引数として、関数オブジェクトを指定した場合に、 なぜか function(){ console.log(this.name) ; } の部分すべてをメソッドと呼ぶようになるのですね。 .logの部分だけではなく上記すべてをいうのですね。 見た目上は関数と全く変わりませんが、 (this.name) に関数オブジェクトつまり、関数の入ったオブジェクトを指定した場合のみ なぜかメソッドというのですね。 理由がよくわかりませんが。
guest

0

メソッドはメンバ関数とも言いますので別に関数の一種といっても問題はないと思います。

ただし、そもそも「関数」という名前自体が古い名残を引きずりすぎていると思います。これは数学におけるもの(引数に応じて値が決まるもの)を語源としています。が、プログラミングにおいては「サブルーチン」としての側面も持ちます。引数や戻り値がないサブルーチンすら関数と呼んでいる時点でそもそも語源から離れています。もっとも、これは「変数」にもいえることですし、オブジェクト指向以前の問題なので今更感がする話ですけどね。

投稿2016/12/23 17:58

HogeAnimalLover

総合スコア4830

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/12/23 23:09

TCPIPの中にhttpがあるのと一緒ですね。 関数の一種にメソッドがあるのですね。 プロパティ値になっている関数つまり、引数になっている関数のことをメソッドといい、 引数になっていない関数は関数というということですかね。 理由が難しいです。
guest

0

ベストアンサー

オブジェクトの中に関数をしまった時、その関数をメソッドという。

Javascript の言語仕様上も、その認識で問題ないと思います。
(私の英語力では、正確に訳せているかイマイチ自信がありませんがw)

関数

http://www.ecma-international.org/ecma-262/5.1/#sec-4.3.24

member of the Object type that is an instance of the standard built-in Function constructor and that may be invoked as a subroutine

(標準の組み込み関数であるコンストラクタによって生成される?)インスタンスで、 サブルーチンとして呼びだすことができる Object型の一つ

※()部分は私の意訳

メソッド

http://www.ecma-international.org/ecma-262/5.1/#sec-4.3.27

function that is the value of a property

プロパティの値としての関数

投稿2016/12/23 15:59

KiyoshiMotoki

総合スコア4791

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/12/23 23:09

TCPIPの中にhttpがあるのと一緒ですね。 関数の一種にメソッドがあるのですね。 プロパティ値になっている関数つまり、引数になっている関数のことをメソッドといい、 引数になっていない関数は関数というということですかね。 理由が難しいです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問