4.1 式と簡単な関数

Scala システムには、素敵な計算機と見ることのできるインタプリタが同梱されています。ユーザーは式をタイプすることで計算機と交信できます。計算機は評価した結果とその型を返します。たとえば

scala> 87 + 145 unnamed0: Int = 232 scala> 5 + 2 * 3 unnamed1: Int = 11 scala> "hello" + " world!" unnamed2: java.lang.String = hello world!

部分式に名前を付け、以後は式の代わりにその名前を使うこともできます。

scala> def scale = 5 scale: Int scala> 7 * scale unnamed3: Int = 35 scala> def pi = 3.141592653589793 pi: Double scala> def radius = 10 radius: Int scala> 2 * pi * radius unnamed4: Double = 62.83185307179586

定義は予約語 def で始まります。= 記号に続く式を表す名前を導入します。インタプリタは導入された名前と型を返します。

def x = e のような定義の実行は、式 e を評価しません。その代わり、x が使われる時はいつでも e は評価されます。一方で、Scala には値の定義 val x = e もあり、定義評価の一環として右辺 e を評価します。その後 x が使われるときは、前に計算された e の値で直ちに置き換えられので、式を再評価する必要はありません。

式はどのように評価されるのでしょう? 演算子とオペランドから構成される式は次の簡単化のステップを繰り返し適用して評価されます。

    • 最も左の操作を選ぶ

    • そのオペランドを評価する

    • オペランド値に演算子を適用する

def で定義された名前は、名前を (未評価の) 定義の右辺で置き換えることで評価されます。val で定義された名前は、名前を定義の右辺の値で置き換えることで評価されます。評価プロセスは値を得たら終了します。値は文字列や数や配列やリストといったデータアイテムです。

Example 4.1.1 数式の評価です。

(2 * pi) * radius → (2 * 3.141592653589793) * radius → 6.283185307179586 * radius → 6.283185307179586 * 10 → 62.83185307179586

式を値へと段階的に簡単化するプロセスを 簡約 と呼びます。