『Scala スケーラブルプログラミング』のメモ

この記事は筆者が見た夢を一人称視点で叙述した内容です。事実ではなく、実際の人物等とは一切関係ありません。

  • 関数型プログラミングの「副作用を持たない」は「プログラムの操作は入力から出力への写像であるべき」という発想に拠るということ(1.2.2)
  • ジェネレータ式の "<-" は英語の "in" と読むことができ、また数学の "∈" に対応すると考えられる(2.6)
  • タプルの要素へのアクセスが、applyメソッドをつかわずに要素(のインデックス)ごとのアクセサを用いる理由。これって静的型付けの言語の負の側面のような気がする(3.3)
  • ハッシュマップのリテラルっぽくみえる "->" が実はメソッドで、レシーバと引数を要素に持つタプルを生成するメソッドであること(つまりScalaのハッシュマップは (key, value) のようなタプルから生成される)(3.4)
  • 副作用のないメソッド設計にすることのメリットの提示(3.5)
  • companion objectsってRubyの特異クラスみたいなもの?(4.3)
  • Applicationトレイトはエントリーポイント(mainメソッド)を隠蔽するうまいやり方だとおもう(4.5)
  • 補助コンストラクタとしての this() は、RubyのObject#initializeみたいなもの?(6.7)
  • 暗黙の型変換はなぜグローバルな空間に implicit def hogeToFuga と定義するのだろう?Rubyのように Hoge に toFuga というメソッドを生やすのではなにがいけないのだろう?(6.12)
  • for式でループを入れ子にできるみたいだけど、インデントしづらい書式だしほどほどにしたほうがよさそう(7.3.3)
  • ネストした関数定義の使いどころみたいなのがわかった。なるほど!というかんじ。でもRubyに慣れているとブロック引数で渡したほうがよさそうだし、Scalaでもそういう書き方にしたほうがよさそう(8.2)

いまのところ、8章の途中まで読み進めている。Scala自体のチュートリアルとしても良書だとおもうけど、それ以上に(関数型)プログラミングに対する勘所についてもうまくまとめられているのがすばらしいとおもう。というか、それを目的としてこの書籍を買った。

Scala自体に興味・関心がある人はもちろん、コードを書くことについての考え方を深めたい、という人にもおすすめだとおもいます。

ただ、プログラミングの初学者向けではないとおもう。ある程度コードを書いてみて、いま使っている言語(RubyでもJavaでも、あるいはそれ以外でも)について満足しているところと満足していないところをはっきり述べられる程度の理解がある人を想定して書かれているので、プログラミングについての基礎的な考え方や概念(条件分岐だとか反復処理だとか変数の概念だとか)の説明はあまりされていない。

だから、Scalaを題材にした初学者むけの書籍が出版されるといいな、とおもった。