Enum در قراردادهای هوشمند Solidity

Enum در قراردادهای Solidity (به اختصار enumeration)، یک متغیر را محدود می کند تا تنها یکی از چند مقدار از پیش تعریف شده را داشته باشد. مقادیر موجود در این لیست شمارش شده enums نامیده می شوند و ثابت هستند. آنها برای ارائه نام برای ثابت های انتگرال استفاده می شوند که حفظ و خواندن قرارداد را آسان تر می کند. هنگامی که به لیستی از مقادیر از پیش تعریف شده نیاز دارید که داده های عددی یا متنی را نشان می دهد، باید از enum استفاده کنید.
در قرارداد حمل و نقل ما در زیر اجازه می دهد تا یک شماره ساده ایجاد کنیم که به ردیابی وضعیت یک سفارش کمک می کند. این شماره “وضعیت” نامیده می شود و فقط حاوی مقادیر زیر است:
- در انتظار
- ارسال شد
- پذیرفته شده
- رد شد
- لغو شد
این enum متغیرها را به یکی از چند مقدار از پیش تعریف شده محدود می کند. با داشتن یک لیست قابل خواندن، نگهداری کد ما آسان تر می شود. از آنجایی که مقادیر بازگشتی 0، 1، 2، 3، 4 هستند، نمی توان یک عدد 5 داشت (به یاد داشته باشید که موقعیت اول موقعیت 0 است). داشتن یک لیست تعریف شده از 0-4 با از بین بردن امکان ارسال 5، 10، 15، احتمال بروز اشکال در کد شما را کاهش می دهد.
برای مشاهده نمونه کار نمونه قرارداد زیر را بخوانید. این قرارداد حاوی یک شماره به نام وضعیت است که چندین وضعیت حمل و نقل را تعریف می کند. همچنین دارای تابعی است که یک متغیر را می خواند. اگر متغیر در انتظار است، وضعیت را به ارسال تغییر دهید.
Contract Order {
Enum status {
Pending,
Shipped,
Accepted,
Rejected,
Canceled
}
//take the enum status, make its visibility public and call it status. The first item in the enum is the default (pending would be the default - 0).
Status public status;
//function on how to update the status to shipped if the current status is pending
Function ship() public {
//the status has to equal pending. If it does change it to shipped
Require(status ==Status.Pending);
Status = Status.Shipped;
}
کاری که با enum در Solidity نمی توانید انجام دهید
- تبدیل ضمنی مجاز نیست
- اعداد یا بولین ها را نمی توان به عنوان عضو enum استفاده کرد
- Enum ها را نمی توان به عنوان یک نوع کلید در نقشه برداری استفاده کرد
- انواع Enums بخشی از ABI نیستند، بنابراین نمی توانید یک enum را در یک تابع برگردانید.
- اگر نسخه کامپایلر Solidity شما کمتر از 0.5.0 باشد، نمی توانید enums را در یک رابط تعریف کنید.

در صورتی که تجربه خاصی در خصوص برنامهنویسی ندارید میتوانید از دورههای رایگان سایت ما “فرازمان“، استفاده کنید. همچنین اگر به دورههای پیشرفتهتری در این خصوص نیاز داشته باشید، ما با آموزش های حرفه ای که در سایتمان قرار دادیم می توانید به سطح دلخواهتان با تلاش و پشتکار برسید.
نقشه راه
راهنما آکادمی فرازمان
برای یادگیری برنامه نویسی بلاکچین…
در این باره بیشتر بخوانید
دیدگاهتان را بنویسید