🔑 코인 투자 추천 링크 🔑
[NEW] 누구나 쉽게 따라하는 솔리디티 강의(솔리디티 버전 0.8.13)
5. 배열, 열거형(enum), 구조체(calldata,memory)
8. 이벤트(events), 생성자(constructor), 상속
10. 인터페이스(interface), payable, 이더전송,받기 관련
11. Fallback, Call, Delegate(솔리디티 업그레이드 기법)
12. 함수 선택자(function selector), 다른 컨트랙트 사용 및 생성기법
13. Try Catch, Import(임포트), Library(라이브러리)
14. ABI 디코드, hash 함수, 서명검증, 가스최적화
* 블록체인 전문가들도 놓치기 쉬운 비트코인, 이더리움의 핵심가치 강의
1. 조건문(If else)
- 솔리디티는 조건문 if, else를 지원한다.
- 조건 ? 참 : 거짓 구문의 짧은 문법도 지원한다.
소스파일
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;
contract IfElse {
function foo(uint x) public pure returns (uint) {
if (x < 10) {
return 0;
} else if (x < 20) {
return 1;
} else {
return 2;
}
}
function ternary(uint _x) public pure returns (uint) {
// if (_x < 10) {
// return 1;
// }
// return 2;
// shorthand way to write if / else statement
// the "?" operator is called the ternary operator
return _x < 10 ? 1 : 2;
}
}
2. 반복문(For and While Loop)
- for, while, do while 반복문을 지원한다.
- 제한 없는 반복문을 사용하는것에 유의해야 한다. (가스비 제한으로 인해서 트랜잭션이 실패할 수 있다.)
- 위와 같은 이유로, while 과 do while은 거의 사용되지 않는다.
소스파일
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;
contract Loop {
function loop() public {
// for loop
for (uint i = 0; i < 10; i++) {
if (i == 3) {
// Skip to next iteration with continue
continue;
}
if (i == 5) {
// Exit loop with break
break;
}
}
// while loop
uint j;
while (j < 10) {
j++;
}
}
}
3. 맵핑(Mapping)
- 맵핑은 KeyType => ValueType의 문법구조를 가진다.
- keyType은 모든 기본값(integer등), bytes, string, 컨트랙트가 될 수 있다.
- valueType은 다른 맵핑이나 배열을 포함한 모든 유형이 될수 있다.
- 맵핑은 반복할 수 없음.
예제1) 맵핑 선언 및 get, set, remove
예제2) 맵핑 주소로부터 다른 맵핑을 연결하는 예제.
소스파일
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;
contract Mapping {
// Mapping from address to uint
mapping(address => uint) public myMap;
function get(address _addr) public view returns (uint) {
// Mapping always returns a value.
// If the value was never set, it will return the default value.
return myMap[_addr];
}
function set(address _addr, uint _i) public {
// Update the value at this address
myMap[_addr] = _i;
}
function remove(address _addr) public {
// Reset the value to the default value.
delete myMap[_addr];
}
}
contract NestedMapping {
// Nested mapping (mapping from address to another mapping)
mapping(address => mapping(uint => bool)) public nested;
function get(address _addr1, uint _i) public view returns (bool) {
// You can get values from a nested mapping
// even when it is not initialized
return nested[_addr1][_i];
}
function set(
address _addr1,
uint _i,
bool _boo
) public {
nested[_addr1][_i] = _boo;
}
function remove(address _addr1, uint _i) public {
delete nested[_addr1][_i];
}
}
소스파일 참고 : https://solidity-by-example.org/
블록체인 교육 문의는 아래 링크 참고 바랍니다.
댓글