【新・言語進化論】次にくる!新登場言語
第3回:オブジェクト指向と関数型を兼ね備えた「Scala」
著者: ether
公開日:2007/11/19(月)
Scalaのプログラミング
Scalaプログラミングの手はじめとして、リスト1のプログラムをインタプリタに打ち込んでみよう。これは掛け算九九の結果をHTML形式で表示するプログラムだ。スクリプトとして実行するにはこれを「Mult.scala」という名前で保存し、コマンドラインから「scala Mult.scala」と打ち込めばよい。
このプログラムではメソッドを定義するdefと繰り返しを行うforを使っている。
リスト1のfor構文は繰り返しを行うものだが、for構文自体がコレクションの形で値を持つこともできる。リスト2のようにforの中でyieldが使われるとfor構文全体がコレクション(ないしはイテレータ)として値を持ち、個々の要素がyieldの右辺の値となる。これを「for comprehension(for内包表記)」という。
リスト2のプログラムの場合、for comprehensionの値はXMLのノードのコレクションとなる。このようにXMLをリテラルとしてプログラム中にそのまま書けることもScalaの特徴の1つである。XMLリテラル中で中括弧を使うことでその中にScalaのコードをさらに埋め込むことが可能だ。
内包表記という記法は「第1回:今勉強したい関数型言語『Haskell』」で紹介したHaskellでよく使われる書き方でもあるが、このようなfor構文の二面性は命令型と関数型の融合というScalaの特徴を示す点で象徴的なものともいえるかもしれない。
ところでScalaプログラムをコンパイルし、Javaのクラスファイルにした状態で実行することもできる。その場合はmainメソッドを持たせるためのオブジェクトを記述しておく必要があり、これはリスト3のように書く。
これを「scalac Mult.scala」と打ち込んでコンパイルすると、クラスファイルができあがる。クラスファイルを実行するには「scala Mult」として実行する。このコマンドは内部的にクラスパスの解決などを行ったうえでjavaコマンドを起動してくれる。 次のページ