Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
○○型言語と呼ばれるために備えるべき最低限の条件についての検討
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
tsuda.a
May 03, 2014
Programming
28
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
140
マジカルインクリメントと指数表記
tsudaahr
0
300
バックアップしていますか?
tsudaahr
0
170
RDB以前のファイル設計の話でもしようか(ぇ
tsudaahr
0
180
NPUわからん
tsudaahr
0
230
計算量オーダーの話
tsudaahr
1
490
クラウド初学者が抱える不安について
tsudaahr
0
470
キューとは何か
tsudaahr
0
310
等幅は死んだ(ぇ
tsudaahr
0
160
Other Decks in Programming
See All in Programming
Findy - エンジニア向け会社紹介/Findy Company Deck
findyinc
6
400k
Herb in Rails 8.2: Your ERB views, now HTML-aware @ Kaigi on Rails 2026, Tokyo, Japan
marcoroth
2
280
ジョジョの世界をXRで再現する
mofurune
0
170
コードレビューのボトルネックを"する側"と"される側"の両面から解消する
yub0n
2
1.6k
見えないものを探る要求要件定義に必要な基本的思考 / invisible-requirement-thinking
minodriven
15
8.5k
Performance Optimization With LLMs
xleitix
0
150
TechTown - Creating Composable Callables in Contemporary C++
rollbear
0
130
最近”作らせてる” ローカルAIアプリの話
akit37
0
480
當我們開始不讀 Code - AI Agent 時代,Code Review 與 Clean Code 還剩下什麼?
jame2408
1
260
なぜCTOを降りてFDEを選んだのか?〜なぜプロダクト企業がFDEで顧客の現場に踏み込むのか〜
gonta
1
220
[ハンズオン]AIへの指示だけで「五目並べ」を作ってみよう
satoshi256kbyte
1
380
R8 の設定見直しでアプリサイズ削減
andpad
0
220
Featured
See All Featured
Agile that works and the tools we love
rasmusluckow
331
22k
For a Future-Friendly Web
brad_frost
184
10k
Designing for Timeless Needs
cassininazir
1
530
Ruling the World: When Life Gets Gamed
codingconduct
0
400
Ten Tips & Tricks for a 🌱 transition
stuffmc
1
270
RailsConf 2023
tenderlove
30
1.6k
The agentic SEO stack - context over prompts
schlessera
0
970
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.9k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.8k
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
480
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
460
Prompt Engineering for Job Search
mfonobong
0
520
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 ;;
以下はおまけ機能 • 参照透過性 • 副作用がない • カリー化 • メモ化 •
部分適用 • 関数合成 • 並列動作に強い
まとめ オブジェクト指向とか関数型とか言っても怖くないよ!ってことで。 (意味不明)
ご清聴ありがとうございました