روز ۷/۱۰۰ - بررسی خواندن و نوشتن State variable در سالیدیتی

سالیدیتی، زبان برنامه‌نویسی محبوب برای توسعه قراردادهای هوشمند در بلاکچین‌هایی مانند اتریوم، از ویژگی‌ها و قابلیت‌های متنوعی برخوردار است. در این مقاله، به بررسی موضوع خواندن و نوشتن در State Variables در Solidity می‌پردازیم. State variable نقشی حیاتی در ذخیره‌سازی و دسترسی به داده‌ها در داخل قراردادهای هوشمند ایفا می‌کنند. ما در این مقاله به نحوه به‌روزرسانی State variable با ارسال تراکنش‌ها و همچنین نحوه خواندن مقادیر آن‌ها بدون پرداخت هیچ‌گونه هزینه تراکنشی خواهیم پرداخت.

در کد فوق، قرارداد SimpleStorage با یک متغیر وضعیت به نام num تعریف شده است. این متغیر به عنوان یک عدد صحیح بدون علامت عمومی (uint public) اعلان شده است که امکان دسترسی به مقدار آن از خارج از قرارداد را فراهم می‌کند. علاوه بر این، این قرارداد شامل دو تابع set و get به ترتیب برای به‌روزرسانی و خواندن مقدار متغیر num است.

#100DaysOfSolidity Exploring Reading and Writing to State Variables in Solidity
#100DaysOfSolidity Exploring Reading and Writing to State Variables in Solidity


مفهوم State variable

ـState variables، متغیرهایی هستند که در داخل یک قرارداد تعریف می‌شوند و مقادیر خود را در طول فراخوانی توابع حفظ می‌کنند. این متغیرها نماینده فضای ذخیره‌سازی قرارداد هستند و امکان ذخیره‌سازی دائمی داده‌ها را فراهم می‌کنند. برای درک بهتر نحوه عملکرد State variable، به قطعه کد زیر که نمونه‌ای از استفاده از این متغیرها را نشان می‌دهد، توجه کنید:

/// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
contract SimpleStorage {
 // State variable to store a number
 uint public num;
// You need to send a transaction to write to a state variable.
 function set(uint _num) public {
 num = _num;
 }
// You can read from a state variable without sending a transaction.
 function get() public view returns (uint) {
 return num;
 }
}

در کد فوق، قرارداد SimpleStorage با یک متغیر وضعیت به نام num تعریف شده است. این متغیر به عنوان یک عدد صحیح بدون علامت عمومی (uint public) اعلان شده است که امکان دسترسی به مقدار آن از خارج از قرارداد را فراهم می‌کند. علاوه بر این، این قرارداد شامل یک تابع set برای به‌روزرسانی مقدار num و یک تابع get برای خواندن مقدار آن است.

نوشتن State Variable

به منظور به‌روزرسانی مقدار یک متغیر وضعیت، ارسال تراکنش به بلاکچین ضروری است. در قرارداد SimpleStorage، تابع set وظیفه‌ی به‌روزرسانی متغیر num را بر عهده دارد. بررسی دقیق‌تر این تابع، نکات زیر را آشکار می‌کند:

```solidity
function set(uint _num) public {
num = _num;
}
```

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

خواندن مقادیر از State Variable

برخلاف نوشتن در یک متغیر وضعیت، خواندن مقدار آن بدون هزینه است و به هیچ کارمزد تراکنشی نیاز ندارد. در قرارداد SimpleStorage، تابع get به ما اجازه می‌دهد تا مقدار فعلی num را بازیابی کنیم.

بر خلاف نوشتن در یک متغیر وضعیت، خواندن مقدار آن بدون هزینه و نیاز به کارمزد تراکنش انجام می‌شود. در قرارداد SimpleStorage، تابع get امکان بازیابی مقدار فعلی num را فراهم می‌کند:

```solidity
function get() public view returns (uint) {
return num;
}
```

تابع get با دو صفت public و view تعریف شده است. صفت public امکان دسترسی خارجی به تابع را فراهم می‌کند و صفت view تضمین می‌کند که تابع هیچ‌گونه تغییری در وضعیت قرارداد ایجاد نکند. با فراخوانی تابع get می‌توان مقدار فعلی num را بدون متحمل شدن هیچ هزینه تراکنشی بازیابی کرد.

نتیجه‌گیری

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

Sample Code

کد کامل قرارداد SimpleStorage در بلاک زیر ارائه شده است:

/// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
contract SimpleStorage {
 // State variable to
store a number
 uint public num;
// You need to send a transaction to write to a state variable.
 function set(uint _num) public {
 num = _num;
 }
// You can read from a state variable without sending a transaction.
 function get() public view returns (uint) {
 return num;
 }
}
به یاد داشته باشید برای تعامل با قرارداد، باید آن را در یک شبکه توسعه اتریوم کامپایل و دیپلوی کنید.

قرارداد SimpleStorage ارائه شده، نحوه خواندن و نوشتن یک state variable را به نمایش می‌گذارد. در ادامه به بررسی دقیق‌تر اجزای آن می‌پردازیم:

1. State Variable:

  • قرارداد شامل یک State Variable به نام num است که به عنوان یک عدد صحیح بدون علامت عمومی (uint public) تعریف شده است.
  • استفاده از عبارت public به عنوان شناسه دسترسی، به طور خودکار یک تابع getter برای متغیر num ایجاد می‌کند.
  • مقدار پیش‌فرض num برابر با ۰ است.

2. Set Function:

  • تابع set با دریافت یک پارامتر _num از نوع uint، امکان به‌روزرسانی مقدار متغیر num را فراهم می‌کند.
  • صفت دیده‌پذیری public، دسترسی به این تابع را از داخل و خارج قرارداد (contract) امکان‌پذیر می‌سازد.
  • در بدنه تابع، مقدار _num به متغیر num تخصیص داده می‌شود که منجر به به‌روزرسانی مقدار آن خواهد شد.

3. Get Functions:

  • این تابع امکان خواندن مقدار فعلی متغیر num را فراهم می‌کند.
  • تابع get با دید عمومی (public) و فقط خواندنی (view) تعریف شده است.
  • با فراخوانی تابع get، مقدار فعلی num بازیابی می‌شود.

نتیجه‌گیری

درک نحوه خواندن و نوشتن State Variable در زبان برنامه‌نویسی Solidity، برای توسعه قراردادهای هوشمند قوی و کارآمد، امری ضروری است. State variables امکان ذخیره‌سازی دائمی داده‌ها را بر روی بلاک‌چین فراهم می‌کنند. اگرچه نوشتن در یک State variables، شامل هزینه تراکنش می‌شود، اما خواندن از آن رایگان است. با استفاده کارآمد از State variables، می‌توانید داده‌ها را ذخیره و بازیابی کنید که این امر، توسعه برنامه‌های غیرمتمرکز قدرتمند را تسهیل می‌کند. Solidity مجموعه‌ای گسترده از امکانات و قابلیت‌ها را برای ساخت سیستم‌های امن و شفاف بر روی پلتفرم‌های مختلف بلاک‌چین ارائه می‌دهد. برای دستیابی به پتانسیل کامل توسعه قراردادهای هوشمند، به کاوش و آزمایش خود ادامه دهید!

Happy coding!



این مقاله،از مقالات ترجمه شده از سالیدیتی آکادمی است برای خواندن مقاله اصلی می‌توانید به لینک زیر🔸 مراجعه کنید:

https://medium.com/@solidity101/100daysofsolidity-exploring-reading-and-writing-to-state-variables-in-solidity-91ea5b9013a6

🔸 شما می‌توانید برای خواندن ادامه مقالات ترجمه شده این آکادمی به سالیدیتی آکادمی مراجعه کنید.