오늘은
if문
과 논리연산자,열거형(enum)
과boolean
에 대해 배웠다.
솔리디티에서 if문은 다른 프로그래밍 언어에서 if문과 비슷하다.
그래서 오늘 배운 내용은 어렵진 않았지만 struct와 응용하여 if문을 작성한 내용에 대해 정리해볼까한다.
먼저 struct student를 선언한 후 student형 변수 a, b, c와 student형 배열 Students를 각각 선언한다.
contract IF {
struct student {
uint number;
string name;
uint score;
string credit;
}
student a;
student b;
student c;
student[] Students;
그리고 a 학생 정보를 넣는 함수를 작성해준다.
이때 number, name, score를 입력받아서 입력받은 score를 조건문을 통해 credit에 학점을 자동으로 넣어준다.
그리고 credit 변수는 함수 내 지역변수로 선언해주는데 그 이유는 함수 내에서 조건문으로 돌려야 하기 때문이다.
그리고 a 변수에 student형 변수들을 넣어주면 된다.
// 점수가 90점 이상이면 A, 80점 이상이면 B, 70점 이상이면 C, 나머지는 F
function setA(uint _number, string memory _name, uint _score) public {
string memory _credit;
if(_score>=90) {
_credit = 'A';
} else if(_score >=80) {
_credit = 'B';
} else if(_score >=70) {
_credit = 'C';
} else {
_credit = 'F';
}
a = student(_number, _name, _score, _credit);
}
상태변수로 선언해준 학생 a, b, c가 아닌 새로운 학생정보를 입력하여 배열에 넣어주는 함수를 작성한다.
function pushStudent(uint _number, string memory _name, uint _score) public {
string memory _credit;
if(_score>=90) {
_credit = 'A';
} else if(_score >=80) {
_credit = 'B';
} else if(_score >=70) {
_credit = 'C';
} else {
_credit = 'F';
}
Students.push(student(_number, _name, _score, _credit));
}
아래는 함수 내에서 조건문을 통해 학점을 입력하는 방법이 아닌 새로운(조건문을 통해 학점을 반환받는) 함수를 작성하여 사용하는 방법이다.
function setA(uint _number, string memory _name, uint _score) public {
a = student(_number, _name, _score, setGrade(_score));
}
function pushStudent(uint _number, string memory _name, uint _score) public {
Students.push(student(_number, _name, _score, setGrade(_score)));
}
function setGrade(uint _score) public pure returns(string memory) {
if(_score>=90) {
return 'A';
} else if(_score >=80) {
return 'B';
} else if(_score >=70) {
return 'C';
} else {
return 'F';
}
}
}
다음은 논리연산자를 사용한 조건문이다.
contract IF2 {
function setNumber(uint _n) public pure returns(string memory) {
if(_n>=70 || _n<=10) { // or -> ||
return "A";
} else if(_n>=50 && _n%3==0) {
return "B";
} else {
return "C";
}
}
}
contract ENUM {
enum Food { //enum 변수명 {변수1, 변수2, 변수3, 변수4}
Chicken, // - 0
Suish, // - 1
Bread, // - 2
Coconut // - 3
}
Food a; // Food형 변수 a
Food b; // Food형 변수 b
Food c;
function setA() public {
a = Food.Chicken;
}
function setB() public {
b = Food.Suish;
}
function setC() public {
c = Food.Bread;
}
function getABC() public view returns(Food, Food, Food) {
return (a,b,c);
}
function getABC2() public view returns(uint8, uint8, uint8) {
return (uint8(a),uint8(b),uint8(c));
}
}
enum
자료형은 변수들이uint8
로 저장(0부터)되기 때문에 8비트, 즉 1바이트로 16진수 2자리까지(255까지) 저장되는데 이떄문에 정적인 타입이고 많은 값을 넣거나 할때 사용되지 않는다.
장점으로는 상태관리를 하기에 적절하고 가독성에도 장점이 있다.
그리고 새로운 값을 추가하거나 삭제할 수 없기 때문에 안정적으로 관리할 수 있다.