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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
tsuda.a
May 03, 2014
Programming
25
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
○○型言語と呼ばれるために備えるべき最低限の条件についての検討
○○型言語と呼ばれるために備えるべき最低限の条件はなんだろう?というのを検討してみました。
tsuda.a
May 03, 2014
More Decks by tsuda.a
See All by tsuda.a
Git を GUI で使う話
tsudaahr
0
95
マジカルインクリメントと指数表記
tsudaahr
0
250
バックアップしていますか?
tsudaahr
0
150
RDB以前のファイル設計の話でもしようか(ぇ
tsudaahr
0
160
NPUわからん
tsudaahr
0
210
計算量オーダーの話
tsudaahr
1
460
クラウド初学者が抱える不安について
tsudaahr
0
330
キューとは何か
tsudaahr
0
280
等幅は死んだ(ぇ
tsudaahr
0
130
Other Decks in Programming
See All in Programming
The NotImplementedError Problem in Ruby
koic
1
600
脅威をエンジニアリングの糧にして――現場編 / Turning Threats into Engineering Fuel — Field Edition
nrslib
0
250
CSC307 Lecture 17
javiergs
PRO
0
310
Semantic Version 単位で戦略を柔軟に変えて、パッケージアップデートを自動化する
daitasu
0
140
「AIで開発し、AIを届ける」をEvalでつなぐ 〜AIネイティブに始めるプロダクト開発の実践〜 / Connecting "Develop with AI, deliver AI" with Eval
rkaga
4
2.4k
Datadog × OpenTelemetry 入門と実践のあいだ
kn_to_maxpno
1
140
net-httpのHTTP/2対応について
naruse
0
440
Inside Stream API
skrb
1
640
プラグインで拡張される Context をtype-safe にする難しさと設計判断
kazupon
2
590
[2026年度第1回ORセミナー] 計画最適化ベンチャーと競技プログラミング人材
terryu16
0
250
開発体験を左右するライブラリの API 設計 - GraphQL スキーマ構築ライブラリから考える #tskaigi
izumin5210
2
1.6k
Java × distroless で 軽量なコンテナイメージを / Java on Distroless
contour_gara
0
500
Featured
See All Featured
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
65
56k
Balancing Empowerment & Direction
lara
6
1.1k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
590
Music & Morning Musume
bryan
47
7.2k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
390
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.4k
Ruling the World: When Life Gets Gamed
codingconduct
0
250
Become a Pro
speakerdeck
PRO
31
6k
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
940
The Curious Case for Waylosing
cassininazir
1
370
Optimising Largest Contentful Paint
csswizardry
37
3.7k
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 ;;
以下はおまけ機能 • 参照透過性 • 副作用がない • カリー化 • メモ化 •
部分適用 • 関数合成 • 並列動作に強い
まとめ オブジェクト指向とか関数型とか言っても怖くないよ!ってことで。 (意味不明)
ご清聴ありがとうございました