クラスがポケモンでわかる?


Rubyでクラスについて学んでとても納得できたので紹介させてもらいたいと思います!
多分別の言語でも役に立つかもしれません



そもそもクラスとは?

→たい焼きの型などに例えられてインスタンスという塊を作るための設計図


ぼやっとしたイメージですよねw
私もそんなもんなんだって思ってました

しかしクラスをメソッドなど別の観点から学ぶことでわかるようになりました!!

参考にプロゲートで紹介されたクラス

class Menu
  attr_accessor  :name
  attr_accessor  :price
  
  def  show
      puts  "私はメニューです"
  end
end

となってます nameとpriceを定義できてshow というメソッド(関数)が使えるという設計書ですね


クラス = 型(タイプみたいなもの)

クラスを学ぶときはクラスの名前とかクラスを作成するところから学びますが
実際考えてほしいのは別のこと!!


Rubyでは標準で Stringクラス という文字列のクラスがあります

例えば name = "Tarou"  という name に Tarou を代入しますよね

ここでちょっと待って〜って言いたいわけですよ

pryもしくはirb というRubyの機能で確認してほしいのですが
〜〜.class  という波線部分に.class をつけることでクラスを調べることができます


代入する前のname だけを name.class で調べると
NameError: undefined local variable or method `name' for main:Object
見つからないというネームエラーになります

"Tarou".class を実行すると → String と文字列クラスだとわかります

Stringクラスにはメソッド(関数)がすでに作られていて

print name.upcase  と name を upcaseというメソッドを使ったものを出力させると
→ TAROU
と全部大文字になって出力されます

イメージとしては

class  String
  attr_accessor  :アルファベット

  def  upcase
     文字を大文字にする処理
  end
end

こんな感じですね
.upcase 関数を考えてみてほしいのですが
小文字を大文字に変えられるって文字しかできないと思いませんか?

文字って足せませんよね?
例えば pring "A"+"B" は AB と出力されますし
              print  "12" + "23"  は  1223 と出力されます

では足せるものは?

Rubyにはもっと標準でたくさんのクラスがあります
Integerクラス 整数クラスがあります

たとえば
 x = 1 ,  y=5  と代入して
 print x + y   を出力すると 6 と出力されます
" が数値についてないので文字とは別で 数値として認識されてます

でも  .to_s  というメソッド(関数)があります これは文字へ変換されるもので

  x = 1 ,  y=5 と同じく数値で代入
しかし出力させるときは
  print  x.to_s  +  y.to_s   と .to_sメソッド使って出力させると 15 と文字として出力されます

.to_sメソッドは文字へ変換させるメソッドなのです


仮に a = "1" ,  b =  "3"   と文字として代入し
      print  a.to_i  +  b.to_i   と .to_i  メソッドで出力させると  4  と数値の計算として出力されます

.to_i メソッドは数値へ変換させるメソッドなので4と出力されるわけですね

でもこれも文字が数値に変換できるって限られたパターンだと思いませんか?


クラス(タイプ)で使えるメソッド(関数)が限られている
? ポケモンに似ている?  が私の感想でした


例えば みずタイプなら みずでっぽう など 水の技
    くさタイプなら はっぱカッター など くさの技

しかし みずタイプでも こおりタイプの技を覚えたりできますよね?

 スターミーが良い例で なみのり じゅうまんぼると サイコキネンシス れいとうビーム
4つも別のタイプの技を使えるようになれます

そうゆう特例を作るのがクラスを作るメリットだと思いました


最初のを再掲します

class Menu
  attr_accessor  :name
  attr_accessor  :price

  def  show
      puts  "私はメニューです"
  end
end


これをスターミーという自分が作成したクラスに見立てると こんなスターミークラスができて

class スターミー
  attr_accessor :レベル

  def なみのり
  end

  def じゅうまんぼると
  end

  def サイコキネンシス
  end

  def れいとうビーム
  end
end

スターミークラスからスターミーをつくると

myスターミー = スターミー.new(レベル100)

 myスターミーというレベル100のスターミーができます (インスタンスという塊)

myスターミー.なみのり (メソッド)


 とすると なみのり が発動するわけですね


なんか面倒で画像とかなく作ってしまいましたが少しでも参考になれば幸いです

コメント

人気の投稿