728x90
반응형
SMALL
1.조건문
- if ~ else
- if ~ else if ~ ... else
- ..? ..: ..; (삼항 연산)
- switch ~ case 사용 불가
switch/case 나 goto 문은 지원하지 않는다.
자동 형변환 (type conversion)도 지원하지 않는다 :
ex) if(true){...} (0)
if(1){...} (x)
2. 반복문
- for(초기치 ; 조건 ; 증감치) { statement ; ... }
- while(조건) {statement ; ... }
- do { statement ; ... } while(조건);
반복문의 제어
- continue : 만약 이 문법을 만나면 아래코드로 진행하지않고 다시 반복문 처음으로 돌아가라 라는 뜻이다.
- break : 조건에 의해 브레이크를 만나면 반복문을 탈출하게 된다.
해보기
//SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.6.10;
contract ForAndIf {
function Test() public pure returns (uint) {
uint sum = 0 ;
for (uint i = 0 ; i <= 100 ;i++) {
if (i % 7 == 0)
continue;
sum = sum+i;
}
return sum;
}
}

7의 배수일경우 컨티뉴를 해서 더하지않고 다시 반복문을 돌리는 즉, 7의 배수만 제외한 100까지의 모든수를
더하는 함수이다.

값은 4315로 나왔다.
이것은 반복문안에 조건문을 걸어 해당 조건절이 참이되면 컨티뉴를 통해 제어를 하는 함수이다.
//SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.6.10;
contract Ifelse {
function Test(uint a) public pure returns(bool) {
if (a % 2 == 0) {
return true;
} else {
return false;
}
}
}
If else 문의 예시이다.
숫자를 받아 만약 해당 값이 2의 배수 , 짝수이면 트루를 아니면 거짓을 반환하도록 하였다.
컴파일해주고 디플로이해준뒤 확인해보자

3을 넣어주니 거짓이 나왔다.

4를 넣어주니 참을 반환받았다.
function Test3(uint a, uint b) public pure returns(bool) {
if (a / b >= 1) {
return true;
}
else{
return false;
}
}
추가적으로 값을 하나더 받아서 둘을 나누고 그것이 1보다 큰지 작은지를 구하는 함수를 만들었다.

이때 uint 특성상 100/99 는 1보다 크다. 그래서 true를 나타낸다. 계산기를 보니 1.010101로 나온다.
그런데!!! a/b>=1 이 아닌 a/b>1 로 등호를 빼면

false가 나온다. 아마도 100/99 를 1로 인식하고 나머지 소숫점을 절삭하여 인식해서 그런것같다.
728x90
반응형
LIST
'전공공부 > 블록체인공학' 카테고리의 다른 글
Solidity - 예약어 (0) | 2021.11.29 |
---|---|
Solidity 구조체 (0) | 2021.11.22 |
Solidity - 배열 및 데이터삭제, 타입 캐스트 (0) | 2021.11.15 |
Solidity 함수의 타입제어 : view와 pure (0) | 2021.11.11 |
Solidity 함수의 입력 매개변수와 반환값 (0) | 2021.11.11 |
댓글