i변수(iVariable)
i변수란?
변수는 어떠한 값을 저장해서, 필요할 때마다 꺼내쓸 수 있도록 해주는 것입니다.
커맨드헬퍼에서 일반 변수는 명령어에서 사용하는 $
변수이지만, 커맨드헬퍼 프로그래밍에서 사용하는 @
변수인 i변수가 있습니다.
이 i변수는 코드의 성능을 최적화 하거나, 코드를 보기 쉽게 할 때 사용할 수 있습니다.
i변수를 선언하는(만드는) 방법
i변수를 선언하는 방법은 두가지가 있습니다.
@변수이름 = 값
으로 연산자 구문을 이용하거나, assign(변수이름, 값)
으로 펑션을 사용하는 방법이 있습니다.
여기에서는 두가지 전부 알아보도록 하겠습니다.
예제 1.
/test $player = >>>
@player = $player
msg(@player)
<<<
결과: 실행한 플레이어의 이름을 플레이어에게 보냅니다.
변수(Variable) 와 비슷하게, $ 이 @ 으로 바뀌고 코드 작성시 값을 지정할 수 있다는 점만
바뀐 형태라고 생각하시면 됩니다. 이때 변수와 i변수의 이름은 겹쳐도 서로 다른 것으로 인식합니다.
위 코드는
/test $player = >>>
assign(@player, $player)
msg(@player)
<<<
와 동일합니다.
예제 2.
/test = >>>
@variable = 1
msg(@variable)
<<<
/test2 = >>>
msg(@variable)
<<<
결과:
/test
를 실행하면 "1" 이라는 메시지가 표시되지만,/test2
를 실행하면 변수가 비어있다는 오류가 납니다.
변수는 내가 변수를 선언한 곳(명령어 블록 안이라면 명령어 블록 안, 바깥이라면 안팎 전부) 바깥에서는 사용할 수 없습니다.
내가 변수를 선언한 곳 바깥에서도 사용하려면 전역 변수 혹은 영구 변수를 이용해야 합니다.
전역 변수(import()
/export()
)
전역 변수는 내가 어느 곳에서든 변수를 선언해도 어느 곳에서든 사용할 수 있다는 장점이 있습니다.
하지만 전역 변수는 서버가 꺼지거나 커맨드헬퍼가 리로드되면 사라지기 때문에, 데이터의 저장은 영구 변수를 이용해야 합니다.
전역 변수의 사용
전역 변수는 import()
, export()
두 펑션을 이용하는데,
값을 저장하고 사용하는 방법 중 저장하는 데에만 펑션(assign()
) 을 쓰는 일반 변수(이제부터는 지역 변수라고 지칭) 와 달리 값을 저장하고 사용하는 데에 전부 펑션을 사용합니다.
export()
펑션을 이용하여 값을 저장하고, import()
펑션을 이용하여 값을 사용합니다.
예제.
/exportvalue = export('test', '테스트')
/importvalue = msg(import('test'))
결과:
/importvalue
를 하면 "null" 이 전송되지만,/exportvalue
후/importvalue
를 하면 "테스트" 가 전송됩니다.
전역 변수는 일반 변수와 달리 존재하지 않는 값을 찾으려고 하면 오류 대신 null
이 반환됩니다.
영구 변수(store_value()
/get_value()
)
영구 변수는 전역 변수와 거의 같지만, 영구적으로 저장할 수 있고 몇가지 제약이 있다는 점이 있습니다.
영구 변수의 사용
영구 변수의 사용법은 기본적으론 import()
/export()
가 get_value()
/store_value()
으로 변경된 것 뿐입니다.
하지만 영구 변수는 하드디스크에 저장하기 때문에 기본적으로 속도가 느리고, 클로저는 저장할 수 없다는 단점이 있습니다.
또한 네임스페이스라는 다른 기능이 있는데 이는 영구 변수 에서 다룹니다.
예제.
/storevalue = store_value('test', '테스트')
/getvalue = msg(get_value('test'))
결과:
/getvalue
를 하면 "null" 이 전송되지만,/storevalue
후/getvalue
를 하면 "테스트" 가 전송됩니다. 서버를 껐다 켜고/storevalue
를 하지 않고/getvalue
를 해도 "테스트" 가 전송됩니다.