リスト5  Javaのサンプル・プログラム<BR>配列に格納した名前の中から,3文字以下のものを選んで出力するプログラムである。
リスト5 Javaのサンプル・プログラム<BR>配列に格納した名前の中から,3文字以下のものを選んで出力するプログラムである。
[画像のクリックで拡大表示]
リスト6  Rubyのサンプル・プログラム
リスト6 Rubyのサンプル・プログラム
[画像のクリックで拡大表示]

簡潔な表現が可能

 動的言語に共通する特徴として,簡潔な表現が挙げられます。変数や式などのためにいちいち型宣言をしないことが最大の原因ですが,多くの動的言語ではそれ以外にもプログラムを簡潔にするための工夫が行われています。例えばRubyでは,次のような工夫で簡潔なプログラムを可能にしています。

* 宣言が不要

Rubyでは変数宣言がまったく必要ありません。プログラマはコンパイラを満足させるための記述をせず,実行したい処理の本質に集中できます。

* セミコロンなどが不要

改行で文が区切られるため,各文ごとの区切りにセミコロンは不要です。そのほかの点についても,自明な指定は不要になっています。

* for文やブロック

Rubyはオブジェクト要素に対する繰り返しなどを簡潔に記述する文法を持っています。こうした点は,最近になって静的言語にも盛り込まれ始めています。例えばJavaはバージョン5.0 Tigerでforeach文を追加しました。またC#は,ブロック(プログラムをブロック化して受け渡す機能。クロージャとも呼ばれる)に相当する機能を最新版の仕様で取り込んでいます。Anonymous Methodと呼ばれるものです。

* 各種リテラル(文字列,正規表現,リスト,ハッシュなど)

各種オブジェクトをプログラムに直接記述することにより,簡潔に表現できます。

* 動的実行モデル

トップレベルでプログラムを直接実行できるので,コンパイラを納得させるために「public static void main(String [] args)」のような記述をする必要がありません。

* 簡潔なメソッド名

一般にRubyのクラスライブラリが提供するメソッドの名前は,Javaのクラスライブラリが提供するメソッド名よりも簡潔です。例えばJavaで標準出力への文字出力を実行するには「System.out.println」と記述しますが,Rubyでは「puts」です。

 これらの点は,言語が動的であるかどうかとは直接関係はありません。静的な言語でも以上のような特徴を持つことは可能ですし,事実,JavaやC#などは最新のバージョンでいくつかを取り込んできています。ただ,動的言語に簡潔さを追求するものが多いのは事実です。これは言語を設計する段階で,静的と動的どちらを採用するかという設計者のポリシーとかかわっているのかもしれません。

 実例を見てみましょう。リスト5[拡大表示]は,Rubyユ ーザーとして著名なJim Weirich氏が,Javaと動的言語の簡潔さを示すために用意したサンプル・プログラムです。このプログラムと同じ働きをするものを,Rubyで記述してみます(リスト6[拡大表示])。ここまで説明してきた特徴によって,Rubyのプログラムが圧倒的に簡潔になっていることが分かるでしょう。

 プログラムを書くことは,何かコンピュータにやらせたい処理があって,それをコンピュータに理解できる形式で教えてやるということでもあります。頭の中には「やらせたいこと」の漠然としたイメージがあり,それを具体化したものがプログラムであると言い換えてもよいでしょう。このときほとんどの人にとっては,データ型がどうこうとか,アクセスレベル(クラスやメソッドを参照可能な範囲を指定すること)などは「やりたいこと」には含まれていないはずです。動的言語の提供する簡潔さは,人間を,やりたいこと,本当に記述すべきことに集中させてくれます。結果として生産性が高くなることが期待できます。


まつもとゆきひろ Yukihiro Matsumoto/ネットワーク応用通信研究所 主任研究員

1965年生まれ。鳥取県米子市出身。筑波大学第三学群情報学類卒業。高校時代からのプログラミング言語おたく,オブジェクト指向おたく。1993年からオブジェクト指向スクリプト言語Rubyを開発中。古今東西のプログラミング言語の「良いとこ取り」の性質から海外でも人気上昇中。1997年から株式会社ネットワーク応用通信研究所 主任研究員という立場でRubyの開発をメインの仕事としている。メールアドレスはmatz@ruby-lang.org