TOPシステム開発> 【新・言語進化論】次にくる!新登場言語> 第3回:オブジェクト指向と関数型を兼ね備えた「Scala」 (2/3)




【新・言語進化論】次にくる!新登場言語

【新・言語進化論】次にくる!新登場言語

第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コマンドを起動してくれる。 次のページ




ether
著者プロフィール
著者: ether
プログラミングを嗜む普通の社会人。はじめてのプログラミングは「Hello World」ではなく、N88-BASICで画面上に円を描いたこと。「外国語のよいところはそれをいくつ学ぼうと構わないことだ」という或る言語学者の言葉はプログラミング言語にも当てはまると最近感じ始めている。
http://blog.so-net.ne.jp/rainyday/


INDEX
第3回:オブジェクト指向と関数型を兼ね備えた「Scala」
  Scalaについて
Scalaのプログラミング
  RubyとScalaの比較