はじめに

本特集記事では、新しいプログラミングの可能性を信じて努力する方のために、 ちょっと変わった、しかし強力で実用性のあるプログラミング言語、 Scalaを紹介します。

ここ最近、業務で使っている言語以外でプログラミングしていない方、 「言語はC、Java、VB、COBOLだけおさえておけばOK」という方はぜひ、 この機会にScalaに触れてください。新しい発見が山ほどありますよ。

今回は、まずScalaの概要を紹介します。

言語なんてJava,C,VB,COBOLだけおさえておけばOKでしょ?

現在、プログラミング言語の中で大きな比率を占めているものとしてJava、C、VB、COBOL、あとはPHP、Rubyといったプログラミング言語があります。みなさんも業務上の都合から、上記の言語を複数種類扱ったことがおありかも知れません。

「それで不便を感じないし」・・・本当ですか?
みなさんは毎日のプログラミングの中で、「なんでこの処理を毎回書かなければいけないんだろう」「このメソッド、極端に長くなってるんだけど」「条件文が複雑に絡み合ってしまってテストの条件が分からなくなってきた」
という状況に悩まされませんか?

そういった、プログラミング上で困ることの原因の一つとして「プログラミングする時に考え方が固定的になっている」ことがあるかも知れません。

「言語は思考を制限する」ではありませんが、現在使っているプログラミング言語に「不便を感じない」あなたは、実はもっと良い方法を見逃しているかも知れないのです。
ここで一度、「プログラミングするときの考え方」を見直してみませんか。

プログラミングの考え方を「プログラミングパラダイム」と呼びます。
みなさんが良く耳にするのは「オブジェクト指向型言語」「手続き型言語」という言葉でしょう。
こういったプログラミングパラダイムは多数ありますが、その内の一つが「関数型」です。

関数型プログラミング言語?他の考え方と何が違うの?

みなさんが普段使っているC言語やJavaは、「命令型」という考え方に基づいています。
命令型のプログラミング言語では、命令が機能の単位です。
命令を順次実行する形式で機能を記述していきます。

これに対し、関数型プログラミング言語では関数が機能の単位です。
ここで「関数」は数学的な関数を表しています。
数学的な関数は、ある入力値が決まると出力値が一意に決まります。
この関数の組合わせによって、機能を記述していきます。
一方で、命令型言語(C言語など)で使われる「関数」は、同じ入力値に対して異なる出力値を返す事があります。
関数型の関数では、同じ入力値に対して常に同じ出力値が返る点が重要です。

同じ処理を、それぞれの考え方を使って日本語の文章で記述すると、こうなります。

「レジの会計で合計値を計算する」

命令型
  • 1. 品物がカゴに残っていれば2.へ、空であれば5.へ進む。
  • 2. 品物を取り出す。
  • 3. 価格を合計値に足す。
  • 4. 1.へ戻る。
  • 5. 合計値を表示する。
関数型
  • 1. 合計値とは、カゴの中の品物をあるルールで処理した結果の値である。
  • ルールA. 品物が0個の場合、合計値は0である。
  • ルールB. 品物が1個以上の場合、合計値は、カゴの中の品物1つの価格と、残りの品物の合計値を足した値である。

ここで関数型での関数は、ある入力値に対して出力値を決定する「ルール」と考えています。
上記2つの記述の違いがわかるでしょうか。
命令型では、順番通りに処理が進むことを期待しています。
もし命令の記述順が替わってしまうと、目的が果たせなくなってしまいます。
これに対し、関数型で記述しているルールは記述順が変わっても動作が変わりません。
関数型のほうが、コードを修正する際に考慮する影響範囲を狭くできる可能性があります。

こういった関数型の特徴により、関数型には以下のような効果があると期待されています。

  • 並行処理のような、状態変化を伴うと複雑になる処理を簡潔かつ安全に記述できる
  • 各関数の独立性が高いため、テストしやすくなる

Scalaはこの関数型の考え方と、オブジェクト指向の考え方の両方を取り込んだプログラミング言語です。
この特徴のおかげで、Scalaは関数型プログラミングを学習する上で最適な言語になっています。
新しい考え方を学ぶ際には、他の考え方との比較をするのが一番効果があるのですが、Scalaでは言語自体が2つの考え方を取り込んでいるので、常に比較しながら学習していくことができるのです。

Scalaって簡単に試せるの?

Scalaにはインタプリターが標準で装備されているため、 非常にお手軽にプログラミングすることができます。

  • scalaはJVM上で動作します。
    Javaの実行環境(JDK5.0以上)をあらかじめインストールし、動作確認しておきましょう。
  • ダウンロード:
    http://www.scala-lang.org/downloads からzipファイルをダウンロードします。
    現時点での安定版最新はscala-2.7.7.final.zipです。
  • インストール:
    scala-2.7.7.final.zip を適当なディレクトリ内で展開してください。
  • 環境変数PATHの設定:
    scala-2.7.7.final\binディレクトリへのパスを、環境変数PATHに追加してください。

Scalaインタプリターの実行

Scalaインタプリターを実行するには、コマンドプロンプトからscalaコマンドを実行するだけです。

図:Scalaインタプリターの実行

終了はexitと入力します。

次回は

次回はインタプリター上で簡単なプログラムを動かしながら、関数型の考え方を学んでいきます。

参考文献

  • 「Scalaスケーラブルプログラミング[コンセプト&コーディング]」Martin Odersky (著)、Lex Spoon、Bill Venners (著)、羽生田 栄一 (監修)、長尾 高弘 (翻訳)
  • 「Scalaプログラミング入門」デイビッド・ポラック (著)、大塚庸史 (翻訳)
  • 「計算機プログラムの構造と解釈」Gerald Jay Sussman (原著)、Julie Sussman (原著)、Harold Abelson (原著)、和田 英一 (翻訳)