Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
○○型言語と呼ばれるために備えるべき最低限の条件についての検討
Search
tsuda.a
May 03, 2014
Programming
0
20
○○型言語と呼ばれるために備えるべき最低限の条件についての検討
○○型言語と呼ばれるために備えるべき最低限の条件はなんだろう?というのを検討してみました。
tsuda.a
May 03, 2014
Tweet
Share
More Decks by tsuda.a
See All by tsuda.a
マジカルインクリメントと指数表記
tsudaahr
0
160
バックアップしていますか?
tsudaahr
0
110
RDB以前のファイル設計の話でもしようか(ぇ
tsudaahr
0
120
NPUわからん
tsudaahr
0
170
計算量オーダーの話
tsudaahr
1
370
クラウド初学者が抱える不安について
tsudaahr
0
240
キューとは何か
tsudaahr
0
210
等幅は死んだ(ぇ
tsudaahr
0
86
いくら眺めてもエラーの理由がわからないコードについて
tsudaahr
0
170
Other Decks in Programming
See All in Programming
LT 2025-06-30: プロダクトエンジニアの役割
yamamotok
0
790
AI コーディングエージェントの時代へ:JetBrains が描く開発の未来
masaruhr
1
190
Azure AI Foundryではじめてのマルチエージェントワークフロー
seosoft
0
190
PHP 8.4の新機能「プロパティフック」から学ぶオブジェクト指向設計とリスコフの置換原則
kentaroutakeda
2
950
RailsGirls IZUMO スポンサーLT
16bitidol
0
190
ruby.wasmで多人数リアルタイム通信ゲームを作ろう
lnit
3
490
AIともっと楽するE2Eテスト
myohei
7
2.8k
PipeCDのプラグイン化で目指すところ
warashi
1
280
AIと”コードの評価関数”を共有する / Share the "code evaluation function" with AI
euglena1215
1
170
テストから始めるAgentic Coding 〜Claude Codeと共に行うTDD〜 / Agentic Coding starts with testing
rkaga
13
4.9k
スタートアップの急成長を支えるプラットフォームエンジニアリングと組織戦略
sutochin26
1
6.2k
Claude Code + Container Use と Cursor で作る ローカル並列開発環境のススメ / ccc local dev
kaelaela
10
6k
Featured
See All Featured
Optimizing for Happiness
mojombo
379
70k
For a Future-Friendly Web
brad_frost
179
9.8k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
331
22k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
181
54k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
29
9.6k
Speed Design
sergeychernyshev
32
1k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
18
980
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Java REST API Framework Comparison - PWX 2021
mraible
31
8.7k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
The Art of Programming - Codeland 2020
erikaheidi
54
13k
Large-scale JavaScript Application Architecture
addyosmani
512
110k
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 ;;
以下はおまけ機能 • 参照透過性 • 副作用がない • カリー化 • メモ化 •
部分適用 • 関数合成 • 並列動作に強い
まとめ オブジェクト指向とか関数型とか言っても怖くないよ!ってことで。 (意味不明)
ご清聴ありがとうございました