برنامه نویسی

توابع خالص در 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 دنبال کنید

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا