Haskellをかじってみて (素人考え)
Haskellをかじってみて、とにかく、短く、すっきり書けることに驚いた。
その割に、読みやすいということにも。
どうやら、定義をたくさん書いて、すべて定義できれば、プログラムが動くというものらしい。
直接にメモリをどうするとかいうものではなく、つまり、高級な言語ということになるのかな。
言語自体は、オブジェクト指向でないものに初めて触れたが (C言語もあまり知らない)
オブジェクト指向でないために、クラスから作ったオブジェクトが
インスタンス変数や、インスタンスメソッドを持っていて、それを操作するわけでない。
OOPでは、とにかく、クラスつくって、インスタンスつくって、それを操作するという感じだったけど、違うんだな。
Haskellでは、
値、値の集合、関数 を組み合わせてプログラムを書くみたいだった。
値の集合の構造は型を用いて(dataを用いて)定義可。
関数は自由に定義可能だが、通常、ある型に適応する関数はおおよそ決まっているので、型クラスで定義しておくことで、その型に関数が適応できることを保証しておくなどするようだった。
Scalaで同じことをしようとすると、
objectの中で関数を定義・まとめて、case class で値・値の集合を定義するという感じになるのかな。
うーん、でもOOPの性質を利用するには、型と、関数を結びつける手段としては、
case classの基底になる、abstract classや、case class自体に、メソッドを定義することになるのかな。
実際、Listのソースをみても、そんな感じになっているような気がする。
結局は、case class を積極的に使うことが、Haskellのようなプログラミングをすることにつながるのかな。?? こんがらがってきた。
あと、個人的な、オブジェクト指向、関数型のイメージは
---------------- | |
← ← オブジェクトのメソッドをつかってオブジェクトの内部を変更可能 | |
オブジェクト | |
→ → オブジェクトのメソッドをつかって新しい結果の取得、新しいオブジェクトの取得 | |
---------------- |
〇関数型 (オブジェクト指向なし)
---------------- | |
データ | → → 関数で結果をえる |
---------------- |
〇マルチパラダイム
----------------- | |
immutable | |
オブジェクト | → → オブジェクトのメソッドで結果をえる |
---------------- |