IT練習ノート

IT関連で調べたこと(実際は嵌ったこと)を書いています。

Javaの感覚、Haskellの感覚

Javaやっていて、Haskellを学んでいると、なにか原落ちしない感覚、違和感のある感覚があり、それがうまく言葉に表せないことが多々あります。

こういうところが、腹落ちしてなかったのだなぁと感じたことのメモ。

データ構造としてMapはどの言語でも使います。

Javaだとこんな感じ:

Map<String, String> m = new HashMap<String, String>();
m.put("key1", "val1");
String val = m.get("key1");

newでインスタンスを作って、メソッドを呼び出してプログラミングをしていきます。 newしないのは、シングルトンを作るときぐらいでしょうか。最近は、何でもインジェクションですませる方向にあるので、newをほとんどしないかも知れませんが。 ともかく、newして、なんかする、っていう感覚です。

HaskellにもMapがありますが、

let m = Map "key1" "value"

といったコーディングが出来ません。 コンストラクタが隠されている訳です。

実際にはデータを作る関数があるのでそれを使えば良い訳ですが:

Prelude Data.Map> let m1 = insert "key1" "val1" empty
Prelude Data.Map> m1
fromList [("key1","val1")]
Prelude Data.Map> let m2 = fromList [("key1", "val2"), ("key2", "val2")]
Prelude Data.Map> m2
fromList [("key1","val2"),("key2","val2")]
Prelude Data.Map> 

コンストラクタが隠されている型が、思った以上に多いような感じがします(当社比)。 慣れの問題かと思いますが、データを作る関数を探すことがちょっとしたハードルなのかなぁと。