$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
○○型言語と呼ばれるために備えるべき最低限の条件についての検討
Search
tsuda.a
May 03, 2014
Programming
0
21
○○型言語と呼ばれるために備えるべき最低限の条件についての検討
○○型言語と呼ばれるために備えるべき最低限の条件はなんだろう?というのを検討してみました。
tsuda.a
May 03, 2014
Tweet
Share
More Decks by tsuda.a
See All by tsuda.a
マジカルインクリメントと指数表記
tsudaahr
0
210
バックアップしていますか?
tsudaahr
0
120
RDB以前のファイル設計の話でもしようか(ぇ
tsudaahr
0
130
NPUわからん
tsudaahr
0
180
計算量オーダーの話
tsudaahr
1
400
クラウド初学者が抱える不安について
tsudaahr
0
290
キューとは何か
tsudaahr
0
240
等幅は死んだ(ぇ
tsudaahr
0
110
いくら眺めてもエラーの理由がわからないコードについて
tsudaahr
0
190
Other Decks in Programming
See All in Programming
ゆくKotlin くるRust
exoego
1
160
Spinner 軸ズレ現象を調べたらレンダリング深淵に飲まれた #レバテックMeetup
bengo4com
0
160
愛される翻訳の秘訣
kishikawakatsumi
3
340
エディターってAIで操作できるんだぜ
kis9a
0
750
Denoのセキュリティに関する仕組みの紹介 (toranoana.deno #23)
uki00a
0
150
Vibe codingでおすすめの言語と開発手法
uyuki234
0
110
AI前提で考えるiOSアプリのモダナイズ設計
yuukiw00w
0
190
令和最新版Android Studioで化石デバイス向けアプリを作る
arkw
0
440
Developing static sites with Ruby
okuramasafumi
0
320
新卒エンジニアのプルリクエスト with AI駆動
fukunaga2025
0
230
AIコーディングエージェント(Manus)
kondai24
0
210
組み合わせ爆発にのまれない - 責務分割 x テスト
halhorn
1
160
Featured
See All Featured
A designer walks into a library…
pauljervisheath
210
24k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.2k
Practical Orchestrator
shlominoach
190
11k
Build your cross-platform service in a week with App Engine
jlugia
234
18k
What's in a price? How to price your products and services
michaelherold
246
13k
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
2
65
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
115
91k
Side Projects
sachag
455
43k
How to train your dragon (web standard)
notwaldorf
97
6.4k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
48
9.8k
Unsuck your backbone
ammeep
671
58k
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
34
Transcript
◦◦型言語と呼ばれるために 備えるべき最低限の条件 についての検討 @tsuda_ahr
たとえば、こんな単語がございまして。 • 構造化言語 • オブジェクト指向言語 • 関数型言語
免責 • 最低限、なにがあれば「◦◦型言語」と言えるのかを検討してみまし た。 • 私見に基づいており、根拠などはあまりありません。 • なお、 ◦◦型言語についての最低要件は何か、を検討してみたので あって、
◦◦指向プログラミングや◦◦指向設計とかとはまるで関 連がありませんので、その点も注意してください。
1.構造化言語であるための条件
構造化言語の条件 • IF がブロック文で書けること。 以上。 ____________________________ ちなみに if のブロック文とはこんなやつ if
(条件) { 処理 } 註) FOR と WHILE は非構造化BASIC でも ブロック文なので、条件から排除
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
構造化BASICの場合 10 A = 100 20 IF A > 0
THEN 30 A = 200 40 ELSE 50 A = 300 51 ENDIF 60 PRINT A 70 END
ここでいう「構造化」とは何か 構造化定理(だいくすとら)に従ってプログラムが書けること。 構造化定理とは、以下の3要素でプログラムは書けるというアレ。 • 順次 • 反復 • 分岐 GOTO論争の元ネタ。
→ 分岐のために GOTO を使わなくていい = 構造化プログラミング言語
以下はおまけ機能 ① 変数のスコープ (ローカルスコープ) ② 引数 / 戻値 ③ 閉じたサブルーチン(=C言語的な関数)
④ 去勢された GOTO (exit for とか)
閉じたサブルーチン? BASIC ではこんな記述が可能だった 10 PRINT "AAA" 20 GOSUB 50 30
PRINT "CCC" 40 END 50 PRINT "BBB“ 60 RETURN 61 GOTO 30 ←RETURN の代わりにこう書いてもエラーにならない # エラーにはなりませんが、メモリリークします。 # 最近の Visual Basic とかでは不可です。 ルーチンの境界
2.オブジェクト指向言語であるための条件
オブジェクト指向言語の条件 • new ができること (this が使えること) 以上。
以下はおまけ機能 ① 継承 ② 多態性 ③ コンストラクタ ④ メッセージパッシング ⑤
カプセル化 ⑥ スコープ (private / protected 等) ⑦ 名前空間 ⑧ テンプレート (ジェネリック) ⑨ 例外機構
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) みたいな感じで、呼び出し側が操作するゲーム盤を指定します。
結局のところ オブジェクト指向って。 • 構造化プログラミング言語 (Cとか) board b; // 構造体 piece_put(&b,
x, y, face); • オブジェクト指向プログラミング言語 var b = new board(); b.piece_put(x, y, face); 移動しただけ
3.関数型言語 (函数型言語?) であるための条件
関数型言語の条件 今回の条件は2つ 1) 関数を変数に代入できる 2) 制御構文も文ではなく式 ( 具体的には IF が値を戻す
)
変数?代入? せんせー。(純粋)関数言語には、変数や代入がないと聞きました! ↓ やかましい! 却下!! 気になる人は「束縛」とか「破壊的代入」とか「シャドーイング」とかを調べてみてください。
文と式 • 文(STATEMENT) 値の戻らない命令文のこと。 if / for / return など。
• 式(EXPRESSION) 値を戻す式や関数のこと。 • 条件式 a == b • 論理式 a & b • 算術式 a + b * c • 関数 sin(a)
でも関数型言語でないと、これらは不可なのか? 実はそうでもない。 _| ̄|◦ 1) 関数を変数に代入できる → Javascript / C# などでもできる。
2) 制御構文も文ではなく式 → Ruby の If は値を戻す。
関数が変数に代入できる function test() { return function(x) { return x *
2 } } var a = test() alert( a(10) ) Javascript 戻り値に引数を渡し て実行できる。 関数で戻せる。
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 ;;
関数型の式の特徴 • 閉じている。 • 式の外のデータは参照できるが、式の外のデータを操作することができない (基本的には)
関数型の場合、正しくはこんな感じで書きます F# (関数型言語) 結果: 200 let a = 100;; let
a = if (a >= 100) then 200 else 300 printf "%d¥n" a ;;
以下はおまけ機能 • 参照透過性 • 副作用がない • カリー化 • メモ化 •
部分適用 • 関数合成 • 並列動作に強い
まとめ オブジェクト指向とか関数型とか言っても怖くないよ!ってことで。 (意味不明)
ご清聴ありがとうございました