Posted at

独書会 Scala IN DEPTH @大人の喫茶店 その2

More than 5 years have passed since last update.


In this chapter


  • Using the Scala Read Eval Print Loop

  • Expression-oriented programming

  • Immutability

  • The Option class


要約

Scalaエンジニアが知っている必要があるいくつかのtopicsについての説明。


Learn to use the Read Eval Print Loop (REPL)



  • REPLとは、Scalaを動かせるインタラクティブシェル

  • Scalaをインストールしてパスを設定していれば使える

  • ターミナルでscalaと入力して、REPLを起動する

  • 出力は、変数名: 式の静的な型 = 結果の値と読み取る


  • 結果の値は、通常JVM内の全てのクラスで定義されているtoStringメソッドの呼び出し結果


Experiment-driven development(EDD)


  • テストやプロダクションコードを書く前に、REPLで試す、実験主導型の開発


TDD


  • テストコードを最初に書いてから、クラスの実装をする開発アプローチ。

  • TDDの要素は、テストを通してAPIを定義すること。

  • コンテキストで自分のコードを見ることができ、使いたいコードかどうかの感触を得れる。

  • 厳密な型付け言語は、高度な表現ができるので、TDDを使う動的言語よりもずっと多くの問題を提示することができる。

  • REPLを使うことは、テストを作る前にEDDがAPI定義フェーズを作ることができる。型システム内でAPIを試すことができるので。

  • EDD開発は、API内で可能な限り有効な型を利用するために、型システムのREPL内で実験することを必要とする。

  • 実験駆動デザインは、新しいメソッドやバグフィックスをするよりは、大きな機能やドメインを追加する時に必要になる。

  • 実験駆動設計は、DSLを定義するときにも助けになる。

  • DSLとは、特定のドメインを扱うための擬似プログラミング言語。

  • DSLを定義するときの課題の一つは、効率的に型システムを使うことである。


式を考える



  • Expression-oriented programming (式指向プログラミング)とは、文よりも式を使うことを述べる時に使う用語

  • 文は実行するもの。コードを実行する

  • 式は評価するもの。つまり値を変えす

  • 式は値を得るために評価るするコードブロック

  • Scalaでは、いくつかの制御ブロックが式

  • 制御が分岐であったとしても、各々の分岐は値を返す

  • 例えばif節は、Javaの三項演算子と同じで値を返す

  • Scalaでは、式から値を返さない文はほとんどない


returnを使うな


  • 式を使うポイントは、return文を使わないことを理解すること。

  • 式は値を得るために評価するから、returnは必要ない。


Mutability


  • immutablilityとは、オブジェクトまたは変数の不変の状態のこと。それはmutablilityの反対。

  • mutablilityとは、ライフサイクルの中で変更したり変異したりするオブジェクトや変数の能力。

  • 式にMutabilityな文を混ぜると、コードの明確性が減ってくる。これはimmutable codeを好む理由の一つになる。


Rule


1. REPLで経験する


  • ScalaはREPLツールを提供しているので、開発者は最終的なコードをコミットする前に色々といじることができる。

  • Scalaのエコシステムで最も便利なツールなので、開発者はREPLで開発を開始できる。


2. 文ではなく式


  • 多くのコードは1つの式の小さなメソッドとして書かれている。

  • このスタイルはエレガントではないけど、コードの保守で役に立つ。


所感


  • REPL推しが凄い

  • EDDという新しいスタイル

  • Functional programmingからいつの間にかExpression-oriented programmingに切り替わっていた。。。

  • immutabilityを突き進めると、きっとcloneメソッドではなくコピー関数が必要になるんだよね。


    • いちいちnewしないといけない、そこだけが嫌かな。