Computer >> 컴퓨터 >  >> 프로그램 작성 >> Ruby

Ruby의 인스턴스 변수를 이해하려면 이것을 읽으십시오

Ruby 인스턴스 변수, 작동 방식 및 유용한 이유에 대해 배우고 싶다면

올바른 위치에 있습니다!

첫 번째 질문...

인스턴스 변수란 무엇인가요?

Ruby 프로그래밍 언어에서 인스턴스 변수는 @로 시작하는 변수 유형입니다. 기호.

:

@fruit

인스턴스 변수는 객체 지향 프로그래밍(OOP)의 일부로 사용되어 객체에 데이터를 저장할 수 있는 개인 공간을 제공합니다.

객체는 :

  1. 할 일
  2. 알아보기

방법은 일을 일으키고 일을 합니다.

인스턴스 변수는 데이터를 저장하고 알고 있습니다.

:

Fruit이 있는 경우 어떤 종류의 과일인지, 색깔, 무게 등을 알고 싶을 수도 있습니다.

이러한 모든 속성은 인스턴스 변수가 됩니다.

@color 좋아요 , @type , @weight .

다음 :

코드 예제를 살펴보겠습니다.

Ruby 인스턴스 변수 정의 및 사용 방법

클래스 내에서 인스턴스 변수를 정의합니다.

:

CoffeeMachine이 있다고 가정해 보겠습니다. 수업.

커피 머신에는 물이 필요하므로 사용 가능한 물의 양을 알고 싶을 수 있습니다.

할 수 있습니다 :

class CoffeeMachine
  def initialize
    @water = 100
  end
end

@water 우리의 인스턴스 변수입니다.

100 할당 @water로 초기 값으로.

지금 :

make_coffee가 있다면 방법으로 탱크에 남아 있는 물의 양을 줄일 수 있습니다.

class CoffeeMachine
  def initialize
    @water = 100
  end

  def make_coffee
    @water -= 10
  end
end

모든 CoffeeMachine 생성한 개체(new 사용) )에는 @water에 대한 고유한 개인 값이 있습니다. .

이해가 되지 않나요?

실제 커피 머신이 10개 있다면 각각의 수위가 다르기 때문입니다.

이것이 우리가 인스턴스 변수를 사용하는 이유입니다!

인스턴스 변수에 액세스하는 방법

인스턴스 변수는 현재 값을 읽을 수 없다면 별로 유용하지 않을 것입니다.

@로 인스턴스 변수 값을 읽을 수 있습니다. 구문.

좋아요 :

class CoffeeMachine
  def initialize
    @water = 50
  end

  def print_water_level
    puts "Water Level: #{@water}"
  end
end

machine = CoffeeMachine.new
machine.print_water_level

# Water Level: 50

print_water_level 메소드는 @water를 사용합니다. 값을 인쇄합니다.

속성 접근자 사용

외부에서 인스턴스 변수에 액세스할 수 없음을 알 수 있습니다. 수업.

그것은 의도적으로 설계된 것입니다!

다른 Ruby 개체와 마찬가지로 개체의 데이터가 외부 세계로부터 보호되는 "캡슐화"라고 합니다.

제 말은 다음과 같습니다. :

machine = CoffeeMachine.new

machine.water
# NoMethodError: undefined method `water' for #<CoffeeMachine:0x2d0a530>

machine.@water
# SyntaxError: unexpected tIVAR, expecting '('

경우에 따라 이를 허용할 수 있습니다.

외부에서 사용할 수 있도록 개체의 데이터에 대한 창을 열 수 있습니다.

한 가지 방법 :

class CoffeeMachine
  def initialize
    @water = 100
  end

  def water
    @water
  end
end

machine = CoffeeMachine.new
machine.water

# 100

특별한 것은 없습니다.

액세스할 수 있는 내부에서 값을 반환합니다. .

또 다른 옵션은 속성 판독기를 사용하는 것입니다.

:

class CoffeeMachine
  attr_reader :water

  def initialize
    @water = 100
  end
end

machine = CoffeeMachine.new
machine.water

# 100

이전과 동일합니다.

유일한 차이점은 Ruby가 당신을 위해 열심히 일하고 water를 생성한다는 것입니다. 방법.

알아야 할 사항

문제가 발생하지 않도록 인스턴스 변수에 대해 기억해야 할 몇 가지 사항입니다.

메모하기 :

  • 정의되지 않은 인스턴스 변수는 항상 nil을 반환합니다.
  • 인스턴스 변수는 initialize에서 생성할 필요가 없습니다. 방법이지만 이것이 초기 값을 제공하는 방법입니다.
  • instance_variable_get과 같은 인스턴스 변수에 액세스하는 고급 방법이 있습니다. , 하지만 이것들을 피해야 합니다

Btw, 인스턴스 변수 목록을 얻을 수 있습니다.

좋아요 :

machine.instance_variables
# [:@water]

도움이 될 것입니다 🙂

한 가지 더 :

Rails에서 인스턴스 변수(예:@books ), 컨트롤러와 보기 간에 데이터를 공유하는 데 사용됩니다.

하지만 자신의 수업에 대해서는 여전히 정상적으로 사용할 수 있습니다.

요약

Ruby 인스턴스 변수에 대해 배웠습니다! @로 시작하는 일종의 변수 symbol &클래스 내부에서 데이터를 저장할 장소를 제공하는 데 사용됩니다.

지금 연습하는 것을 잊지 말고 코드 예제를 사용하여 자신만의 코드를 만들어 보세요.

읽어주셔서 감사합니다.