ruby始めてみた(1.0+1.0日目)
日曜くらいからrubyを触り始めました。
そもそもなぜ今更rubyを始めたのか。 理由は3つです。
特にやりたいことは決まっていないので、思いついたことをやっていきます。
最初はお馴染みのFizzBuzzをやって、rubyの文法に慣れていこうと思います。
FizzBuzzとは
プレイヤーは円状に座る。最初のプレイヤーは「1」と数字を発言する。次のプレイヤーは直前のプレイヤーの次の数字を発言していく。ただし、3で割り切れる場合は 「Fizz」(Bizz Buzz の場合は 「Bizz」)、5で割り切れる場合は 「Buzz」、両者で割り切れる場合は 「Fizz Buzz」 (Bizz Buzz の場合は 「Bizz Buzz」)を数の代わりに発言しなければならない。発言を間違えた者や、ためらった者は脱落となる。
要件
- 表示について
- 数字の最大値
実装
それでは実装していく
#!/usr/bin/env ruby # encoding: utf-8 class FizzBuzz attr_reader :size def set_max(n) @size = self.get_size(n) end def get_size(n) if n.size == 1 && n[0].to_i != 0 n[0].to_i else 10 end end def puts_fizzbuzz(n) if n % 15 == 0 :FizzBuzz elsif n % 3 == 0 :Fizz elsif n % 5 == 0 :Buzz else n end end def do() index = 1 while index <= @size puts self.puts_fizzbuzz(index) index += 1 end end end fizzbuzz = FizzBuzz.new fizzbuzz.set_max(ARGV) puts fizzbuzz.size fizzbuzz.do
ここで学んだこと
- クラス定義やメソッド定義は実行前に記述する必要がある。
- メソッドの
()
は省略可能。ただし、引数が1つの場合のみみたい。 - セミコロン省略可能。
puts
で出力する。- メソッドの戻り値は最後に評価された値が返る。
- インスタンス変数は
@~
。 - attr_readerに指定されたシンボルからインスタンス変数にアクセスできる。
- クラスの初期化は
new
メソッド。 - シンボル文字列は1対1で対応するオブジェクト。そのまま呼び出せば文字列が返ってくる。
こんなところです。
処理に冗長なところもありますが、今はこれでおけ。
次はRspecを利用してユニットテストを書いてみようと思います。
もし、参考になる書籍やWebページありましたら教えていただけると幸いです。
参考
- オブジェクト指向スクリプト言語 Ruby リファレンスマニュアル
- [初心者向け] RubyやRailsでリファクタリングに使えそうなイディオムとか便利メソッドとか
- コーディング規約をまとめてみた (Ruby編)
環境構築はこちらを見ました