Haskellにおける”メッセージ”の意味
『入門Haskellプログラミング』という本を読んでたら、「メッセージ」という言葉が頻繁に出てきた。しかも、独特な使い方をしている。
そこで、整理してみた。
『入門Haskellプログラミング』
p.98 10.1 プロパティが1つのオブジェクト: 1杯のコーヒー
「cupという関数を定義します。この関数は、引数としてコーヒーカップに入っている液体の量を受け取り、その値が格納されたクロージャを返します。」
『入門Haskellプログラミング』p.98
cup flOz = \_ -> flOz
この cup というのがオブジェクトとなる。
flOz が プロパティで、ここでは cup の容量となる。(単位・オンス)
「コーヒーカップの内部にメッセージを適用できるようにしましょう。」
同上
cup flOz = \message -> message flOz
「メッセージをオブジェクトの内部プロパティに適用できるようになります。」
同上
この message というのは メッセージ関数 とでもいうようなもので、引数に cupオブジェクトをもつ。
通常のオブジェクト指向言語だと “ゲッター”、”セッター”のようなイメージだろう。
「オブジェクトにメッセージを送信するために使用しているパターンが、メソッド呼び出しの共通パターンと少し異なることに注意してください。」
同上
共通パターン car.start()
この場合、car がオブジェクト(インスタンス)、start()がメソッド。
Haskellでのやり方は、メッセージをオブジェクトに送信するというもの。
Haskellでのパターン start car
messageの例だと、”message cup” となる。
具体例として、cupオブジェクトを例に考えてみる。
-- オブジェクトcupの定義
cup flOz = \message -> message flOz
以下のように使う。
coffeeCup = cup 12
これで、12というプロパティを持った cupオブジェクトである coffeeCup が定義された。
このプロパティを取得するゲッターメソッドをメッセージ関数として定義する。
getOz aCup = aCup (\flOz -> flOz)
aCup というのは、cupオブジェクトで、coffeeCupオブジェクトに対しておこなうなら、
ghci> getOz coffeeCup
12
となる。
参考
『入門Haskellプログラミング』
Will Kurt 著
株式会社クイープ 監訳
翔泳社
2019年07月31日 初版第1刷
カテゴリー: Haskell, memo
タグ: message, オブジェクト指向, ゲッター, セッター, プロパティ, めっせーじ
カウント: 133