トップ 差分 一覧 ソース 検索 ヘルプ RSS ログイン

プログラミング言語にありがちな用語

このエントリーをはてなブックマークに追加

[プログラミング]

プログラミング言語の設計において頻出の単語について理解を深めます

ダック・タイピング

肝要な部分は以下である

 オブジェクト(変数の値)に何ができるかはオブジェクトそのものが決定する。
 つまり、オブジェクトがあるインタフェースのすべてのメソッドを持っているならば、
 たとえそのクラスがそのインタフェースを宣言的に実装していなくとも、
 オブジェクトはそのインタフェースを実行時に実装しているとみなせる、ということである。

例に挙がっているコードはその現象をしっかり示している

 # 宣言・定義・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)などとも言う。
お名前: コメント: