目次

第1章 Scalaの世界へようこそ

1.1 この本について
1.2 Scalaとは?
【コラム】参考になるウェブサイト・本

第2章 Scalaの環境を作る

2.1 sbtをインストールする
2.2 sbtでテンプレートからプロジェクトを作る
2.3 sbtでプログラムを実行する
2.4 sbtでScala REPLを使う
【コラム】Scastie
【コラム】サンプルコード

第3章 Hello Worldを嚙み砕こう

3.1 Hello World ― エントリポイント
3.2 Hello Worldの構成要素 ― メソッド・式と文・ブロック式
【コラム】「???」を利用する

第4章 FizzBuzzしてみよう

4.1 FizzBuzzに必要な道具を揃える① ─for式
4.2 FizzBuzzに必要な道具を揃える② ─if式
4.3 FizzBuzzの趣向を変えてみる① ─match式
4.4 FizzBuzzの趣向を変えてみる② ─再帰

第5章 オブジェクト指向で多角形を扱おう

5.1 多角形を表現してみる─クラス
5.2 便利機能を追加してみる─オブジェクト
【コラム】ケースクラス
5.3 多角形に色と透明度を付けてみる─トレイト
【コラム】タプル

第6章 FizzBuzzを作ってみよう

6.1 コレクションを扱う前に…─パラメータ多相
6.2 FizzBuzzを作る─Range・List・関数
【コラム】主なコレクション
【コラム】主なコレクション操作メソッド

第7章 安全第一

7.1 その引数は安全ですか?① ─Option
7.2 その引数は安全ですか?② ─Either

第8章 らくらく非同期処理

【コラム】ファンクタ・モナド・モノイド

第9章 またFizzBuzzしてみよう

9.1 JSONファイルでFizzBuzz ─IO・JSON
9.2 縁の下の力持ち─implicit
【コラム】implicit class
9.3 チェックチェック!─テスト
【コラム】よく利用されるその他のライブラリ

あとがき

著者紹介

第1章 Scalaの世界へようこそ

1.1 この本について

 この本は,あまり難しいことを考えずに一通りScalaを触れるようになることを目的としています.簡単なサンプルコードをベースにゆる~く,でも出来る限りScalaの本質を損なわないように構文や機能を紹介していきます.流れに沿って必要十分なスピードで進んでいくため,辞書的に利用するのではなく順を追って読むことをおすすめします(サンプルコード内のコメントにも重要な情報があります).Scalaやその他の小難しい関数型プログラミング等々の事前知識は一切必要ありませんが,Javaまたは相当するオブジェクト指向プログラミング言語をある程度理解していることを前提とします.

1.2 Scalaとは?

Scala(スカラ)はオブジェクト指向言語と関数型言語の特徴を統合したマルチパラダイムのプログラミング言語である。名前の「Scala」は英語の「scalable language」に由来するものである。

 Wikipediaではこのように紹介されています.2.12系がメインストリームで,最新のリリースは2.12.4となっています(2018年2月現在).本書では2.12系を前提に進めます.本題に入る前にScalaの“推しポイント”をいくつか紹介します.

 ・Scalaはオブジェクト指向と関数型の特徴を併せ持つプログラミング言語です.関数型は難しそうだと敬遠してしまう方も多いと思いますが,Scalaでは関数型の知識をほとんど必要とせずに恩恵だけを得ることができるのです.ベースはオブジェクト指向ですので,Javaの延長としてプログラミングしながら関数型由来の便利ツールで楽をすることができます.

 ・構文・標準ライブラリが共に洗練されており,簡潔なコードを記述できます.強い静的な型付けにより多くのバグをコンパイル時に発見しやすいというメリットと,型推論や糖衣構文といった補助機能により,RubyやPythonといったスクリプト言語のようにスッキリとしたコーディングが可能というメリットを併せ持ちます.他の言語ではもどかしかったことがScalaでならサクッとできちゃいます.

 ・JVM上で動作するため,様々なプラットフォームで同じバイナリを利用できます.また,Javaのライブラリ資産もオーバーヘッドなくシームレスに利用できます.逆にJavaからScalaのコードを呼び出すことも可能なため,プロジェクトの一部にだけScalaを利用するといったこともできます.

 ・必要なツールはsbt(とJDK)だけです.「コンパイラは?言語仮想環境構築ツールは?ビルドツールは?」とあれこれ迷う必要はありません.sbtひとつでビルドやライブラリの管理はもちろん,REPLと呼ばれる対話的な実行環境やプロジェクトで利用するScalaのバージョン管理まで可能です.ちなみに最近ではScalaをネイティブ環境(LLVM)やJavaScript環境(as an AltJS)向けにコンパイルして利用できる環境も整いつつあります.

 Scalaの良いところばかりを挙げましたが,一方でScalaについてよく誤解されることがあるので,こちらも触れておきたいと思います.既にScalaを調べたことがある方であれば「Scalaのコンパイルは遅い」という噂を耳にしたことがあるのではないでしょうか.これは一部正解ですが,誤解によるものが多く含まれます.コンパイル時に必要な処理が多く結果として比較的遅いことは事実ですが,それ以上にビルドツールの誤った利用法によりコンパイル速度が低下している場合が多いです.正しく利用していればそれほどもたつくことはないでしょう.

 また,コンパイル速度自体も日々改善が進んでいます.ビルドについて詳しくは2章で取り上げます.もう1つ,「Scalaのコードは難しい」と先入観を持たれることがあります.実際には基本的な構文(特に一部の糖衣構文)さえ知ってしまえば不自由することはないはずで,その量も少なく抑えられています.コーディングの指針としては,「基本はオブジェクト指向であること」「出来る限り値を不変にすること」の2つだけ意識していけばとりあえず十分でしょう.これらについても本書の中で追い追い紹介していきます.

 さて,Scalaを始める前にこのような謳い文句をいくら並べても実感が湧かないと思いますので早速本編に入っていきましょう.



【コラム】参考になるウェブサイト・本

■おすすめ

Scala Standard Library API

http://www.scala-lang.org/api/current/index.html

Scala標準ライブラリの公式ドキュメント.Google先生が苦手な記号でも検索可能

Scala Tutorials

http://docs.scala-lang.org/tutorials/

Scala公式のチュートリアル.項目ごとに列挙されている.かなりニッチで応用的な項目も紛れているので注意.

ひしだま's 技術メモ Scala

http://www.ne.jp/asahi/hishidama/home/tech/scala/index.html

網羅的にまとめられている.

Scala Text(株式会社ドワンゴによる研修用資料)

https://dwango.github.io/scala_text/

言語学的な部分から実務向けの情報まで幅広くまとめられている.

sbt Reference Manual

http://www.scala-sbt.org/1.x/docs/ja/index.html

Scala向けビルドツールのデファクトスタンダードであるsbtの公式ドキュメント.

■条件付きでおすすめ

Scalaスケーラブルプログラミング第3版(インプレス)

https://www.amazon.co.jp/dp/4844381490

Scalaの作者であるOdersky氏による本.通称コップ本.入門向けとしておすすめされている場合が多いが,「Scalaはどのような方針で設計されているのか」といったことまで興味がある人に向いているだろう.

Scalaによるプログラミングの基礎(株式会社はてなによる研修用資料)

https://github.com/hatena/Hatena-Textbook/blob/master/foundation-of-programming-scala.md

株式会社ドワンゴによる研修資料より実務寄りの内容.スライド前提の内容で細かいところを置いて進んでしまうので1から読んで追いかけるのは少々大変か.

Scala逆引きレシピ(翔泳社)

https://www.amazon.co.jp/dp/4798125415

内容は実務寄りで辞書的に便利.しかし古い内容が含まれるので注意が必要.

Scala関数型デザイン&プログラミング(インプレス)

(原著: Functional Programming in Scala(Manning Publications))

http://www.amazon.co.jp/dp/4844337769

Scalaについての本ではなく,純粋関数型をScalaでどう実現するか ということに主眼をおいている本.Scala初心者向けの内容ではない.類似する関数型についての書籍であるすごいHaskellたのしく学ぼう!(オーム社)より難易度はやや高め.

■その他のリソース

Gitter - ScalaJP

https://gitter.im/scalajp/public

日本Scalaユーザーズグループが運用しているチャット.500名程が参加している.初心者向けのチャットルームと関数型・上級者向けチャットルームは別々に用意されている.

Slack - scala-jp

https://scala-jp-slackin.herokuapp.com/

日本のScalaユーザが有志で運用しているチャット.できてから日が浅く100名未満の規模感.人数が少ないからこそ入りやすいか.


試し読みはここまでです。
この続きは、製品版でお楽しみください。