توابع خالص در Solidity – انجمن DEV

توابع خالص در Solidity توابعی هستند که متغیرهای حالت را نمیخوانند یا تغییر نمیدهند.
توابع خالص متغیرهای حالت را نمی خوانند یا تغییر نمی دهند. در عوض، مقادیری را برمیگردانند که صرفاً از پارامترهای ارائهشده به تابع یا از متغیرهای محلی موجود در آن مشتق شدهاند. کامپایلر در چنین شرایطی هشداری صادر می کند اگر هر یک از عباراتی که متغیرهای حالت را می خوانند، به آدرس یا موجودی دسترسی دارند، به هر بلوک یا پیام متغیر جهانی دسترسی دارند، تابعی را فراخوانی می کنند که خالص نیست و غیره در توابع خالص وجود داشته باشد. .
توابع خالص آنهایی هستند که وضعیت سیستم را نمی خوانند یا تغییر نمی دهند. می توان یک تابع را خالص اعلام کرد.
اگر هر یک از عبارات زیر در تابع وجود داشته باشد، به عنوان حالت خواندن در نظر گرفته می شود و کامپایلر در چنین شرایطی اخطاری صادر می کند:
-
متغیرهای حالت خوانده می شوند.
-
با استفاده از آدرس(this).balance or
توابع تعادل.
-
با استفاده از هر یک از متغیرهای ویژه بلوک، tx یا msg (msg.sig و msg.data قابل خواندن است).
-
فراخوانی هر تابعی که به عنوان خالص اعلام نشده است.
-
استفاده از اسمبلی درون خطی که حاوی کدهای عملیاتی خاص است.
-
اگر خطایی رخ دهد، توابع خالص میتوانند از رویههای reverse() و require() برای لغو هرگونه تغییر حالت بالقوه که ممکن است رخ داده باشد استفاده کنند.
مثال 1:
//SPDX-License-Identifier: MIT
pragma solidity ^0.5.0;
// Defining a contract
contract Test {
// Defining pure function to
// calculate product and sum
// of 2 numbers
function getResult(
) public pure returns(
uint product, uint sum){
uint num1 = 2;
uint num2 = 4;
product = num1 * num2;
sum = num1 + num2;
}
}
مثال 2:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract ViewAndPure {
uint public x = 1;
// Promise not to modify the state.
function addToX(uint y) public view returns (uint) {
return x + y;
}
// Promise not to modify or read from the state.
function add(uint i, uint j) public pure returns (uint) {
return i + j;
}
}
برای مطالب بیشتر، مرا در – https://linktr.ee/shlokkumar2303 دنبال کنید