masarumasuのブログ

現役文系大学生プログラマー。使用言語はJavaとRuby。意識高いことから低いことまでいろいろ書きます。

Rubyの神メソッド

masarumasuです。

先ほどのAtCoderでのコンテストで一番簡単だった問題があります。

abc050.contest.atcoder.jp

「問題文

joisinoお姉ちゃんは、A op B という式の値を計算したいと思っています。 ここで、A,B は整数で、op は、+ または - の記号です。 あなたの仕事は、joisinoお姉ちゃんの代わりにこれを求めるプログラムを作ることです。」

AtCoderより引用。

入力される値を計算して出力するだけの問題です。この手の問題は過去にもやったことがあり、これは解けました。

一般的な解法としては

opの部分が+か-かif文で判定し、判定結果に応じた計算をするという解法であります。

 

実際に私の回答は

  1. a,n,b=gets.chomp.split
  2. a=a.to_i
  3. b=b.to_i
  4. if n=="+"
  5. puts a+b
  6. else
  7. puts a-b
  8. end

となっております。

しかし、Rubyはいつも常識の先を行きます。

AtCoderではコンテストの終了後、他の参加者の回答を見ることが出来るのですが、Rubyでは驚異的な短さのコードを見ました。

p eval gets

これで終わりです。

一行です。

3語です。

英語で言う

I have a pen.的なノリです。(てかI have a pen.の方が長い。)

これを見て感動を覚えました。Rubyよ。お前は神か。

そんな神言語Rubyのさらに神ってる部分がevalメソッドです。これは入力された文字列をそのまま処理として実行してしまうという神メソッドです。今回の場合は文字列として入力された計算式、例えば1+7をそのまま数式として処理し、答えの8を出力することが出来ます。こんな訳でRuby開始12日目でありますが、Rubyへの信仰がさらに深まりました。