ライブラリを書く
Rubyでライブラリの勉強をしています。ライブラリとはプログラムの再利用。自分用のライブラリを作ることは大事なことだそうです。ただし、共有する際には周知をすること。変数が同じになって動作がおかしくなってしまうなど、トラブルに注意すること。他人が使いやすいプログラムにすること。(センスが物を言うらしい)
今日は少し前にかいた鶴亀算のプログラムをライブラリにしようと思います。鶴亀算といっても、その中で使っている数字を読み込む関数をライブラリにします。
まずは、鶴亀算のプログラム名を変更してread-integer.rbとします。これをライブラリとして使うプログラムsumdigits.rbを作ります。sumdigits.rbを実行すると以下のようになります。
頭の数は? 4 脚の数は? 8 翼の数は? 0 その組み合わせはできません ============ ↑鶴亀算のプログラムが動いている ================= ============ ↓sumdigits.rbが動いている ================= 思いついた整数を入力してくださいの数は? 333 すべての桁の合計は9です
ライブラリを読み込み、sumdigits.rbを実行します。ライブラリは名前を変えただけなので、鶴亀算を行うプログラムが動いています。
つぎは、数字を読み込むライブラリになるように編集していきます。
↓編集後のread-integer.rb
def read_integer(msg) while true puts(msg) s = gets().chomp if s.size == 0 puts("空ウチはできません") next end digit = true s.each_char() do |c| if !"01423456789".include?(c) digit = false puts("数字以外の文字が含まれています。") break end end if digit return Integer(s) end end end
↓実行結果
思いついた整数を入力してください 33 すべての桁の合計は9です
「if !条件式」の代わりに「unless 条件式」がある。こちらのほうが読み間違いがすくないので、優先して使うべきらしい。ただし、elseを使う必要があるなら、「unless else」でなく「if else」を使うこと。
Rubyの勉強をしていて、最近コードを読むのが難しかったり、解らなくて書けない事が多くなってきた。なんで、こうなるのか考えてみたのだけど、私には「もしXXになった場合」という考えができていないのでは?
read-integer.rbの例だと最後の「if digit」を思いつかなかった。つまり、もし値が正しくない(数値ではない)場合をおもいつかなかった。
この対策は・・・また考える。。。