【Ruby】特異クラスってなに?シンタクスシュガーって?
特異クラスってなに?シンタクスシュガーって?
最近Railsで開発をしているときに、恐らく僕の師匠が書いたであろうコードを見つけた。
class Hogehoge class << self def call(*args) new(*args).call end end end
こんな感じのコードだったんだけど、こんな短いのにまじでわかんなかったw
ああ、これがRailsばっかやってて生のRuby全然やってない負債ってやつかw って思ったら急にやる気(焦り)がでてきて調べてみた。
上のコードは特異クラスっていうやつらしい
特異クラス
クラスメソッドの定義の仕方には大きくわけて2種類
特異メソッド方式
特異クラスによるクラスメソッドの定義例 class Hoge def Hoge.クラスメソッド名1 end def Hoge.クラスメソッド名2 end メソッドを定義するときにメソッド名の前にクラス名を書いて定義する end
特異クラス方式
特異クラスによるクラスメソッドの定義例 class Hoge class << self def クラスメソッド名1 end def クラスメソッド名2 end いくつ定義してもクラスメソッド名の前にクラス名をかかなくていいから便利 end end
クラスメソッドとインスタンスメソッドはなにが違うの?
文系4大卒、プログラマー歴半年未満なのでミリも気にしたことなかったですw
なのでこの際簡単に調べました。奥深くまでは行きません。
クラスメソッド
まあクラスから呼び出せるねん、、、、
そのクラスから作成したインスタンスからそのクラスメソッドは呼び出せないねん、そやねん
インスタンスメソッド
まあクラスから生成したインスタンスから呼び出せるねん、、、、
クラスから作成したインスタンスからそのクラスのクラスメソッドは呼び出せないねん、、、 インスタンスメソッドだけやねん、、、そやねん。
class Hoge # インスタンスメソッドの定義 => いつも書いてるやつ 『hoge』っていうインスタンメソッドを定義 def hoge p "インスタンスメソッド呼び出し成功" end # クラスメソッドの定義 => 上で説明したやつ 『fuga』っていうクラスメソッドを定義 def self.fuga p "クラスメソッド呼び出し成功" end end # インスタンスメソッドの呼び出し Hogeクラスからインスタンスを生成! Hoge.new.hoge 結果:"インスタンスメソッド呼び出し成功" って表示される。呼び出し成功 #インスタンスメソッドの呼び出しに失敗する クラスからインスタンスメソッドは呼び出せませんなあ〜(・8・) begin Hoge.hoge rescue p "インスタンスメソッド呼び出し失敗" end #クラスメソッドの呼び出し Hoge.fuga 結果:"クラスメソッド呼び出し成功" って表示される。呼び出し成功( ・8・ ) #クラスメソッドの呼び出しに失敗する インスタンスからクラスメソッドは呼び出せませんなあ〜(・8・)(・8・)(・8・) begin Hoge.new.fuga rescue p "クラスメソッド呼び出し失敗" end
こんな感じで使い方が違うみたい。
じゃあ、このクラスメソッドとインスタンスメソッドはどう使い分けるの?
という疑問は次回書きます。
次回
クラスメソッドとインスタンスメソッドはどう使い分けるの?
クラスとモジュールってどう使い分けるの?
オブジェクトを「クラス」から作り出すクラスベースのオブジェクト指向とオブジェクトを「オブジェクト」から作り出すインスタンスベースのオブジェクト指向、、、、、????(これは、、、、時間かかるやつだ。)
あ、シンタックスシュガーわすれてたw
シンタックスシュガーとは、『プログラミング言語において、既存の構文などを別の構文や記法で記述できるようにしたもの。 長い構文を簡略に記述できるようにしたり、複雑な構文を見やすくするために用意されることが多い。』
はい。ぐぐったら1番上に出てきました。。。w(・8・)
三項演算子とか配列作るときの『%w』とかもシンタックスシュガーって言われるらしい。
まあ、なんか、簡単にかけるようにしたもんかってくらいの認識でいいかな笑
疲れてのでこのあたりでオシマイにします。
この記事のトピックで良い記事があったら教えてくださいませ。