アルバイトとして働いてくれている同僚がScalaに入門していて、基礎的なScalaの文法などは習得してくれているけれど、コレクションメソッドや関数型プログラミングのイディオムまわりでもっと伸ばせそうな雰囲気があるので、何か良い資料を知らないですかという相談があった。
確かにScalaはBetter Javaとして使うことができるけれど、Scala wayなやり方を知っているほうが当然生産性が上がるし、現実にScalaプロダクトではそうしたScala wayなコードが多くを占めている。
そこで、自分が知っている限りの良い(無料で読める)資料を紹介することにする。「これもいいよ」的なのがあったらはてなブックマークやコメントで教えてもらえたら嬉しいです。
とりあえずこれ読んどけ的なファーストチョイス
これが決定版では?と思う。ドワンゴ社が作成した新卒エンジニア向けのScala研修資料が日本のScalaコミュニティに寄贈されたもの
である。ドワンゴ社様、ありがとうございます!!!
Visual Scala Reference
Scalaの特にコレクションメソッドまわりを図示して説明してくれるサイト。最近日本語化されたようだ。
例えば map
メソッドの解説は以下のように図示されていて、非常に分かりやすい。
コード中に登場するメソッドの意味が分かりにくいときとか、 foldLeft
と foldRight
ってどう違うんだっけ、というときに重宝すると思う。あくまでレファレンスなので、これを頭から読むという使い方ではなく、興味があるメソッドを見てみる、という使い方が良いと思う。
ゆるよろさんの記事を読む
Scala-wayなメンタルモデルを学ぶために僕が一番読んだブログはこのゆるよろ日記だと思う。
ただ10年前の記事だったりするのでちょっと古くなっている可能性があるけれど、ほぼ現代のScalaと互換性があると思う。
Option
の記事も大変勉強になった思い出がある。
ひしだまさんの記事を読む
今Scalaでブイブイやってる人間の90%くらいはこのサイトでScalaの基礎を勉強したのではないかと思う。このサイトも若干古びているが、Scala 2を使う限りはそれほど問題になることはないと思う。
モナドまわり
モナドについては無限に様々な説明が試みられ、その都度微妙な空気になりがちなのだが、個人的にブックマークしていたエントリとしては次を挙げたい。
良いスライド
www.slideshare.net
自分も初学者向けに色々書いてるつもりなので https://t.co/Ah2COGylly この辺で良さそうなやつがあったらぜひ(ダイマ)
— がくぞ (@gakuzzzz) 2022年12月21日
良いスライド集の情報もいただいた。ありがとうございます!!!
全体を通じて
基本的にScalaのメンタリティはイミュータブル、つまり一度作ったものは不変である、という思想に貫かれているということを抑えておけば、全体のコードを理解しやすくなると思う。 コレクションメソッドでは、一度作ったコレクションをループでいじるのではなく、フィルタするメソッドや変換するメソッドをチェインさせて新たなコレクションに写していく、という考え方になっている。
やや古いサイトに共通する問題として、コレクションメソッドまわりで注意が必要なところがいくつかあって、例えばScala 2.13では breakOut
といったメソッドが廃止されている。まあこのへんの瑣末な話はコードレビューで吸収すればいいから、まあいいか。
書籍
書籍だと、有名どころはコップ本だと思う。同僚向け情報だと、これはオフィスに置いてあった気がする。