contract Example {
uint256 public a = 5
function exampleA() view public returns (uint256) {
return a;
}
function exampleB() pure public returns (uint256) {
uint256 public b = 3
return b;
}
}
위 함수에 있는 view
, pure
들은 무엇일까?
view는 말 그대로 function 밖의 변수들을 볼 (읽을) 수 있으나 변경은 불가능할때 사용한다.
pure는 function 밖의 변수들을 볼수도, 변경 할 수도 없을때 사용한다.
왜 pure 인가?
=> pure를 사용한 function은 순수하게 함수 내부에 선언된 변수들 만으로 구성되어 있기 때문
예시를 통해 알아보자.
contract Example {
uint256 public a = 5
function viewExampleA() view public returns (uint256) {
return a + 2;
}
}
위 함수는 정상일까?
정답은 Yes 이다.
전역에 선언된 a
의 값을 읽고, a에 2를 더한 것을 반환하였기 때문
contract Example {
uint256 public a = 5
function viewExampleB(uint256 _value) view public {
a = _value;
}
}
그러면 위 함수는 정상일까?
정답은 No 이다.
view
로 선언하였지만 a
의 값을 _value
로 변경하였기 때문
contract Example {
uint256 public a = 5
function viewExampleA() pure public returns (uint256) {
return a + 2;
}
}
pure
로 선언된 위 함수는 정상일까?
정답은 No 이다.
pure
로 선언되었지만 외부 변수인 a
를 읽으려 했음으로
Undeclared identifier 인 Declaration Error를 발생시킨다.
contract Example {
function viewExampleA() pure public {
uint256 a = 5
a + 2;
}
}
위 함수의 경우엔 어떨까? 정상일까?
정답은 Yes 이다.
함수에서 사용한 변수 a
는 viewExampleA
함수 내부에 선언한 변수 a
이기 때문