最後にScalaとRubyとの比較を行う。「Rubyらしい」特徴を3つ取り上げ、それらをScalaと比較してみたい。ような文で左右に同じ型を書く必要があるのか」というものがある。Time.new」とすればよい。これはRubyが動的型付けであり、変数が特定の型と結び付いていないためだ。これはScalaコンパイラが「型推論」を行い、変数の型を自分で補うためだ。したがってコンパイラが型を推論できる箇所では型を省略できるのだ。Rubyはオブジェクトの型付けに「ダックタイピング」と呼ばれる方法を使う。これは型付けを継承関係によらず、単に特定のメソッドを実装しているかどうかで判断することだ。Rubyでリスト4のメソッドの引数xはclosed?とcloseの2つのメソッドを実装さえしていれば何でもよい。Scalaで書いたリスト5ではコンパイラに「xはisClosedとcloseを実装している型なら何でもよい」とだけ指示している。subtypingと呼ぶ。Rubyと異なり条件に適合しない型がコンパイル時にきちんとチェックされる。「メソッドの後付け」は恐らく最もRubyらしい特徴かもしれない。Rubyの「20.minutes」という式を考えよう。素のRubyのFixnumクラスにminutesはないが、もし「後付け」でminutesメソッドを定義していればこのコードは通る。これをオープンクラスという。Scalaコンパイラは上記の式をみると「Intクラスにminutesメソッドはない。Intから暗黙に変換できるクラスにminutesメソッドがあれば型変換のコードを挿入してコンパイルを通そう」と考える。Scalaでは暗黙の型変換をユーザ定義できるので、Intからminutesメソッドを定義したクラスへの暗黙の型変換を定義しておけばよい。これはIntクラスの書き換えではないため、Intクラスを使う他のコードに影響はない。(画像をクリックすると別ウィンドウに拡大図を表示します)まとめこれらを踏まえてScalaが依然として静的型付け言語であるということを思い出してほしい。「動的言語の特徴のように見える物」が、実はそうでもないことがみえてくるのではないだろうか。実際Scalaを学んでいくと「型安全性と実行効率を引き換えに記述性と柔軟性を手に入れる」という「動的言語の常識」が覆されていくような感覚すら覚えるほどだ。読者もScalaに触れることでプログラミング言語を新しい視点で捉え直してみては如何だろうか。11月26日に公開する最終回では、信頼性のある並列プログラミング機能を持つ関数型言語「Erlang」をとりあげる。etherプログラミングを嗜む普通の社会人。World」ではなく、N88-BASICで画面上に円を描いたこと。「外国語のよいところはそれをいくつ学ぼうと構わないことだ」という或る言語学者の言葉はプログラミング言語にも当てはまると最近感じ始めている。