9章 メソッドの作り方に入らば愈々其のタイトル通り、 自由自在にメソッドを作成するに至るは、 扠ではメソッドなるは何者と問えば、 当ブログでは素通りの本書第6章冒頭35頁にあるを引用するに
9.1 メソッド引数
9.2 局所変数
9.3 返り値
9.4 練習問題
メソッドの技術的な定義は「 何かを行うもの 」です。オブジェクトをRubyの名詞とするなら、メソッドは動詞のようなものです。と実に的確な比喩を以てメソッドなるものに付き説明されています。
然らば、当章ににてはメソッドの作成とは即ち、 当世流布し切った感のある検索エンジンの雄Googleから派生の「 ぐぐる 」抔が如くの造語に当たるのかも知れません。
引数、ローカル変数、及び返り値と順序立てる説明の後、 提示される練習問題は アラビア数字を引数として、ローマ数字を返り値とせよ と云うものにて、此処にヒントとして与えられるのが次の引用なれば
整数の割り算と余り演算子を使います。また参考のため、ローマ数字で使われる文字を挙げておきます。即ち roman_numeral 4 に対し、 IIII が返されるを想定するのが先ずは問題の前半なる 古いローマ数字 が課題に、今回は此方への当方の解答例を贄に供したいと思います。
I=1 V=5 X=10 L=50 C=100 D=500 M=1000
スポンサーリンク
def old_roman_numeral num
m_num = num / 1000
d_num = (num % 1000) / 500
c_num = (num % 500) / 100
l_num = (num % 100) / 50
x_num = (num % 50) / 10
v_num = (num % 10) / 5
i_num = num % 5
show_num = (´M´*m_num)
+(´D´*d_num)
+(´C´*c_num)
+(´L´*l_num)
+(´X´*x_num)
+(´V´*v_num)
+(´I´*i_num)
end
puts ´1~3000迄の数字を入力してください。´
puts ´入力された数字をローマ数字に変換します。´
ip_num = gets.chomp.to_i
puts old_roman_numeral(ip_num)
を記述するにあたり、紹介書籍の指示に従い
numを引数としたメソッド
old_roman_numeral
を作成し、返り値は明示されていない為、第83頁の引用
m_num = num / 1000
d_num = (num % 1000) / 500
c_num = (num % 500) / 100
l_num = (num % 100) / 50
x_num = (num % 50) / 10
v_num = (num % 10) / 5
i_num = num % 5
show_num = (´M´*m_num)
+(´D´*d_num)
+(´C´*c_num)
+(´L´*l_num)
+(´X´*x_num)
+(´V´*v_num)
+(´I´*i_num)
end
puts ´1~3000迄の数字を入力してください。´
puts ´入力された数字をローマ数字に変換します。´
ip_num = gets.chomp.to_i
puts old_roman_numeral(ip_num)
「最後に評価した式」と言ったことに注意して下さい。 単純に「最後の行」とか「最後の式」ではなくです。 最後の行に式の全体が入らないこともあり得ます (ifの式の最後のendの様に)。 それに、メソッドが明示的な return を持つときには、最後の式が評価されないということもあり得ます。に記されるが如く、最後に評価した式を show_num = ~ 表示する様になっているかと思います。
以上の3プログラムを、現在の手元環境
ruby 1.8.6 (2007-03-13 patchlevel 0) [i386-mswin32]
で走らせて得られる結果は、先ずは所与の4に於いては
C:¥tsukamotch¥Ruby¥programs
>ruby old_roman_numeral.rb
1~3000迄の数字を入力してください。
入力された数字をローマ数字に変換します。
4
IIII
と、取敢えずは想定した儘の結果
IIII
を得られ、また限界値3000でも
>ruby old_roman_numeral.rb
1~3000迄の数字を入力してください。
入力された数字をローマ数字に変換します。
4
IIII
C:¥tsukamotch¥Ruby¥programs
>ruby old_roman_numeral.rb
1~3000迄の数字を入力してください。
入力された数字をローマ数字に変換します。
3000
MMM
任意の数字1289でも
>ruby old_roman_numeral.rb
1~3000迄の数字を入力してください。
入力された数字をローマ数字に変換します。
3000
MMM
C:¥tsukamotch¥Ruby¥programs
>ruby old_roman_numeral.rb
1~3000迄の数字を入力してください。
入力された数字をローマ数字に変換します。
1289
MCCLXXXVIIII
の様に想定の結果が得られる様です。
>ruby old_roman_numeral.rb
1~3000迄の数字を入力してください。
入力された数字をローマ数字に変換します。
1289
MCCLXXXVIIII
当章練習問題の後半なる 「新しい」ローマ数字 については次回アーティクルに譲り度思います。
メソッドの作り方(「新しい」ローマ数字)於Ruby
初めてのプログラミング実に有効なると思われるRuby及びプログラミングの入門書初めてのプログラミングの各章の最後に位置付けられる練習問題にて正解の掲載されぬに幾許か不安を感じるも在りや無しや、本誌愛読ご同志に捧ぐ、当ブログに於いては参照、比較検討用に生贄的に