プログラミング言語, 型に 関する アイデア

Get Started. It's Free
or sign up with your email address
Rocket clouds
プログラミング言語, 型に 関する アイデア by Mind Map: プログラミング言語, 型に 関する アイデア

1. オブジェクト指向と関数型

1.1. オブジェクト指向

1.1.1. モデル

1.1.1.1. 細胞、生物

1.1.1.1.1. 宇宙レベルまでスケール

1.2. 関数型

1.2.1. ラムダ式

1.2.1.1. 置き替えモデル

1.2.1.1.1. 置き替えをする主体がないと適用できない?

2. すべては○○

2.1. すべては関数

2.1.1. Lisp を見るとすべてを関数 (ラムダ算法) とすることは可能

2.2. すべてはオブジェクト

2.2.1. ブロックはオブジェクト

2.2.2. メソッドもオブジェクト

2.2.2.1. 「Smalltalk ではメソッドはオブジェクトではない」の?

2.2.3. 「すべては関数」よりは弱い?

3. オブジェクト指向は言語を超える

3.1. 別言語で書いたものでもオブジェクトを取得できればメソッドを呼べる

3.2. 例

3.2.1. Excel VBA から JScript 経由で XML Dom オブジェクトを呼び出せる

3.2.2. Scala や JRuby から Java ライブラリを使用する

4. JavaScript は関数的

4.1. 比較対象

4.1.1. オブジェクト指向的なもの

4.1.1.1. 部品を作って配置する

4.1.1.1.1. Delphi

4.1.1.1.2. OpenLaszlo

4.2. 例

4.2.1. 機能のないテキストボックス

4.2.1.1. 機能を追加する

4.2.1.1.1. 同じ機能を他の部品にも適用できる

4.2.1.1.2. 再利用しやすい

4.3. 部品単位ではなく機能単位で追加できる

5. 参照透明性

5.1. 同じ引数を与えると同じ結果が返ってくる

5.2. 状態を持つものは引数で渡し、関数は参照透明にするのはどうだろう?

5.3. Erlang

5.3.1. 関数型で変数を書き換えられない

5.3.2. 入出力やカウンタなどにはアクターを使う

6. 関数とメッセージパッシングは同一視できる

6.1. 入力=メッセージ受信

6.2. 出力=メッセージ送信

6.3. 入出力先を外部からアレンジできる

7. ダイナミックで 緩い システムが 利用者・開発者を 救う

7.1. 型なし

7.1.1. プログラム

7.1.2. DB

7.2. 対話実行

7.3. コンパイル不要

8. アクター

8.1. メッセージングに よる オブジェクト指向 そのもの

8.1.1. オブジェクトから自然に拡張できる

8.2. Erlang のアクター

8.2.1. 関数

9. 関数やクロージャはオブジェクトで構築できる

9.1. 関数オブジェクト (ファンクタ)

9.1.1. Smalltalk

9.1.1.1. ブロックは無名関数

9.1.1.1.1. value セレクタと共に値を与えると実行できる

9.1.2. Scala

9.1.2.1. オブジェクトに括弧を付けて呼び出すと apply メソッドが実行される

9.1.2.2. クロージャは apply メソッドを持つ

10. オブジェクト指向に よる システム 構築は 生物を モデルに すると 良い

10.1. アラン・ケイの考え方

10.1.1. Design Principles Behind Smalltalk (in Japanese)

10.1.2. 生物学からインスピレーションを得た

10.1.2.1. THE EARLY HISTORY OF SMALLTALK

10.1.3. 人間と人間のコミュニケーションを考える

10.1.3.1. 片方をシステムに置き換える

11. プログラミング言語はどれがいいか決めかねる

11.1. 考える

11.1.1. 古い IBM ミニコンでのプログラミング

11.1.1.1. IBM 1401 - Wikipedia

11.1.1.1.1. HELLO WORLD の 例を 見ること

11.2. 比べる

11.2.1. 恵まれている

11.2.1.1. どれでも OK

11.3. 速度は考えなくてよい

12. 動的言語の柔軟性を活用する

12.1. 記述量が少なくなる

12.1.1. 後でのメンテナンスが容易

12.1.2. コードの本質部分のみ記述

12.2. テストが容易

12.2.1. 例

12.2.1.1. RSpec (Ruby)

13. Lisp はハードウェアモニタ向き

13.1. Multi-Paradigm Language TAO

13.1.1. 対話的に小さな関数を作れば,必要なプローブやテストシーケンスはすぐ定義できる

13.1.2. それらを蓄積するだけで,非常に強力な開発ツールが自然に出来上がる

13.2. 小さな Lisp インタープリタを 作れば, その上に コマンドを 構築する ことが できる

14. 進化は Smalltalk 型がよい

14.1. オブジェクトとの対話型

14.2. ダイナミックな変更

14.3. 例

14.3.1. 一部の保存画像をアップローダーに移動する

14.3.1.1. 普通なら

14.3.1.1.1. アップロードする

14.3.1.1.2. DB の画像パス情報を書き換える

14.3.1.2. Smalltalk 型では

14.3.1.2.1. 画像情報オブジェクトにアップロード機能を付ける

14.3.1.2.2. 画像情報オブジェクトと対話してアップロード&情報書き換えをする

14.3.1.2.3. 利点

15. 関数型で作る

15.1. 同じ引数で呼び出すと同じ結果が返ってくる

15.2. 入出力や状態を保持する部分は独立させる

15.2.1. Scala ならアクターにする