オープンソースのオブジェクト指向プログラミング言語「Ruby」の文法を一から学ぶための入門連載。最新版の2.1に対応しています。連載最終回の今回は、小規模なgemの作成にチャレンジしてみましょう。gem作成の一連の流れを体験するために、逆ポーランド記法による計算機アプリケーションを作ってみましょう。
連載第12回目に当たる前回の「難しいが強力! Rubyのメタプログラミング、self、特異クラス/メソッド、オープンクラスとモンキーパッチ」では、RubyをRubyたらしめる、メタプログラミングの基本的なトピックについて解説しました。
少し難しかったかもしれませんが、初心者からステップアップするためには避けては通れない道です。また、クラスメソッドの定義は現場でもしばしば使われるテクニックなので、ぜひ活用してみてください。
連載最終回の今回は、小規模なgemの作成にチャレンジしてみましょう。gem作成の一連の流れを体験するために、逆ポーランド記法による計算機アプリケーションを作ってみましょう。
gemとはRubyで使えるライブラリや、Ruby製のソフトウェアをパッケージ化したものです。gemコマンドで簡単にライブラリをインストールしたり、依存関係のあるモジュールを制御したりすることができます(連載第2回で、pryをインストールするときにも使いましたね)。
作成したgemは「RubyGems.org」にアップロードして配布できます。Rubyでは定番のWebフレームワークである、Ruby on RailsもRubyGems.orgから導入できます。
通常はgemコマンドのソースがRubyGems.orgに設定されているので、「gem install pry」のようなインストールコマンドを実行すると、RubyGems.orgからgemパッケージを取得してインストールが行われます。
「逆ポーランド記法」とは、数式を表記するための記法の一つです。
通常、私たちは数式を記述するとき、「中置記法」を使います。中置記法とは、演算子を真ん中に置き、被演算子を左右に配置するような書き方です。簡単な例を示しましょう。
12 + 30
簡単ですね。ここでは演算子である「+」(プラス)が、被演算子(12と30)の間にはさまれて、12と30という値の加算を表現しています。
逆ポーランド記法では、被演算子を先に書き、続けて演算子を書きます。演算子が被演算子の後にくるので、逆ポーランド記法は「後置記法」とも呼ばれます。上述の例の逆ポーランド記法版を示しましょう。
12 30 +
まず、被演算子(12と30)が先に来て、その後演算子である「+」(プラス)が出現しています。
もう少し複雑な例を見てみましょう。
5 2 3 + -
これは、中置記法で書けばこのような演算になります。
5 - (2 + 3)
逆ポーランド記法計算機は、プログラミングの練習問題としてよく取り上げられます。これは、中置記法で書かれた数式をパースして演算するよりも、「スタック」というデータ構造を用いることで簡単に実装できるからです。
スタックとは、いわゆる後入れ先出しのデータ構造で、基本的なデータ構造の一つです。スタックに対する基本的な操作として、データを入れるための「push」とデータを取り出すための「pop」があります。pushによって下から上に向かってデータを積み上げ、popによって一番上のデータを取り去るイメージです。
では、スタックを使って、「5 2 3 + -」という逆ポーランド記法で書かれた数式を解く手順を以下の図に示します。
このように、逆ポーランド記法で記述された数式は、機械的な手順で解くことができます。
ここからは、コマンドライン引数に与えられた逆ポーランド記法による数式を解くアプリケーションを作成します。
紹介する計算機アプリケーションの完成形のソースコードは、以下の筆者のGitHubのページから入手できます。
もしGitをお使いであれば、以下のコマンドでリポジトリをクローンできます。もしGitをお使いでなくても、上記のページからzipアーカイブとして入手できます。
$ git clone git@github.com:mozamimy/rpn_calculator.git
Copyright © ITmedia, Inc. All Rights Reserved.