Scaleの関数プログラミングのアプローチについて(2)
Scalaの章を読了した。 しかしこの本だけでは、Scalaがどうやって破壊的操作を検出するか/あるいはしないのかについての全体像はわからなかった。 わかったのは、varとvalがあり、valが破壊的操作を許さない変数を定義するためのもので、静的に破壊的操作を禁止するものだ。 ものによっては静的には検出できないので、その場合はランタイムで破壊的操作のエラー(例外)が出るというレベル。かなり浅い。
そこで、次の本で調べ始めた。
※ 後で知ったが、下のリンクで本の中身が公開されている。 紙の本でいうとChapter 2だ。 First Steps to Scala Summary In this article, you’ll follow twelve steps that are designed to help you understand and gain some basic skills in the Scala programming language.
さっそく、O’REILLY Safari Bookshelfで上記「Programming in Scala」を本棚
に登録し、まえがきにも、チュートリアルの章にも目もくれず、目次から一直線
に「Chater 17のCollectionsの章」にジャンプした。
そこから、「前のChapterで説明した…」とかのリンクを辿ること数回、次の文
章に辿りついた。どうも各Collection型の操作ライブラリにはimmutableと
mutableの二つのバージョンがあるようだ。ものによると、immutableバージョ
ンしか無い型もあるようだ。
Page 47
Step 10. Use Sets and Maps
imperative styles, its collections libraries make a point to
differentiate between mutable and immutable collection classes. For
example, Arrays are always mutable, whereas Lists are always
immutable. When it comes to Sets and Maps, Scala also provides
mutable and immutable alternatives, but in a different way. For Sets
and Maps, Scala models mutability in the class hierarchy.
これで概略が掴めた。プログラマがそのメソッドを完全にimmutableにしたけれ ば、注意してimmutableな部品を選んでプログラミングする必要があるわけだ。 また、必要な部品郡は概ね足りているのだろう。
ただ、私が一番知りたいのは、immutableなコードの中にmutableなコードが混在し たことを検出できるかどうかだ、うっかり混在させることはよくあることだと 思うからだ。できればコンパイル時に検出されるのが望ましい。
もし、Actorモデルなどの並行性を構築したい場合、うっかり破壊的なコード (mutableなどコード)が混在してしまっては非常に原因を調べるのが難しいと考 えられる。
もうちょっと調査が必要。