連載
» 2015年02月06日 18時00分 UPDATE

若手エンジニア/初心者のためのRuby 2.1入門(13):Rubyで逆ポーランド変換機を作りgem作成&コマンドの使い方 (1/4)

オープンソースのオブジェクト指向プログラミング言語「Ruby」の文法を一から学ぶための入門連載。最新版の2.1に対応しています。連載最終回の今回は、小規模なgemの作成にチャレンジしてみましょう。gem作成の一連の流れを体験するために、逆ポーランド記法による計算機アプリケーションを作ってみましょう。

[著:麻田優真、監修:山根剛司,株式会社アジャイルウェア]

※編集部注

本連載はRuby 2.1プログラミングの入門連載です。Ruby on Railsについて学びたい方は連載「開発現場でちゃんと使えるRails 4入門」をご覧ください。


変幻自在なRubyの面白さを

「若手エンジニア/初心者のためのRuby 2.1入門」のインデックス

連載目次

 連載第12回目に当たる前回の「難しいが強力! Rubyのメタプログラミング、self、特異クラス/メソッド、オープンクラスとモンキーパッチ」では、RubyをRubyたらしめる、メタプログラミングの基本的なトピックについて解説しました。

 少し難しかったかもしれませんが、初心者からステップアップするためには避けては通れない道です。また、クラスメソッドの定義は現場でもしばしば使われるテクニックなので、ぜひ活用してみてください。

 連載最終回の今回は、小規模なgemの作成にチャレンジしてみましょう。gem作成の一連の流れを体験するために、逆ポーランド記法による計算機アプリケーションを作ってみましょう。

Rubyのパッケージ「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 + -」という逆ポーランド記法で書かれた数式を解く手順を以下の図に示します。

ruby13_2.jpg
  1. まず、スタックが空の状態から始まる
  2. 数式から取り出した要素をpush操作でスタックに積む。ここでは数字(5)なので、そのまま次に進む
  3. 次の要素も数字(2)なので、push操作でスタックに積んで次に進む
  4. その次の要素も数字(3)なので、push操作でスタックに積んで次に進む
  5. 次の要素(+)も同様に積む
  6. ここで、一番上の要素が演算子(+)なので、+の下に積まれている2個の要素をpopし、足し合わせたもの(黄緑色)をスタックに積む
  7. 次の要素(-)をスタックに積む
  8. 6と同様、-の下に積まれている2個の要素をpopし、引き算したもの(黄緑色)をスタックに積む。最終的に1個の要素が残り、これが演算結果となる

 このように、逆ポーランド記法で記述された数式は、機械的な手順で解くことができます。

 ここからは、コマンドライン引数に与えられた逆ポーランド記法による数式を解くアプリケーションを作成します。

サンプルコードの入手

 紹介する計算機アプリケーションの完成形のソースコードは、以下の筆者のGitHubのページから入手できます。

 もしGitをお使いであれば、以下のコマンドでリポジトリをクローンできます。もしGitをお使いでなくても、上記のページからzipアーカイブとして入手できます。

$ git clone git@github.com:mozamimy/rpn_calculator.git
       1|2|3|4 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。