Solidity - ตัวปรับแต่งฟังก์ชัน

Function Modifiers ใช้เพื่อแก้ไขลักษณะการทำงานของฟังก์ชัน ตัวอย่างเช่นเพื่อเพิ่มข้อกำหนดเบื้องต้นให้กับฟังก์ชัน

ก่อนอื่นเราสร้างตัวปรับแต่งโดยมีหรือไม่มีพารามิเตอร์

contract Owner {
   modifier onlyOwner {
      require(msg.sender == owner);
      _;
   }
   modifier costs(uint price) {
      if (msg.value >= price) {
         _;
      }
   }
}

เนื้อหาของฟังก์ชันถูกแทรกโดยที่สัญลักษณ์พิเศษ "_;" ปรากฏในคำจำกัดความของตัวปรับเปลี่ยน ดังนั้นหากพอใจเงื่อนไขของโมดิฟายเออร์ขณะเรียกใช้ฟังก์ชันนี้ฟังก์ชันจะถูกเรียกใช้งานมิฉะนั้นจะมีข้อยกเว้น

ดูตัวอย่างด้านล่าง -

pragma solidity ^0.5.0;

contract Owner {
   address owner;
   constructor() public {
      owner = msg.sender;
   }
   modifier onlyOwner {
      require(msg.sender == owner);
      _;
   }
   modifier costs(uint price) {
      if (msg.value >= price) {
         _;
      }
   }
}
contract Register is Owner {
   mapping (address => bool) registeredAddresses;
   uint price;
   constructor(uint initialPrice) public { price = initialPrice; }
   
   function register() public payable costs(price) {
      registeredAddresses[msg.sender] = true;
   }
   function changePrice(uint _price) public onlyOwner {
      price = _price;
   }
}