rubyっぽい書き方

人間クラス?なんじゃそりゃ

rubyっぽい書き方ってのがどんなんか?という定義はさておき、俺自身がぽいなぁと思う書き方とその発想法を紹介。っていうかクラスの書き方って言ったほうが正しいかね?

rubyってのはそりゃあもうオブジェクト指向なわけですわ。しかもクラスベースのオブジェクトを作るもんなんですその辺りはJAVAといっしょ。JAVAの入門書とかでもクラスの書き方で

class Cook extends Human{
}

とかなってたりruby流だと

class Cook < Human
  あれやこれや
end

てなってるわけ。でもその説明が人間クラスを作ってそれを継承してコックさんクラスを作って…とかなってて意味わかんね〜〜っての!!となった人も多いんじゃないでしょうか?俺はなった。もうさっぱりやったね。そんな俺にある日ブレイクスルーをもたらした方法が以下の通り。

クラスを作る時はまずインスタンス変数を列挙する。

クラスというのは小さなプログラムだと考えるとちょっとオブジェクト指向が見えてくるんよね。コックさんクラスとかそういうので行くとまたわけわからなくなるからなんでもいいけど例えばmp3プレイヤーみたいなのを作りたいとすると。

class MP3Player
end

とまずなる。んで次にMP3プレイヤーが持ってそうなデータを考えるわけ。MP3プレイヤーやねんから当然鳴らしてる音楽のデータがないとアカンやろ。ってわけで

class MP3Player
   @mp3_file
end

って感じで書いてみる。するといつそれをセットするんだ?とかそれを鳴らさないといけないよなぁ…とか思えてこないだろうか?そんで

class MP3Player
  def initialize(path)
    @mp3_file = path
  end

  def play
    鳴らすための処理
  end
end

みたいになる。こんな感じでget_mp3メソッドを作ってみたり@next_songを加えてみたりするとそれなりにMP3Playerっぽいものができます。
そうしてできたやつを

class MP3Player
  def initialize(path)
    @mp3_file = path
  end
  
  def play
    鳴らすための処理
  end
end

if $0 == __FILE__
  MP3Player.new.play
end

みたいにして呼び出せばなんとなくrubyっぽくありません?