翻訳と辞書 |
多重ディスパッチ()またはマルチメソッド()は、多重定義された関数やメソッドからそこで呼び出されるべき1つの定義を選出し実行する(ディスパッチする)際に、2個以上の複数の引数が関与してどれかひとつを選ぶこと(特殊化)がおこなわれるものである。== 概要 ==ソースコードはサブルーチン、プロシージャ、サブプログラム、関数、メソッドなどと呼ばれる名前付きのブロックで構成される。そのようなブロックを何と呼ぶかは言語によるが、それらの性格の違いは微妙である。関数の名前は、他のソースコードからそれを呼び出すのに使われる。コードが実行されたとき、そのような関数呼び出しによって制御フローは呼び出された関数へと転送され、その関数実行後に通常呼び出した箇所の直後の命令に制御が戻ってくる。関数名は、その関数の目的や用途を表すように付けられるのが普通である。時には、いくつかの関数に同じ名前をつけるのが適切な場合もある。それは、例えば実行するタスクが概念的には同じで、単に引数のデータ型が異なるだけという場合である。このような場合、呼び出し側で名前を指定しただけでは、どのブロックを実行したらよいのか特定できない。そこで、呼び出した際の引数の個数やデータ型といった情報を使って、どの関数を呼び出すかを決めるのである。これを多重ディスパッチと呼ぶ。-->多重定義を許すプログラミング言語では、同一の名前の(すなわち、多重定義された)関数やメソッドのうちのどれを呼出す(ディスパッチする)かを決定する、ということをしなければならない。多くのオブジェクト指向プログラミング言語は単一ディスパッチである。すなわち、メソッド呼び出し(Smalltalkなら「メッセージ送信」、C++なら「メンバ関数呼び出し」)において、引数の1つが特別に扱われ、呼び出すべきメソッドの特定に使われる。構文上もその引数を特別に扱い、ドットを挟んで、そのオブジェクトを選択する式と、呼び出すべきメソッドの名前を記述する(例えばspecial.meth(other,args,here))。(これは、そのような言語ではそのメソッドをそのオブジェクトが「所有する」ような形となるため、オブジェクトによって名前空間を指定するのが自然であるため、という理由もある)多重ディスパッチを採用する言語では、全ての引数がメソッド選択という観点では平等に扱われる。第一引数、第二引数、第三引数とマッチングを行うが、どれか特定の引数がその関数やメソッドを「所有」しているわけではない。初期の多重ディスパッチを採用した例として Common Lisp Object System がある。 多重ディスパッチ()またはマルチメソッド()は、多重定義された関数やメソッドからそこで呼び出されるべき1つの定義を選出し実行する(ディスパッチする)際に、2個以上の複数の引数が関与してどれかひとつを選ぶこと(特殊化)がおこなわれるものである。 == 概要 == 多重定義を許すプログラミング言語では、同一の名前の(すなわち、多重定義された)関数やメソッドのうちのどれを呼出す(ディスパッチする)かを決定する、ということをしなければならない。 多くのオブジェクト指向プログラミング言語は単一ディスパッチである。すなわち、メソッド呼び出し(Smalltalkなら「メッセージ送信」、C++なら「メンバ関数呼び出し」)において、引数の1つが特別に扱われ、呼び出すべきメソッドの特定に使われる。構文上もその引数を特別に扱い、ドットを挟んで、そのオブジェクトを選択する式と、呼び出すべきメソッドの名前を記述する(例えばspecial.meth(other,args,here) )。(これは、そのような言語ではそのメソッドをそのオブジェクトが「所有する」ような形となるため、オブジェクトによって名前空間を指定するのが自然であるため、という理由もある) 多重ディスパッチを採用する言語では、全ての引数がメソッド選択という観点では平等に扱われる。第一引数、第二引数、第三引数とマッチングを行うが、どれか特定の引数がその関数やメソッドを「所有」しているわけではない。 初期の多重ディスパッチを採用した例として Common Lisp Object System がある。 多重定義を許すプログラミング言語では、同一の名前の(すなわち、多重定義された)関数やメソッドのうちのどれを呼出す(ディスパッチする)かを決定する、ということをしなければならない。多くのオブジェクト指向プログラミング言語は単一ディスパッチである。すなわち、メソッド呼び出し(Smalltalkなら「メッセージ送信」、C++なら「メンバ関数呼び出し」)において、引数の1つが特別に扱われ、呼び出すべきメソッドの特定に使われる。構文上もその引数を特別に扱い、ドットを挟んで、そのオブジェクトを選択する式と、呼び出すべきメソッドの名前を記述する(例えばspecial.meth(other,args,here))。(これは、そのような言語ではそのメソッドをそのオブジェクトが「所有する」ような形となるため、オブジェクトによって名前空間を指定するのが自然であるため、という理由もある)多重ディスパッチを採用する言語では、全ての引数がメソッド選択という観点では平等に扱われる。第一引数、第二引数、第三引数とマッチングを行うが、どれか特定の引数がその関数やメソッドを「所有」しているわけではない。初期の多重ディスパッチを採用した例として Common Lisp Object System がある。">ウィキペディア(Wikipedia)』 ■ウィキペディアで「多重ディスパッチ()またはマルチメソッド()は、多重定義された関数やメソッドからそこで呼び出されるべき1つの定義を選出し実行する(ディスパッチする)際に、2個以上の複数の引数が関与してどれかひとつを選ぶこと(特殊化)がおこなわれるものである。== 概要 ==ソースコードはサブルーチン、プロシージャ、サブプログラム、関数、メソッドなどと呼ばれる名前付きのブロックで構成される。そのようなブロックを何と呼ぶかは言語によるが、それらの性格の違いは微妙である。関数の名前は、他のソースコードからそれを呼び出すのに使われる。コードが実行されたとき、そのような関数呼び出しによって制御フローは呼び出された関数へと転送され、その関数実行後に通常呼び出した箇所の直後の命令に制御が戻ってくる。関数名は、その関数の目的や用途を表すように付けられるのが普通である。時には、いくつかの関数に同じ名前をつけるのが適切な場合もある。それは、例えば実行するタスクが概念的には同じで、単に引数のデータ型が異なるだけという場合である。このような場合、呼び出し側で名前を指定しただけでは、どのブロックを実行したらよいのか特定できない。そこで、呼び出した際の引数の個数やデータ型といった情報を使って、どの関数を呼び出すかを決めるのである。これを多重ディスパッチと呼ぶ。-->多重定義を許すプログラミング言語では、同一の名前の(すなわち、多重定義された)関数やメソッドのうちのどれを呼出す(ディスパッチする)かを決定する、ということをしなければならない。多くのオブジェクト指向プログラミング言語は単一ディスパッチである。すなわち、メソッド呼び出し(Smalltalkなら「メッセージ送信」、C++なら「メンバ関数呼び出し」)において、引数の1つが特別に扱われ、呼び出すべきメソッドの特定に使われる。構文上もその引数を特別に扱い、ドットを挟んで、そのオブジェクトを選択する式と、呼び出すべきメソッドの名前を記述する(例えばspecial.meth(other,args,here))。(これは、そのような言語ではそのメソッドをそのオブジェクトが「所有する」ような形となるため、オブジェクトによって名前空間を指定するのが自然であるため、という理由もある)多重ディスパッチを採用する言語では、全ての引数がメソッド選択という観点では平等に扱われる。第一引数、第二引数、第三引数とマッチングを行うが、どれか特定の引数がその関数やメソッドを「所有」しているわけではない。初期の多重ディスパッチを採用した例として Common Lisp Object System がある。」の詳細全文を読む
スポンサード リンク
翻訳と辞書 : 翻訳のためのインターネットリソース |
Copyright(C) kotoba.ne.jp 1997-2016. All Rights Reserved.
|
|