RGSS2 강좌
2. 변수와 상수 |
1. 변수는 |
|
변수는 값 (객체)에 붙여진 이름 같은 것입니다.
이렇게 이름을 붙이는 것으로, 변수에서 객체를 참조 할 수 있습니다.
참조라는 것은 데이터 자체가 아니라 개체가있는 장소 나 식별 번호를 의미합니다.
그리고 그 오브젝트를 취득하는 것을 볼라고합니다.
변수는 4 종류가 프리픽스 (접두사)에 의한 자구 규칙이 있습니다.
또한 초기화되지 않은 상태에서도 사용할 수 있고 그 때의 값은 nil입니다.
|
|
|
2. 로컬 변수 |
|
아마도 가장 많이 사용되는 변수라고 생각합니다.
이 변수는 가장 단명으로 할당 된 장소에서만 사용할 수 있습니다.
초기화되지 않은 때의 값은 nil하지만, 초기화되지 않은 변수는 메소드와 구별 할 수 없기 때문 NameError가 발생합니다.
대입식이 있으면, 비록 실행되지 않아도 변수 판별됩니다.
var = 1 if false # 실행되지 않는다
def method
var
end
p var # => nil
p method # => ERROR
|
|
|
3. 인스턴스 변수 |
|
앞에 @가 붙은 변수는 인스턴스에서 액세스 할 수 있습니다.
이 변수는 개체마다 다른 값을 유지합니다.
class Hoge
attr_accessor : value
def initialize
@value = 0
end
end
h1 = Hoge.new
h2 = Hoge.new
p h1.value, h2.value # => 0 0
h1.value = 3
p h1.value, h2.value # => 3 0
또한 클래스의 인스턴스 생성하여
클래스 인스턴스 변수로 할 수 있습니다.
인스턴스 변수 라기보다는 클래스 변수에 가깝습니다.
클래스 변수와의 차이는 상속 된 없다는 것입니다.
class A
@a = 1
@@ b = 3
def self.a
@a
end
def self.b
@@ b
end
end
class B <A
end
p Aa, Ba # => 1, nil
p Ab, Bb # => 3 세
클래스 인스턴스 변수는 클래스 메소드를 정의하고 액세스하십시오.
|
|
|
4. 클래스 변수 |
|
앞에 @@가 붙은 변수는 클래스마다 값이 유지됩니다.
또한이 변수는 서브 클래스에 상속됩니다.
class A
@@ value = 0
def initialize
@@ value + = 1
end
def value
@@ value
end
end
class B <A
end
a = A.new
p a.value
b = A.new
p a.value
c = B.new
p a.value, b.value, c.value # => 1, 2, 3
|
|
|
5. 전역 변수 |
|
앞에 $가 붙여진 변수는 프로그램 종료까지 값을 유지하고
어디서나 액세스 할 곳이 있습니다.
$ global = 0
class Hoge
$ global = 1
def plus
$ global + = 1
end
end
Hoge.new.plus
Hoge.new.plus
p $ global # => 3
|
|
|
6. 상수 |
|
상수는 그 이름과 같이 정해진 숫자입니다.
프로그램 내에서 그 값이 변하지 않는 것을 정의되지만 다시 할당 할 수 있습니다.
상수는 클래스에 대해 정의 할 수 어디서나 볼 수 있습니다.
클래스 정의를 한 경우에도 정수가 선언되고, 그 상수 클래스 객체에 대한 참조가 만들어집니다.
::에서 클래스 모듈의 상수를 외부 참조 · 대입 할 수 있습니다.
HOGE = 0
class A
HOGE = 1
end
class B <A
HOGE = 2
def const
# self 상수 A 클래스의 상수 최상위 상수
p HOGE, A :: HOGE :: HOGE
end
end
p HOGE, A :: HOGE, B : HOGE # => 0, 1, 2
B.new.const # => 2, 1, 0
# 클래스 이름도 상수이므로 변경되면 클래스가 사라집니다.
A = nil # => WARNING
A.new # => NoMethodError
|
|
|
7. 변수의 범위 |
|
같은 변수 이름이 유효한 범위를 범위라고합니다.
이 범위의 차이에서 변수 이름이 바뀌 었다고 생각합니다.
로컬 범위 인스턴스 범위 클래스 범위 글로벌 범위 등.
이 밖에도 이터레이터 (반복)에 새로운 변수 범위가 생성됩니다.
이 블록 내에서 정의 된 지역 변수는 블록 밖에서는 정의되어 있지 않습니다.
그러나 메소드의 지역 변수는 블록 내에서 참조 할 수 있습니다.
그래서 블록 외부에서 사용하는 변수 이름을 사용하는 경우주의하십시오.
블록이라는 것은 {...}로 둘러싸인 부분입니다. 물론 do ... end도 포함되어 있습니다.
a = 1
(0 ... 10) .each {| i | a = i}
pa # => 9
pi # => ERROR
for-in은 each 메소드를 호출하는 구문입니다 만, 이쪽은 새로운 변수 범위를 작성하지 않습니다.
a = 1
for i in 0 ... 10
a = i
end
pa # => 9
pi # => 9
|
|
|
* 본강의는 번역본 강의입니다. 원문은 아래 출처에서 확인가능합니다.
출처 : http://cacaosoft.web.fc2.com/tkool/lecture/rgss2/002.html