ruby始めてみた(1.0+1.0日目)

日曜くらいからrubyを触り始めました。

そもそもなぜ今更rubyを始めたのか。 理由は3つです。

  1. スクリプト言語をちゃんと学びたかった。
  2. インフラ周りのツールrubyで書かれてることが多い。(chefとか)
  3. かなり前から流行ってるじゃん?

特にやりたいことは決まっていないので、思いついたことをやっていきます。

最初はお馴染みのFizzBuzzをやって、rubyの文法に慣れていこうと思います。

FizzBuzzとは

プレイヤーは円状に座る。最初のプレイヤーは「1」と数字を発言する。次のプレイヤーは直前のプレイヤーの次の数字を発言していく。ただし、3で割り切れる場合は 「Fizz」(Bizz Buzz の場合は 「Bizz」)、5で割り切れる場合は 「Buzz」、両者で割り切れる場合は 「Fizz Buzz」 (Bizz Buzz の場合は 「Bizz Buzz」)を数の代わりに発言しなければならない。発言を間違えた者や、ためらった者は脱落となる。

Wikiから

要件

  • 表示について
    • 3で割り切れる時は"Fizz"を表示する
    • 5で割り切れる時は"Buzz"を表示する
    • 3と5で割り切れる時は"FizzBuzz"を表示する
    • それ以外の時は数字を表示する
  • 数字の最大値

実装

それでは実装していく

#!/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ページありましたら教えていただけると幸いです。

参考

環境構築はこちらを見ました