Ruby :セルフ


私はFlatiron学校の仲間SE学生で、私のコーディング旅行をブログにすることに決めました.私は好奇心の強いレベルを学ぶ初心者プログラマであり、常に任意の建設的な批判を歓迎します.と言いましょう-私はトレーニングの赤ちゃんヨダ、絶え間なく私のジェダイの考え方を開発しています.

過去3週間、私は変数とメソッドからデータ構造にRuby手続きプログラミングの概念に没頭している.オブジェクト指向プログラミング(oop)を用いた.週間、私は@ @@とselfの使用を把握するのに苦労していました.IRB INGの数え切れないほどの時間の後、私は現在、クラスを構築し、@ @@とself - in - object関係を実装するのがより快適です.
さて、クラスは基本的に青写真や工場です.共有属性と行動を持つ出生例.私は、私の考えをNurseriesの私の側の関心の延長として繰り返すために、植物を使っています.
class Plant 
   def name=(name)
      @name = name
   end

   def name
      @name
   end
end 

cactus = Plant.new("Cactus")
cactus.name = "Cactus"
これは基本的なリーダーとゲッターメソッドを持つ私の予備クラスのスコープです.「カクタス」は植物のクラスのインスタンスです.
@と@は何ですか?
@はインスタンス変数で、@はクラス変数です.彼らはインスタンスとクラスメソッドを介して横断できる.私はこれをローカル変数のアップグレード版と呼びます.工場のクラスを整えましょう.
class Plant 
   @@all = []

   def name=(name)
      @name = name
   end

   def name
      @name
   end

   def save 
      @@all << self 
   end 

   def self.all 
      @@all 
   end 

   def self.chatty_plant
      self.all.each do |plant|
         puts "I am #{@name}. Water me please!"
      end 
   end  
end 
Rubyクラスへの以前のアプローチでは、単にインスタンスインスタンスとクラスメソッドで@ instanceHeight変数と@ classclass変数を参照します.彼らは働いて、私は試験に合格した.私はより複雑なスキームを介して進行したように、この精神モデリングのアプローチは、より直感的になった.私たちが@ @ classingvariableへ@ classingvariableに名前を変えるならば、どうですか?私たちは、すべてのシングル@ classHeight変数の名前を変更する必要があります.@ instanceound変数として@ instancechen変数をスペルミスしたらどうですか?ルビーは、この間違いを捕まえるのを助けますか?
自己の上昇
これは私たちが自己を利用し、ルビークラスをより直感的に構築するときであると信じています.@ @@を参照することは、リテラルなアプローチであり、自己を利用することによって、我々のオブジェクトは本質的に動くことができます.selfはmain関数を指します.インスタンスメソッドでは、selfはインスタンス自体を参照し、クラスメソッドではselfはクラスそのものを参照します.下の最初の代替アプローチを見てみましょう.
   def save 
      @@all << self 
   end 
   def save 
      self.class.all << self 
   end 
私達はrefactor @ allを自己にすることができます.クラス.すべて.
すべてのすべての
植物クラスのすべて
自己クラス.すべてのすべて
なぜ我々は自己を使用しています.クラス.すべて@ @ allの代わりに?
私たちのコードが徐々に複雑になるにつれて、インスタンスやクラスメソッドを復活させ、再評価するのは賢明です.自己利用.クラス.すべてのクラス変数の名前を変更するときに、可能なエラー構文を回避します.
   def self.chatty_plant
      self.all.each do |plant|
         puts "I am #{@name}. Water me please!"
      end 
   end  
   def self.chatty_plant
      all.each do |plant|
         puts "I am #{name}. Water me please!"
      end 
   end  
自己に自己を必要とするか.すべて.それぞれ行う?
自己chattylose植物は、クラスメソッドと自己です.すべてもクラスメソッドです.私たちは自分で自己を省略することができます.すべて.各DO.Rubyはこのクラスメソッドの暗黙の受信機としてselfを理解します.
○○○○○
もし、私たちが誤って`` NAME }をタイプしたなら、Rubyは存在しないインスタンス変数@ NAMEを探します.
#=> I am  . Water me please!
Rubyのより良いアプローチは、インスタンスメソッドを呼び出すことです.もし、私たちがChunHi { NAME }の代わりに、Chrung - naNaameのようなタイプミスを持っているなら、Rubyはエラーをナビゲートするのを助けます.
#=> NameError (undefined local variable or method 'naame'..)
我々のコードがRuby実装でより複雑な属性と行動を得るので、この自己メンタルモデリングはより良いデザインアプローチを許します.
class Plant 
   @@all = []

   def name=(name)
      @name = name
   end

   def name
      @name
   end

   def save 
      self.class.all << self 
   end 

   def self.all 
      @@all 
   end 

   def self.chatty_plant
      all.each do |plant|
         puts "I am #{name}. Water me please!"
      end 
   end  
end 
静けさを保ち続ける.
fentybit