スポーツにおけるサプリメントの製品情報 公開の枠 …スポーツにおけるサプリメントの製品情報 公開の枠組みに関するガイドライン
○○型言語と呼ばれるために備えるべき最低限の条件についての検討
description
Transcript of ○○型言語と呼ばれるために備えるべき最低限の条件についての検討
![Page 1: ○○型言語と呼ばれるために備えるべき最低限の条件についての検討](https://reader033.fdocument.pub/reader033/viewer/2022042817/559c89311a28ab46488b4892/html5/thumbnails/1.jpg)
○○型言語と呼ばれるために備えるべき最低限の条件
についての検討@tsuda_ahr
![Page 2: ○○型言語と呼ばれるために備えるべき最低限の条件についての検討](https://reader033.fdocument.pub/reader033/viewer/2022042817/559c89311a28ab46488b4892/html5/thumbnails/2.jpg)
たとえば、こんな単語がございまして。
• 構造化言語
• オブジェクト指向言語
• 関数型言語
![Page 3: ○○型言語と呼ばれるために備えるべき最低限の条件についての検討](https://reader033.fdocument.pub/reader033/viewer/2022042817/559c89311a28ab46488b4892/html5/thumbnails/3.jpg)
免責
• 最低限、なにがあれば「○○型言語」と言えるのかを検討してみまし
た。
• 私見に基づいており、根拠などはあまりありません。
• なお、 ○○型言語についての最低要件は何か、を検討してみたので
あって、 ○○指向プログラミングや○○指向設計とかとはまるで関
連がありませんので、その点も注意してください。
![Page 4: ○○型言語と呼ばれるために備えるべき最低限の条件についての検討](https://reader033.fdocument.pub/reader033/viewer/2022042817/559c89311a28ab46488b4892/html5/thumbnails/4.jpg)
1.構造化言語であるための条件
![Page 5: ○○型言語と呼ばれるために備えるべき最低限の条件についての検討](https://reader033.fdocument.pub/reader033/viewer/2022042817/559c89311a28ab46488b4892/html5/thumbnails/5.jpg)
構造化言語の条件
• IF がブロック文で書けること。
以上。
____________________________
ちなみに if のブロック文とはこんなやつ
if (条件) {
処理
} 註)FOR と WHILE は非構造化BASIC でもブロック文なので、条件から排除
![Page 6: ○○型言語と呼ばれるために備えるべき最低限の条件についての検討](https://reader033.fdocument.pub/reader033/viewer/2022042817/559c89311a28ab46488b4892/html5/thumbnails/6.jpg)
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
![Page 7: ○○型言語と呼ばれるために備えるべき最低限の条件についての検討](https://reader033.fdocument.pub/reader033/viewer/2022042817/559c89311a28ab46488b4892/html5/thumbnails/7.jpg)
構造化BASICの場合
10 A = 100
20 IF A > 0 THEN
30 A = 200
40 ELSE
50 A = 300
51 ENDIF
60 PRINT A
70 END
![Page 8: ○○型言語と呼ばれるために備えるべき最低限の条件についての検討](https://reader033.fdocument.pub/reader033/viewer/2022042817/559c89311a28ab46488b4892/html5/thumbnails/8.jpg)
ここでいう「構造化」とは何か
構造化定理(だいくすとら)に従ってプログラムが書けること。
構造化定理とは、以下の3要素でプログラムは書けるというアレ。
• 順次
• 反復
• 分岐
GOTO論争の元ネタ。
→ 分岐のために GOTO を使わなくていい = 構造化プログラミング言語
![Page 9: ○○型言語と呼ばれるために備えるべき最低限の条件についての検討](https://reader033.fdocument.pub/reader033/viewer/2022042817/559c89311a28ab46488b4892/html5/thumbnails/9.jpg)
以下はおまけ機能
① 変数のスコープ (ローカルスコープ)
② 引数 / 戻値
③ 閉じたサブルーチン(=C言語的な関数)
④ 去勢された GOTO (exit for とか)
![Page 10: ○○型言語と呼ばれるために備えるべき最低限の条件についての検討](https://reader033.fdocument.pub/reader033/viewer/2022042817/559c89311a28ab46488b4892/html5/thumbnails/10.jpg)
閉じたサブルーチン?
BASIC ではこんな記述が可能だった
10 PRINT "AAA"
20 GOSUB 50
30 PRINT "CCC"
40 END
50 PRINT "BBB“
60 RETURN
61 GOTO 30 ←RETURN の代わりにこう書いてもエラーにならない
# エラーにはなりませんが、メモリリークします。# 最近の Visual Basic とかでは不可です。
ルーチンの境界
![Page 11: ○○型言語と呼ばれるために備えるべき最低限の条件についての検討](https://reader033.fdocument.pub/reader033/viewer/2022042817/559c89311a28ab46488b4892/html5/thumbnails/11.jpg)
2.オブジェクト指向言語であるための条件
![Page 12: ○○型言語と呼ばれるために備えるべき最低限の条件についての検討](https://reader033.fdocument.pub/reader033/viewer/2022042817/559c89311a28ab46488b4892/html5/thumbnails/12.jpg)
オブジェクト指向言語の条件
• new ができること
(this が使えること)
以上。
![Page 13: ○○型言語と呼ばれるために備えるべき最低限の条件についての検討](https://reader033.fdocument.pub/reader033/viewer/2022042817/559c89311a28ab46488b4892/html5/thumbnails/13.jpg)
以下はおまけ機能
① 継承
② 多態性
③ コンストラクタ
④ メッセージパッシング
⑤ カプセル化
⑥ スコープ (private / protected 等)
⑦ 名前空間
⑧ テンプレート (ジェネリック)
⑨ 例外機構
![Page 14: ○○型言語と呼ばれるために備えるべき最低限の条件についての検討](https://reader033.fdocument.pub/reader033/viewer/2022042817/559c89311a28ab46488b4892/html5/thumbnails/14.jpg)
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)
みたいな感じで、呼び出し側が操作するゲーム盤を指定します。
![Page 15: ○○型言語と呼ばれるために備えるべき最低限の条件についての検討](https://reader033.fdocument.pub/reader033/viewer/2022042817/559c89311a28ab46488b4892/html5/thumbnails/15.jpg)
結局のところ オブジェクト指向って。
• 構造化プログラミング言語 (Cとか)
board b; // 構造体
piece_put(&b, x, y, face);
• オブジェクト指向プログラミング言語
var b = new board();
b.piece_put(x, y, face);
移動しただけ
![Page 16: ○○型言語と呼ばれるために備えるべき最低限の条件についての検討](https://reader033.fdocument.pub/reader033/viewer/2022042817/559c89311a28ab46488b4892/html5/thumbnails/16.jpg)
3.関数型言語 (函数型言語?) であるための条件
![Page 17: ○○型言語と呼ばれるために備えるべき最低限の条件についての検討](https://reader033.fdocument.pub/reader033/viewer/2022042817/559c89311a28ab46488b4892/html5/thumbnails/17.jpg)
関数型言語の条件
今回の条件は2つ
1) 関数を変数に代入できる
2) 制御構文も文ではなく式 ( 具体的には IF が値を戻す )
![Page 18: ○○型言語と呼ばれるために備えるべき最低限の条件についての検討](https://reader033.fdocument.pub/reader033/viewer/2022042817/559c89311a28ab46488b4892/html5/thumbnails/18.jpg)
変数?代入?
せんせー。(純粋)関数言語には、変数や代入がないと聞きました!
↓
やかましい! 却下!!
気になる人は「束縛」とか「破壊的代入」とか「シャドーイング」とかを調べてみてください。
![Page 19: ○○型言語と呼ばれるために備えるべき最低限の条件についての検討](https://reader033.fdocument.pub/reader033/viewer/2022042817/559c89311a28ab46488b4892/html5/thumbnails/19.jpg)
文と式
• 文(STATEMENT)
値の戻らない命令文のこと。
if / for / return など。
• 式(EXPRESSION)
値を戻す式や関数のこと。
• 条件式 a == b
• 論理式 a & b
• 算術式 a + b * c
• 関数 sin(a)
![Page 20: ○○型言語と呼ばれるために備えるべき最低限の条件についての検討](https://reader033.fdocument.pub/reader033/viewer/2022042817/559c89311a28ab46488b4892/html5/thumbnails/20.jpg)
でも関数型言語でないと、これらは不可なのか?
実はそうでもない。 _| ̄|○
1) 関数を変数に代入できる
→ Javascript / C# などでもできる。
2) 制御構文も文ではなく式
→ Ruby の If は値を戻す。
![Page 21: ○○型言語と呼ばれるために備えるべき最低限の条件についての検討](https://reader033.fdocument.pub/reader033/viewer/2022042817/559c89311a28ab46488b4892/html5/thumbnails/21.jpg)
関数が変数に代入できる
function test(){return function(x)
{return x * 2
}}
var a = test()alert( a(10) )
Javascript
戻り値に引数を渡して実行できる。
関数で戻せる。
![Page 22: ○○型言語と呼ばれるために備えるべき最低限の条件についての検討](https://reader033.fdocument.pub/reader033/viewer/2022042817/559c89311a28ab46488b4892/html5/thumbnails/22.jpg)
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;;
![Page 23: ○○型言語と呼ばれるために備えるべき最低限の条件についての検討](https://reader033.fdocument.pub/reader033/viewer/2022042817/559c89311a28ab46488b4892/html5/thumbnails/23.jpg)
関数型の式の特徴
• 閉じている。
• 式の外のデータは参照できるが、式の外のデータを操作することができない
(基本的には)
![Page 24: ○○型言語と呼ばれるために備えるべき最低限の条件についての検討](https://reader033.fdocument.pub/reader033/viewer/2022042817/559c89311a28ab46488b4892/html5/thumbnails/24.jpg)
関数型の場合、正しくはこんな感じで書きますF# (関数型言語)
結果: 200
let a = 100;;
let a = if (a >= 100) then 200
else 300
printf "%d¥n" a;;
![Page 25: ○○型言語と呼ばれるために備えるべき最低限の条件についての検討](https://reader033.fdocument.pub/reader033/viewer/2022042817/559c89311a28ab46488b4892/html5/thumbnails/25.jpg)
以下はおまけ機能
• 参照透過性
• 副作用がない
• カリー化
• メモ化
• 部分適用
• 関数合成
• 並列動作に強い
![Page 26: ○○型言語と呼ばれるために備えるべき最低限の条件についての検討](https://reader033.fdocument.pub/reader033/viewer/2022042817/559c89311a28ab46488b4892/html5/thumbnails/26.jpg)
まとめ
オブジェクト指向とか関数型とか言っても怖くないよ!ってことで。
(意味不明)
![Page 27: ○○型言語と呼ばれるために備えるべき最低限の条件についての検討](https://reader033.fdocument.pub/reader033/viewer/2022042817/559c89311a28ab46488b4892/html5/thumbnails/27.jpg)
ご清聴ありがとうございました