Weitere ähnliche Inhalte
Ähnlich wie 関数型言語とオブジェクト指向言語(序章) (8)
関数型言語とオブジェクト指向言語(序章)
- 23. オブジェクト指向言語(3)
ICar toyota86 = new ToyotaCar(); //トヨタ車クラスの86インスタンス(オブジェクト)を作ります。
toyota86.toggleKey("1234"); // startEngine()が実行され、エンジンがかかります。
toyota86.pressAcceleratorPedal() // run()が実行され、車が走ります。
ICar fairLadyZ32 = new NissanCar(); //日産車クラスのZ32インスタンス(オブジェクト)を作ります。
fairLadyZ32.toggleKey("1234"); // startEngine()が実行され、エンジンがかかります。
fairLadyZ32.pressAcceleratorPedal() // run()が実行され、車が走ります
ICarは車インタフェースなので、操作方法だけを定義します。
その中身はトヨタも日産もホンダも、みんな独自に作っていて、構造も違うわけですが、
運転する人はそんなことは知らなくてもどの車も運転できます。
ハンドルやアクセル、ブレーキなどの操作方法が同じだからです。
「インタフェース」はなぜ必要なのか、それは使っていくうちにわかっていくと思います。
- 26. 関数型言語(2)
・関数型言語では、副作用のないプログラミングを基本とします。
「副作用のない」とは、たとえば
f(x) = x + 2
この関数を使うとして、f(2) は常に結果が4になります。
つまりどういうことかというと、
「同じ値を引数で渡した場合には必ず同じ結果が返る」
ということです。
・たとえば、データベースにアクセスするメソッドがあったとして、同じ条件でデータ
ベースからレコードを検索して取得するメソッドの結果はそのときのデータベースの
状態によって変わります。
C言語の関数mallocなどにしても、確保されるメモリアドレスの値は毎回変わります。
これを、「副作用がある」状態といいます。
・関数型では副作用のない関数を細かい粒度で作成し、それらを組み合わせてプログラ
ムを作っていきます。