وبلاگ

سازنده در سالیدیتی

سازنده در سالیدیتی
سالیدیتی

سازنده در سالیدیتی

سازنده در سالیدیتی یکی از مفاهیم متداول در برنامه نویسی شی گرایی و در بسیاری از زبان های برنامه نویسی

از جمله جاوا یا پایتون هنگام تعریف کلاس ها می توان برای مقدار دهی اولیه متغیرهای یک کلاس در هنگام ایجاد یک آبجکت از آن استفاده کنید.سازنده یک روش خاص در هر زبان برنامه نویسی شی گرا است که هر زمان که یک شی از یک کلاس مقدار دهی اولیه شود فراخوانی می شود. سازنده در سالیدیتی کاملاً متفاوت است، Solidity یک اعلان سازنده را در داخل قرارداد هوشمند ارائه می دهد و زمانی که قرارداد مستقر می شود فقط یک بار فراخوانی می کند و برای مقداردهی اولیه وضعیت قرارداد استفاده می شود. اگر سازنده به‌ صراحت تعریف نشده باشد،یک سازنده پیش‌فرض توسط کامپایلر ایجاد می‌شود.سازنده در سالیدیتی یک تابع ویژه است که برای مقداردهی اولیه متغیرهای حالت در یک قرارداد استفاده می شود. سازنده هنگام ایجاد قرارداد برای اولین بار فراخوانی می شود و می توان از آن برای تنظیم مقادیر اولیه استفاده کرد.

ساخت یک سازنده در سالیدیتی

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

سازنده در سالیدیتی
سازنده در زبان سالیدیتی

سازنده در سالیدیتی دارای شرایط زیر است.

  • هر قرارداد هوشمند می تواند یک تابع سازنده داشته باشد.
  • هدف سازنده در سالیدیتی مقدار دهی اولیه state variable ها قبل از دیپلوی
  • استفاده از سازنده در قرارداد هوشمند اختیاری است و سازنده ها یک تابع اختیاری هستند
  • در صورتی که سازنده تعریف نشده باشد، سازنده پیش فرض در قرارداد هوشمند وجود دارد
  • سازنده در سالیدیتی فقط یک بار اجرا (فراخوانی) می شود و دوباره اجرا نمی شود.
  • سازنده می تواند عمومی یا داخلی باشد.

کسب درآمد دلاری با قرارداد هوشمند

سازنده با استفاده از یک کلمه کلیدی سازنده بدون هیچ نام تابعی که توسط یک اصلاح کننده دسترسی دنبال می شود، تعریف می شود. این یک تابع اختیاری است که متغیرهای حالت قرارداد را مقداردهی اولیه می کند.سازنده داخلی قرارداد را به عنوان انتزاعی علامت گذاری می کند.

مشاهده  آموزش نصب ترافل (Truffle)

سینتکس سازنده در زبان سالیدیتی

constructor() <Access Modifier> {          
}

پس از اجرای سازنده، کد نهایی قرارداد در بلاک چین مستقر می شود. استقرار کد هزینه Gas اضافی خطی به طول کد دارد. این کد شامل تمام توابعی است که بخشی از رابط عمومی هستند و همه توابعی که از آنجا از طریق فراخوانی تابع قابل دسترسی هستند. کد سازنده یا توابع داخلی که فقط از سازنده فراخوانی می شوند را شامل نمی شود.در بخش زیر نمونه کد سازنده در سالیدیتی به صورت داخلی  و عمومی آورده شده است.

pragma solidity ^0.5.;

contract A {
    uint public a;

    constructor(uint _a) internal {
        a = _a;
    }
}

contract B is A(1) {
    constructor() public {}
}

مثال: در مثال زیر، در قرارداد constructor Example، یک سازنده برای مقداردهی اولیه متغیر حالت (state variable) – str ایجاد می شود.

// Solidity program to demonstrate
// creating a constructor
pragma solidity ^0.5.0;	
		
// Creating a contract
contract constructorExample {	
		
	// Declaring state variable
	string str;	
			
	// Creating a constructor
	// to set value of 'str'
	constructor() public {				
		str = "GeeksForGeeks";	
	}	
	
	// Defining function to
	// return the value of 'str'
	function getValue(
	) public view returns (
	string memory) {	
		return str;	
	}	
}

تصویر خروجی کد های سازنده در سالیدیتی:

سازنده در سالیدیتی

سازنده در وراثت (Constructor in Inheritance)

در صورتی که سازنده تعریف نشده باشد، سازنده پیش فرض فراخوانی می شود، اما اگر سازنده در قرارداد مادر تعریف شده باشد و آرگومان هایی داشته باشد، قرارداد فرزند نیز باید پارامترهای مورد نیاز را در اختیار سازنده قرار دهد. اگر قرارداد فرزند هیچ پارامتری را به سازنده والد منتقل نکند، قرارداد فرزند به یک قرارداد انتزاعی تبدیل می‌شود. دو روش برای فراخوانی سازنده قرارداد مادر وجود دارد:

مشاهده  برنامه نویسی فرانت اند Front End چیست؟

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

// Solidity program to demonstrate
// Constructor in Inheritance
pragma solidity ^0.5.0;

// Creating a contract
contract Base {

// Declaring variable
uint data;

// Defining a constructor
constructor(uint _data) public {
	data = _data;
}

// Defining function
function Print(
) public returns(string memory){
	return "Direct Initialization";
}

}

// Child contract inheriting
// the parent contract 'Base'
contract Derived is Base(2){

	// Defining a constructor
	constructor() public {}

// Defining function to access
// variable of parent contract
function getData(
) external returns(uint){
	uint result = data ** 2;
	return result;
}
}

// Caller contract
contract caller{

// Creating an object of child contract
	Derived c = new Derived();

// Accessing functions of parent
// and child contract using
// object of child contract
	function getResult() public returns(uint){
		c.Print();
		return c.getData();
	}
}

تصویر خروجی کد های مقداردهی اولیه مستقیم

مقداردهی اولیه مستقیم

مقداردهی اولیه غیر مستقیم: در مثال زیر، مقداردهی اولیه غیر مستقیم برای مقداردهی اولیه سازنده کلاس پایه انجام می شود.

// Solidity program to demonstrate
// Indirect Initialization
pragma solidity ^0.5.0;

// Creating a contract
contract Base {

// Declaring state variable
string str;

// Defining a constructor
constructor(
	string memory _str) public {
	str = _str;
}

// Defining a function
function Print(
) public returns(string memory){
	return "Indirect Initialization";
}
}

// Child contract inheriting
// parent contract 'Base'
contract Derived is Base {

// Defining a constructor
constructor(
	string memory _info) Base(
	string(abi.encodePacked(
	_info, _info))) public {}

// Defining function to
// return value of parent
// contract variable 'str'
function getStr(
) public view returns(string memory){
	return str;
}
}

// Caller contract
contract caller {

	// Creating an object of
	// child contract
	Derived c
	= new Derived("GeeksForGeeks");

	//Defining a function to access
	// functions of the parent
	//contract and child contract
	function getResult() public view{
		c.Print();
		c.getStr();
	}
}

تصویر خروجی کد های مقداردهی اولیه غیر مستقیم

مقداردهی اولیه غیر مستقیم

نیاز به سازنده در سالیدیتی

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

آموزش سالیدیتی برنامه نویسی قرارداد هوشمند

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

مثال: در مثال زیر قرارداد constructorExample از یک سازنده برای نشان دادن نیاز به سازنده تشکیل شده است.

// Solidity program to demonstrate
// Need of constructors
pragma solidity ^0.5.0;	
		
// Creating a contract
contract constructorExample {	
		
	// Declaring state variable
	string str;	
	address private owner
	= 0x62Ab98A0efB752C48bd82836D0b4335018B9B97e;

	// Defining constructor
	constructor(string memory string) public {				
		if(msg.sender == owner){
			str = string;
		}	
	}	
	
	// Defining function to
	// return value of 'str'
	function getValue() public view returns (
	string memory) {	
		return str;	
	}	
}

تصویر خروجی کدهای نیاز به سازنده در سالیدیتی

نیاز به سازنده در سالیدیتیمثالی دیگر از سازنده در برنامه نویسی سالیدیتی

pragma solidity ^0.5.0;

contract Example {
  // declare a state variable
  uint _a;

  // create a constructor to initialize _a
  constructor (uint a) public {
    _a = a;
  }

  // getter function to get value of _a
  function getA() public view returns(uint){
    return _a;
  }
}

توضیحات کد های نوشته شده در مثال بالا:

مشاهده  ساختار در برنامه نویسی سالیدیتی

خط 3: قراردادی به نام Example ایجاد می کنیم.
خط 5: یک متغیر حالت _a را اعلام می کنیم.
خط 8: سازنده ای ایجاد می کنیم که مقدار _a را مقداردهی اولیه می کند.
خط 13: یک تابع getA برای بازیابی مقدار _a ایجاد می کنیم.

جمع بندی مقاله سازنده در Solidity

هنگام ایجاد قرارداد هوشمند Solidity، می توانیم یک تابع خاص به نام سازنده را اعلام کنیم. یک سازنده شامل منطق اولیه سازی متغیرهای حالت است.در سایر زبان های برنامه نویسی شی گرا، هر زمان که یک شی از یک کلاس نمونه سازی شود، یک سازنده فراخوانی می شود. یک سازنده تنها زمانی قابل فراخوانی است که قرارداد هوشمند در زبان سالیدیتی مستقر شده باشد. پس از استقرار، راهی برای فراخوانی مجدد سازنده وجود ندارد.

منابع مقاله Solidity Constructors

وب سایت : geeksforgeekseducative.io

دیدگاه خود را اینجا قرار دهید

نشانی ایمیل شما منتشر نخواهد شد.

محبوب ترین دوره ها

برچسب های محبوب

Liquidity Pool Solidity Inheritance آموزش برنامه نویسی سالیدیتی آموزش سالیدیتی آموزش قرارداد هوشمند اجزای قرارداد هوشمند ارزدیجیتال Polkadot ارز دیجیتال اتریوم ارزهای متاورسی الگوریتم اثبات کار الگوریتم اجماع امنیت کیف پول اهمیت قرارداد هوشمند اپلیکیشن متمرکز ایردراپ برنامه نویس سالیدیتی برنامه نویسی اتریوم برنامه نویسی بلاکچین برنامه نویسی ریمیکس برنامه نویسی سالیدیتی برنامه نویسی قرارداد هوشمند بلاکچین بلاک چین اتریوم بهترین ارزهای دیجیتال توسعه دهنده سالیدیتی خطا در سالیدیتی صرافی های ارزدیجیتال صرافی‌ غیرمتمرکز قرارداد هوشمند متاورس مزایای قرارداد هوشمند نوشتن سیستم رای گیری با سالیدیتی نوشتن قرارداد هوشمند واقعیت مجازی متاورس ویژگی‌های اتریوم پلتفرم های ارزدیجیتال پیش نیاز قرارداد هوشمند کاربرد قرارداد هوشمند کد نویسی سالیدیتی کسب درآمد با قرارداد هوشمند کسب درآمد در متاورس کلاهبرداری ایردراپ کیف پول ارزدیجیتال کیف پول الکترونیکی کیف پول نرم‌افزاری