루비: 본인

저는 Flatiron School의 동료 SE 학생이며 제 코딩 여정을 블로그에 게시하기로 결정했습니다. 저는 배우고자 하는 호기심이 강한 초보 프로그래머이며 건설적인 비판은 언제나 환영합니다. 예를 들어, 나는 훈련 중인 아기 요다이고 끊임없이 제다이 사고방식을 발전시키고 있습니다.



지난 3주 동안 저는 변수와 메소드에서 데이터 구조에 이르기까지 Ruby 절차적 프로그래밍 개념에 몰두했습니다. 객체지향 프로그래밍(OOP)을 진행했습니다. 일주일 내내 나는 @, @@, 자기 자신의 용법을 이해하기 위해 고군분투했습니다. 셀 수 없이 많은 시간을 조사한 후, 이제 객체 관계에서 클래스를 구성하고 @, @@ 및 self를 구현하는 것이 더 편해졌습니다.

좋아, 우리는 클래스가 본질적으로 청사진 또는 공장이라는 것을 이해합니다. 속성과 동작을 공유하는 인스턴스를 생성합니다. 나는 보육원에 대한 나의 부차적 관심의 연장선으로 내 생각을 반복하기 위해 식물을 사용할 것입니다.

class Plant 
   def name=(name)
      @name = name
   end

   def name
      @name
   end
end 

cactus = Plant.new("Cactus")
cactus.name = "Cactus"


이것은 기본 판독기 및 getter 메서드가 있는 예비 클래스 범위입니다. "Cactus"는 Plant 클래스의 인스턴스입니다.

@와 @@가 무엇인가요?
@는 인스턴스 변수이고 @@는 클래스 변수입니다. 인스턴스 및 클래스 메서드를 통과할 수 있습니다. 이것을 로컬 변수의 업그레이드 버전이라고 합니다. Plant 클래스를 수정해 보겠습니다.

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 클래스에 대한 이전 접근 방식에서는 단순히 인스턴스 및 클래스 메서드에서 @instance_variable 및 @@class_variable을 참조했습니다. 그들은 일했고 나는 시험에 합격했습니다. 더 복잡한 계획을 진행함에 따라 이 정신적 모델링 접근 방식은 덜 직관적이 되었습니다. @@class_variable의 이름을 @@something_else로 바꾸면 어떻게 될까요? 모든 @@class_variable의 이름을 바꿔야 합니다. @instance_variable을 @instance_varyable로 잘못 입력하면 어떻게 됩니까? Ruby가 이 실수를 잡는 데 도움이 될까요?

자아의 상승
나는 이것이 우리가 self를 활용하고 Ruby 클래스를 보다 직관적으로 구성해야 할 때라고 생각합니다. @ 및 @@를 참조하는 것은 문자 그대로의 접근 방식이며 self를 사용하면 개체가 고유하게 작동할 수 있습니다. Self는 프로그램이 작동하는 main 또는 자체를 나타냅니다. 인스턴스 메소드에서 self는 인스턴스 자체를 참조하고 클래스 메소드에서 self는 클래스 자체를 참조합니다. 아래의 첫 번째 대체 접근 방식을 살펴보겠습니다.

   def save 
      @@all << self 
   end 



   def save 
      self.class.all << self 
   end 


@@all을 self.class.all로 리팩토링할 수 있습니다.
@@모두 == @@모두
Plant.class == @@모두
self.class.all == @@모두

@@all 대신 self.class.all을 사용하는 이유는 무엇입니까?
코드가 점차 복잡해짐에 따라 인스턴스 또는 클래스 메서드를 구체화하고 리팩터링하는 것이 좋습니다. self.class.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  


self.all.each do에 self가 필요한가요?
self.chatty_plant는 클래스 메서드이고, self.all도 클래스 메서드입니다. self.all.each do에서 self를 생략할 수 있습니다. Ruby는 이 클래스 메서드에서 self를 암시적 수신자로 이해합니다.

#{@이름} 대 #{이름}
#{@naame}을 잘못 입력하면 Ruby는 존재하지 않는 인스턴스 변수 @naame을 찾습니다.

#=> I am  . Water me please!


Ruby에서 더 나은 접근 방식은 인스턴스 메서드를 호출하는 것입니다. #{name} 대신 #{naame}과 같은 오타가 있으면 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 | GitHub | |

좋은 웹페이지 즐겨찾기