まつもとゆきひろのプログラミング言語論(3)動的言語礼賛
出典:日経バイト2006年1月号
99ページより
(記事は執筆時の情報に基づいており、現在では異なる場合があります) 簡潔な表現が可能動的言語に共通する特徴として,簡潔な表現が挙げられます。変数や式などのためにいちいち型宣言をしないことが最大の原因ですが,多くの動的言語ではそれ以外にもプログラムを簡潔にするための工夫が行われています。例えば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のプログラムが圧倒的に簡潔になっていることが分かるでしょう。 プログラムを書くことは,何かコンピュータにやらせたい処理があって,それをコンピュータに理解できる形式で教えてやるということでもあります。頭の中には「やらせたいこと」の漠然としたイメージがあり,それを具体化したものがプログラムであると言い換えてもよいでしょう。このときほとんどの人にとっては,データ型がどうこうとか,アクセスレベル(クラスやメソッドを参照可能な範囲を指定すること)などは「やりたいこと」には含まれていないはずです。動的言語の提供する簡潔さは,人間を,やりたいこと,本当に記述すべきことに集中させてくれます。結果として生産性が高くなることが期待できます。
連載新着連載目次へ >>
|