Be lazy, Be crazy

FunctionModifier 본문

BlockChain/솔리디티

FunctionModifier

정신이 많이없는 개발자 2022. 3. 13. 23:49
728x90
반응형
modifier함수를 사용하는 이유는 무엇일까? 

일단 자주 사용하는 조건문에대한 반복을 막을 수 있다. 
A,B,C 함수에  x=10이면 함수사용을 거부한다라는 조건을 각각에 넣기 보다는 x=10이면 거부해주는 함수 하나를 만들어서 재사용하는 것이 훨씬 좋다고 생각이 든다.

밑에 코드를 참조하면 더 쉽게 이해가 가겠지만, 

1. Basic은 modifier을 만들고 사용되어야하는 함수부분에 추가해주는것이다. 이때 인자값이 필요가없는 경우다.
2. input은 위 1번과 같은경우지만 modifier에 인자가들어가야 하는 부분이다. 
     function incBy(uint _x) external whenNotPause cap(_x)
 modifier을 연달아 사용가능하며 필요하다면 인자값도 전달해줄 수 있다.
3. sandwich - 개인적으로 모르고 있었던 기능;
   code1 _; code2. -> modifer code1 실행 -> _;함수실행 ->  modifer code2 실행 
  아래 코드 참조 
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;


contract FunctionModifier {

    //Basic, input, sandWich 

   bool public paused;
   uint public count;

   modifier whenNotPause(){
       require(!paused, "pasued");
       _;
   }

   function setPasue(bool _paused) external {
       paused = _paused;
   }

   function inc() external whenNotPause{
       count += 1;
   }

   function dec() external whenNotPause{
       count -= 1;
   }
   modifier cap(uint _x){
       require(_x <100, "x >= 100");
       _;
   }

   function incBy(uint _x) external whenNotPause cap(_x){
       require(_x<100, "x>= 100");
       count += _x;
   }

   modifier sandwich() {
       count += 10;
       _;
       count *= 2;
   }
   function foo() external sandwich {
       count += 1;
   }
   //실행해보면 값이 22가 됨.
   //그말은 즉시 foo함수 기능이 처리되고 다시 modifier 밑에부분이 처리된다는 의미.
}

 

반응형

'BlockChain > 솔리디티' 카테고리의 다른 글

Array  (0) 2022.03.15
FunctionOutputs  (0) 2022.03.14
Error  (0) 2022.03.12
ForAndWhileLoops  (1) 2022.03.12
If Else  (0) 2022.03.12
Comments