If 는 조건문이다.
이 조건문을 설정하면, 조건을 통과할 경우 조건문 이하의 코드가 실행된다.
조건문을 이용하여 다음 조건의 함수를 작성해보았다.
"점수가 90점 이상이면 A, 80점 이상이면 B, 70점 이상이면 C, 나머지는 F"
Contract IF{
function getCredit(uint _score) public view returns(string memory) {
if(_score >= 90) {
return "A";
} else if(_score >= 80) {
return "B";
} else if(_score >= 70) {
return "C";
} else {
return "F";
}
}
}
조건문의 문법은, if(조건){조건 통과시 실행할 코드} 이다.
만약, 조건문을 이중으로 사용할 경우엔 두번 째 조건부터는 else if(){} 형식으로 적어주면 된다.
그리고 모든 조건에 적합하지 않다면, else {실행할 코드} 로 코드를 적어주면 된다.
이렇게 작성한 함수는 다른 함수에서 불러와 사용할 수도 있다.
enum 은 한국말로 열거형이라고 불리며 array 와 비슷한 형식이라고도 볼 수 있다.
enum 은 struct 문법과 비슷하게 선언할 수 있다.
enum baseball_team {
kiwoom,
doosan,
yankees,
dagers,
braves
}
그렇다면 왜 array 대신 enum 을 사용할까.
enum 의 특징
- enum 도 uint, string, bytes 와 같은 하나의 형식이다.
- 선언한 enum baseball_team 은 string 형식으로 입력했지만 0,1,2,3,4 처럼 uint 형식으로 저장된다.
- array 는 pop, push, delete 등을 사용할 수 있다.
- enum 에서 설정한 값은 규칙이라고 볼 수 있으며, 이 규칙은 변하지 않는다.
- st = st2[0]; /// st = baseball_team.kiwoom; 한눈에 봐도 우측이 가독성이 좋다. 즉, 코드 작성 및 관리가 편리하다.
- 5번 좌측 코드의 string[] 형식은 동적이므로 가스비 소모가 비교적 심하다.
- enum 형식은 uint8 크기로 정적이므로 가스비 소모가 비교적 덜하다.
enum mainEngine {
fullahead,
slowahead,
stop,
slowastern,
fullastern
}
mainEngine eng1;
uint engCondition = 5;
function ifcondition() public view returns() {
if(engCondition <= 2) {
eng1 = mainEngine.fullastern;
} else if(engCondition <= 4) {
eng1 = mainEngine.slowastern;
} else if(engCondition >= 6) {
eng1 = mainEngine.slowahead;
} else if(engCondition >= 8) {
eng1 = mainEngine.fullahead;
} else if(engCondition == 5) {
eng1 = mainEngine.stop;
}
}
function set_ME_ahead() public {
engCondition++;
ifCondition();
}
function set_ME_astern() public {
engCondition++;
ifCondition();
}
function get_ME_Condition() public view returns(mainEngine) {
return eng1;
}
이런식으로 if 문과 함께 사용할 수 있다.
Boolean 도 uint, string, bytes 와 같은 type(형식)중 하나이다.
boolean 은 오직 두가지의 값만 가지고 있다. true 와 false.
contract booooolean {
bool a;
function geta() public view returns(bool) {
return a;
}
function seta() public {
a = true;
}
}
이렇게 코드를 작성해보자.
처음 선언한 불린형 상태변수 a 는 기본값이 저장되어있지 않으므로 0 이다.
bool 에서는,
0 = false
1 = true
이다.
그러므로 초기값을 지정해주지 않은 상태로 geta 함수를 실행시켜보면
false 값이 나온다.
그리고 true 값을 지정해주는 함수 seta 를 실행시키고 다시 돌려주면 true 값이 나온다.
두가지 값만 있는경우, 불린 형식을 사용할 수 있겠다.
예를 들어, 남자와 여자만 있는 성별이라던지.