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;
}
}