Upgrade to Pro — share decks privately, control downloads, hide ads and more …

○○型言語と呼ばれるために備えるべき最低限の条件についての検討

 ○○型言語と呼ばれるために備えるべき最低限の条件についての検討

○○型言語と呼ばれるために備えるべき最低限の条件はなんだろう?というのを検討してみました。

tsuda.a

May 03, 2014
Tweet

More Decks by tsuda.a

Other Decks in Programming

Transcript

  1. 構造化言語の条件 • IF がブロック文で書けること。 以上。 ____________________________ ちなみに if のブロック文とはこんなやつ if

    (条件) { 処理 } 註) FOR と WHILE は非構造化BASIC でも ブロック文なので、条件から排除
  2. BASIC(構造化対応以前)の場合 10 A = 100 20 IF A > 0

    THEN GOTO 30 ELSE GOTO 50 30 A = 200 40 GOTO 60 50 A = 300 60 PRINT A 70 END
  3. 構造化BASICの場合 10 A = 100 20 IF A > 0

    THEN 30 A = 200 40 ELSE 50 A = 300 51 ENDIF 60 PRINT A 70 END
  4. 閉じたサブルーチン? BASIC ではこんな記述が可能だった 10 PRINT "AAA" 20 GOSUB 50 30

    PRINT "CCC" 40 END 50 PRINT "BBB“ 60 RETURN 61 GOTO 30 ←RETURN の代わりにこう書いてもエラーにならない # エラーにはなりませんが、メモリリークします。 # 最近の Visual Basic とかでは不可です。 ルーチンの境界
  5. 以下はおまけ機能 ① 継承 ② 多態性 ③ コンストラクタ ④ メッセージパッシング ⑤

    カプセル化 ⑥ スコープ (private / protected 等) ⑦ 名前空間 ⑧ テンプレート (ジェネリック) ⑨ 例外機構
  6. Cの場合 (new がない場合) Cの場合、こう書くと ゲーム盤はプログラムで 1枚しか持てない。 enum FACE { NONE,

    DARK, LIGHT }; void main() { piece_put(3,3,DARK); piece_put(4,4,DARK); piece_put(3,4,LIGHT); piece_put(4,3,LIGHT); } int _board[8][8]; // ゲーム盤 void piece_put(int x,int y,int face) { _board[x][y] = face; // 反転処理 } main.c board.c なので、複数のゲーム盤を持たせたい場合は、 piece_put(*board, x, y, face) みたいな感じで、呼び出し側が操作するゲーム盤を指定します。
  7. 結局のところ オブジェクト指向って。 • 構造化プログラミング言語 (Cとか) board b; // 構造体 piece_put(&b,

    x, y, face); • オブジェクト指向プログラミング言語 var b = new board(); b.piece_put(x, y, face); 移動しただけ
  8. 文と式 • 文(STATEMENT) 値の戻らない命令文のこと。 if / for / return など。

    • 式(EXPRESSION) 値を戻す式や関数のこと。 • 条件式 a == b • 論理式 a & b • 算術式 a + b * c • 関数 sin(a)
  9. 関数が変数に代入できる function test() { return function(x) { return x *

    2 } } var a = test() alert( a(10) ) Javascript 戻り値に引数を渡し て実行できる。 関数で戻せる。
  10. if が式 Ruby F# (関数型言語) a = 100 b =

    if (a >= 100) a = 200 else a = 300 end printf "%d¥n",a 結果: 200 結果: 100 let a = 100 let b = if (a >= 100) then let a = 200 () else let a = 300 () printf "%d¥n" a ;;