[プログラミング]
プログラミング言語の設計において頻出の単語について理解を深めます
ダック・タイピング
肝要な部分は以下である
オブジェクト(変数の値)に何ができるかはオブジェクトそのものが決定する。 つまり、オブジェクトがあるインタフェースのすべてのメソッドを持っているならば、 たとえそのクラスがそのインタフェースを宣言的に実装していなくとも、 オブジェクトはそのインタフェースを実行時に実装しているとみなせる、ということである。
例に挙がっているコードはその現象をしっかり示している
# 宣言・定義・Interfaceにあたるもの def test(foo) puts foo.sound end # オブジェクト #(なんとtestという定義をincludeやextends, implementsするような記述がない! # つまり、testという定義をオブジェクトに引き込むための記述がない。) class Duck def sound 'quack' end end class Cat def sound 'myaa' end end test(Duck.new) test(Cat.new)
出力は以下である。
quack myaa
末尾再帰
肝要な部分は以下である
再帰的な関数やプロシージャにおいて、自身の再帰呼び出しが、その計算における最後のステップになっているような再帰のパターンのことである。
// Javaにおいてnの階乗を計算する関数 public int factorial(int n){ if(n == 1) return 1; else return n * factorial(n-1); }
ただし、プログラマーが末尾再帰という言葉を使う場合以下の部分を重要視しているようだ。
末尾呼出し最適化(まつびよびだしさいてきか、tail call optimization)とは、末尾呼出しのコードを、 戻り先を保存しないジャンプに変換することによって、スタックの累積を無くし、効率の向上などを図る手法である。 末尾呼出しの除去(tail call elimination)などとも言う。