クラスがポケモンでわかる?
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スターミー.なみのり (メソッド)
とすると なみのり が発動するわけですね
なんか面倒で画像とかなく作ってしまいましたが少しでも参考になれば幸いです
コメント
コメントを投稿