1
0

More than 1 year has passed since last update.

Rubyの大クラス主義について解説してみた

Last updated at Posted at 2022-03-12

Rubyを勉強していったら、「Rubyには大クラス主義というものがあるんだよ」というのを聞いて、自分はよくわからなかったので調べてみてわかったことを記事にしようとおもいます。

大クラス主義

例えば、配列を表すクラスにArrayクラスというものがRubyにあります。そしてArrayクラスにはpopメソッドやunshiftメソッドがあります。
ここから分かることはArrayクラスにはキューやスタックとしても使えるんです。
自分はJava等の言語を触ったことはないのですが、JavaではQueueクラスやStackクラスとそれぞれ分かれているみたいです。
他にもeachメソッドがありますが、JavaではIteratorクラスが用意されていて、それぞれが処理するみたいです。

このようにRubyのArrayクラスでは、Arrayクラスでは担う役割が大きいんですね。そのことを大クラス主義といいます。

※キューやスタックについてよく分からない方は以下の記事を参照にしてみてください

「Javaのようにそれぞれ役割がクラスごとに分かれていたほうが、バグが起こりにくいんじゃない?Rubyってもしかして微妙?」とおもわれるかもしれませんが、そこにはダックタイピングというものが深くかかわっています。

ダックタイピング

ダックタイピングとは、

"If it walks like a duck and quacks like a duck, it must be a duck"
(もしもそれがアヒルのように歩き、アヒルのように鳴くのなら、それはアヒルである)

このように説明されています。文章でいわれてもよく分からないとおもいますので、実際にコードをみていきましょう。

class Human
  def say; p "おはよう!"; end
end

class Dog
  def say; p "ワン!"; end
end

def greeting(animal)
  puts animal.say
end

greeting(Human.new)
greeting(Dog.new)

上記のコードで注目すべきなのは、greetingメソッドの引数であるanimalがsayメソッドを参照できることを期待しているんですね。そしてsayメソッドが参照できるのなら、レシーバであるオブジェクトは何でも良い、ということなんです。
これが「もしもそれがアヒルのように歩き、アヒルのように鳴くのなら、それはアヒルである」という言葉の意味なんです。

ダックタイピングが使えそうな例

ある清掃会社があって、清掃員は床をぴかぴかにし、マネージャーはキレイになっているかをチェックする仕事をしています。
その際にこのように書くことで、スッキリ書くことができます。

class Staff
  def kiai
    p 'きれいにするよ!'
  end
end

class Manager
  def kiai
    p 'チェックするよ!'
  end
end

def work(person)
  p person.kiai
end

work(Staff.new)
work(Manager.new)

以上です。
何か間違いがございましたら、ご教示いただけますと幸いです。

【参考資料】

1
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0