آموزش Constructor در سالیدیتی

برگردیم به مثال ساده‌ای از یک قرارداد ERC20 که در آن یک متغیر به نام banker را مستقیماً داخل بدنه قرارداد مقداردهی کردیم:

در این مثال، مقدار banker به‌صورت ثابت در قرارداد نوشته شده. اما اگر شخصی بخواهد خودش قرارداد را مستقر (deploy) کند و خودش را به‌عنوان banker تعیین کند، چه کار باید کرد؟

معرفی تابع Constructor در سالیدیتی

در زبان برنامه نویسی Solidity که برای نوشتن قراردادهای هوشمند در بلاک چین اتریوم استفاده می‌شود، تابعی ویژه به نام Constructor (سازنده) وجود دارد که تنها یک‌بار و هنگام استقرار (Deploy) قرارداد اجرا می‌شود. این تابع مانند سازنده ها در زبان های شی گرا مثل Python یا Java عمل می‌کند و معمولاً برای تنظیم مقادیر اولیه، تعیین مالک (owner) یا تعریف متغیرهایی مانند banker به کار می‌رود.

مثال:

توجه داشته باشید که:

  • نام تابع باید فقط constructor() باشد (بدون کلید واژه function).

  • نیازی به مشخص‌کردن public یا دیگر مشخصه ها (مانند view, pure) نیست، چون برای constructor مجاز نیستند.

ارسال آرگومان به Constructor در سالیدیتی

اگر بخواهید شخص استقرار دهنده، آدرس banker را مشخص کند، می‌توانید از آرگومان استفاده کنید:

ضمناً، الگوی نگارشی‌ مانند variable = _variable را در سازنده ها (constructor ها) زیاد مشاهده خواهید کرد. زبان Solidity شما را مجبور به استفاده از این الگو نمی‌کند، اما به‌عنوان یک عرف رایج و متداول در کدنویسی در نظر گرفته می‌شود.

زمانی که در Remix قصد دارید قراردادی را که دارای آرگومان های سازنده است مستقر (Deploy) کنید، باید مقادیر آن آرگومان ها را در کادری وارد کنید که در کنار دکمه «Deploy» نمایش داده می‌شود.

برخلاف سایر توابع، نمی‌توان از calldata برای آرایه ها و رشته ها (strings) استفاده کرد؛ در این موارد باید از memory استفاده شود.

همچنین، به دلایلی که فعلاً وارد آن‌ها نمی‌شویم، استفاده از calldata در آرگومان های سازنده (constructor) امکان پذیر نیست. می‌دانم که این محدودیت عجیب و بی‌منطق به نظر می‌رسد، اما وقتی با نحوه‌ عملکرد داخلی اتریوم بیشتر آشنا شوید، این موضوع برایتان منطقی خواهد شد.

در ادامه مثالی آمده که نشان می‌دهد چگونه می‌توان یک رشته (string) را هنگام استقرار قرارداد تنظیم کرد:

ممکن است وسوسه شوید که به‌جای درگیری با calldata، همیشه از memory استفاده کنید. اما بهتر است فعلاً این نکته را به خاطر بسپارید، زیرا استفاده از calldata در شرایط مناسب، منجر به کاهش هزینه تراکنش ها (یعنی گس فی کمتر برای کاربر) خواهد شد.

و در نهایت، اگر برایتان سوال پیش آمده: سازنده ها (constructors) نمی‌توانند مقداری را بازگردانند (return کنند).

5/5 - (1 امتیاز)

راستی! برای دریافت مطالب جدید در کانال تلگرام یا پیج اینستاگرام سورس باران عضو شوید.

پکیج آموزش پیشرفته ASP.NET Core + طراحی فروشگاه اینترنتی
  • انتشار: ۱۱ اردیبهشت ۱۴۰۴

دسته بندی موضوعات

آخرین محصولات فروشگاه

مشاهده همه

نظرات

بازخوردهای خود را برای ما ارسال کنید