مجله

دستور Enum در سالیدیتی (solidity) + سورس کد

سلام دوستان عزیز سالیدیتی کد! امیدواریم حالتون خوب باشه ! در این مقاله قصد داریم تا دستور Enums در سالیدیتی و یا به طور کلی دستور Enums در قرارداد هوشمند را بررسی کنیم. Enums در واقع مخفف کلمه Enumeration است که در لغت به معنی “شمارش” است. وظیفه اصلی Enums محدود کردن یک متغیر است تا آن متغیر فقط یکی از مقادیر از پیش تعریف شده را داشته باشد که در اصطلاح به مقادیر موجود در این لیست شمارش شده Enum می گویند. Enum ها می توانند باگ های موجود در کد شما را کاهش دهند و خوانایی کد ها را نیز افزایش دهند. یک توسعه دهنده قرارداد های هوشمند با سالیدیتی زمانی از Enum استفاده می کند که قصد داشته باشد لیستی از مقادیر از پیش تعریف شده را نمایش دهد و همچنین در نظر داشته باشید که مقادیر عددی (مثبت یا منفی) و Boolean ها را نمی توان در Enum تعریف کرد. در ادامه با نحوه تعریف Enum در سالیدیتی و مثال Enum در سالیدیتی آشنا می شوید. البته اگر از دانشجویان دوره آموزش سالیدیتی هستید حتما در این دوره ویدیو مربوط به Enum و مثال های کاربردی آن را که در فصل سوم قرار دارد را مشاهده کرده اید.

enum در solidity

مثال Enum در سالیدیتی (solidity)

فرض کنید قصد دارید در یک قرارداد هوشمند که برای فروش خودرو تنظیم شده است رنگ خودرو را به انتخاب کاربر بگذارید. در این حالت کاربر باید از میان رنگ های موجود یک رنگ را انتخاب کند و طبیعتا نمی تواند به جز رنگ های تعریف شده رنگ دیگری را انتخاب نماید در این حالت تعریف Enum به شکل زیر می باشد : 

				
					enum <enum-name> {
  Color1,
  Color2,
  Color3
}
				
			

همانطور که در سینتکس بالا مشاهده می کنید نحوه تعریف Enum در سالیدیتی به این صورت است. در ادامه مثال های دیگری از Enum در قرارداد هوشمند را ذکر می کنیم تا بهتر با مفهوم Enum آشنا شوید.

Enum در قرارداد هوشمند سالیدیتی

در مثال زیر شما با نحوه تعریف یک Enum در قرارداد هوشمند آشنا می شوید
				
					pragma solidity ^0.5.0;

contract Example {
  // creating an enum
  enum Button { ON, OFF }

  // declaring a variable of type enum
  Button button;

  // function to turn on the button
  function buttonOn() public {
    // set the value of button to ON
    button = Button.ON;
  }

  // function to turn off the button
  function buttonOff() public {
    // set the value of button to OFF
    button = Button.OFF;
  }

  // function to get the value of the button
  function getbuttonState() public view returns(Button) {
    // return the value of button
    return button;
  }
}
				
			

شرح کد:

  • خط ۳ : ما قرارداد هوشمند را تعریف کرده ایم 
  • خط ۵ : در خط ۵ ما کلید Enum  را تعریف کرده ایم 
  • خط ۸ : ما متغیر کلید را تعریف کرده ایم
  • خط ۱۱ : ما یک تابع برای فعال کردن کلید تعریف کرده ایم 
  • خط ۱۶ : ما یک تابع برای غیر فعال کردن کلید تعریف کرده ایم 
  • خط ۲۱ : در این بخش با تعریف یک تابع قصد دریافت وضعیت فعلی کلید را داریم

خروجی کد:

  1. در صورتی که تابع فعال کردن کلید فراخوانی شود مقدار button به Button.ON تغییر می کند
  2. همچنین در صورتی که تابع غیر فعال کردن کلید فراخوانی شود مقدار button به Button.OFF تغییر می کند
  3. و در نهایت زمانی که تابع getButtonState() فراخوانی می شود مقدار فعلی button بازگردانده می شود

مثالی دیگر از Enum در سالیدیتی

در ادامه یک مثال دیگر از enum در قرارداد هوشمند را بررسی می کنیم. فرض کنید یک فروشگاه اینترنتی دارید که در بخش سفارشات فروشگاه دو وضعیت برای سفارشات مشخص کرده اید. یک وضعیت برای سفارشات جدید که با “NEW” مشخص می شود و یک وضعیت برای سفارشات بررسی شده که با “checked” مشخص می شود. همچنین شما باید بتوانید وضعیت سفارشات را از وضعیت NEW به وضعیت Checked تغییر دهید. اگر با سالدیتی آشنایی دارید پیشنهاد می کنیم قبل از مشاهده کد ابتدا دانش خود را محک بزنید و این تکه کد را در remix بنویسید سپس ادامه مطلب را مشاهده کنید

و اما کد های این مثال به شکل زیر تعریف می شود :

				
					Contract Order {
Enum status {
      New,
      Checked
      }
//take the enum status, make its visibility public and call it status.  The first item in the enum is the default (New would be the default - 0).
      Status public status;

//function on how to update the status to checked if the current status is New
Function checked() public {

//the status has to equal New.  If it does change it to checked
         Require(status ==Status.New);
         Status = Status.Checked;
         }
				
			

مثال آخر از enum در solidity

در این مثال ما قصد داریم تا اطلاعات کتاب ها مثل نویسنده، نام کتاب، شناسه و . . . را دریافت کنیم. کد های این قرارداد به شکل زیر تعریف می شود :

				
					// Solidity program to demonstrate
// how to use 'structures'
pragma solidity ^0.5.0;

// Creating a contract
contract test {

// Declaring a structure
struct Book {
	string name;
	string writter;
	uint id;
	bool available;
}

// Declaring a structure object
Book book1;

// Assigning values to the fields
// for the structure object book2
Book book2
	= Book("Building Ethereum DApps",
			"Roberto Infante ",
			2, false);

// Defining a function to set values
// for the fields for structure book1
function set_book_detail() public {
	book1 = Book("Introducing Ethereum and Solidity",
				"Chris Dannen",
					1, true);
}


// Defining function to print
// book2 details
function book_info(
)public view returns (
	string memory, string memory, uint, bool) {
		
		return(book2.name, book2.writter,
			book2.id, book2.available);
	}
	
// Defining function to print
// book1 details
function get_details(
) public view returns (string memory, uint) {
	return (book1.name, book1.id);
}
}

				
			

و در نهایت خروجی به شکل زیر خواهد بود : 

enum در قرارداد هوشمند

سخن آخر 

امیدواریم این مقاله برای شما مفید بوده باشه. اگر به سالیدیتی علاقه دارید حتما مقالات دیگر سایت را مشاهده کنید و در انجمن سالیدیتی کد هم عضو بشید تا بتونیم بیشتر و بهتر با هم در ارتباط باشیم. در نهایت اگر سوالی دارید و یا پیشنهاد و تجربه ای در این زمینه دارید حتما از بخش نظرات با ما به اشتراک بگذارید

Print Friendly, PDF & Email
برای امتیاز به این نوشته کلیک کنید!
[کل: 2 میانگین: 5]
اشتراک گذاری:

دوره های آموزشی مرتبط

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