روز ۱۱/۱۰۰ - #100DaysOfSolidity تسلط بر حلقه های For و While در Solidity

زبان برنامه‌نویسی Solidity که برای قراردادهای هوشمند بر روی بلاک‌چین اتریوم به کار می‌رود، از ساختارهای مختلف کنترل جریان از جمله حلقه‌ها پشتیبانی می‌کند. در این مقاله، به بررسی دقیق حلقه‌های for و while در Solidity خواهیم پرداخت. حلقه‌ها به توسعه‌دهندگان این امکان را می‌دهند تا یک بلوک کد را به صورت مکرر اجرا کنند تا زمانی که شرط خاصی برقرار شود. با این حال، استفاده محتاطانه از حلقه‌ها و اجتناب از تکرارهای نامحدود برای جلوگیری از مشکلات محدودیت گس که منجر به شکست تراکنش می‌شود، بسیار مهم است. بیایید حلقه‌های for و while در Solidity را بررسی کرده و نحوه استفاده مؤثر آن‌ها را در توسعه قراردادهای هوشمند بیاموزیم.

#100DaysOfSolidity 📝 Mastering For & While Loops in Solidity
#100DaysOfSolidity 📝 Mastering For & While Loops in Solidity

حلقه for: تکرار با دقت

حلقه for یک ابزار رایج در برنامه نویسی است که به اجرای مکرر و مشخص یک مجموعه از دستورات اجازه می دهد. این حلقه از سه جزء اصلی تشکیل شده است: مقدار شروع(initialization)، معیار تکرار و به روز رسانی شمارنده. به کد Solidity زیر توجه کنید:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
contract Loop {
 function loop() public {
 // for loop
 for (uint i = 0; i < 10; i++) {
 if (i == 3) {
 // Skip to next iteration with continue
 continue;
 }
 if (i == 5) {
 // Exit loop with break
 break;
 }
 // Code block executed for each iteration
 }
 }
}

در این مثال، متغیر i را با مقدار 0 مقداردهی اولیه می‌کنیم و شرط i < 10 را تعریف می‌کنیم. تا زمانی که این شرط برقرار باشد، حلقه تکرار می‌کند. درون حلقه، عبارات شرطی‌ای داریم که کاربرد کلمات کلیدی continue و break را نشان می‌دهند. هنگامی که i برابر با 3 باشد، عبارت continue به سراغ تکرار بعدی می‌رود و به طور مؤثر از باقی کدهای آن تکرار صرف‌نظر می‌کند. از طرف دیگر، زمانی که i برابر با 5 شود، عبارت break حلقه را زودتر از موعد خاتمه می‌دهد و باعث خروج جریان برنامه از کل حلقه می‌شود.

حلقه while: تکرار تا زمانی که شرط برقرار است

حلقه while در سالیدیتی روشی انعطاف‌پذیرتر برای تکرار ارایه می‌دهد، زیرا قبل از هر بار تکرار، یک شرط را ارزیابی می‌کند. این حلقه تا زمانی که شرط درست باشد ادامه می‌یابد. در زیر نمونه‌ای از حلقه while در سالیدیتی آمده است:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
contract Loop {
 function loop() public {
 // while loop
 uint j;
 while (j < 10) {
 j++;
 // Code block executed for each iteration
 }
 }
}

در این قطعه کد، متغیری به نام j تعریف و مقدار اولیه آن صفر قرار داده می‌شود. شرط حلقه while که j < 10 است، قبل از هر بار تکرار ارزیابی می‌شود. تا زمانی که این شرط درست باشد، بلوک کد داخل حلقه اجرا می‌شود. در این حالت، مقدار j در هر بار تکرار به مقدار 1 افزایش می‌یابد. این حلقه زمانی که j برابر یا بیشتر از 10 شود، متوقف می‌شود.

نکات کلیدی و شیوه‌های بهینه

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

۱.محدودیت گس(Gas limit): حلقه‌های Solidity در هر تکرار گس مصرف می‌کنند. حلقه‌های نامحدود یا حلقه‌هایی با تعداد تکرارهای بسیار زیاد می‌توانند منجر به خطاهای "gas limit exceeded errors" شوند که باعث عدم موفقیت تراکنش می‌شود. همیشه مطمئن شوید که حلقه‌های شما حداکثر معقولی دارند یا بر روی یک آرایه با اندازه ثابت یا مجموعه شناخته‌شده از عناصر تکرار می‌شوند.

2.کارایی حلقه(Loop Efficiency): به طور کلی، توصیه می‌شود که میزان محاسبات انجام شده در حلقه‌ها را به حداقل برسانید، زیرا هر تکرار به هزینه گس (Gas) اضافه می‌کند. در صورت امکان، محاسبات پیچیده یا تعاملات خارجی را برای بهینه‌سازی مصرف گس به خارج از حلقه منتقل کنید.

۳.هزینه‌های ذخیره‌سازی(Storage Costs): هنگام کار با حلقه‌ها، به هزینه‌های ذخیره‌سازی توجه داشته باشید. اختصاص مقادیر به متغیرهای ذخیره‌سازی(storage variables) در حلقه‌ها می‌تواند منجر به چندین نوشتن در حافظه شود که می‌تواند پرهزینه باشد. برای کاهش عملیات ذخیره‌سازی، از متغیرهای حافظه یا بهینه‌سازی ساختارهای داده استفاده کنید.

4. انسجام نهایی(Eventual Consistency): به دلیل ماهیت ناهمزمان اجرای بلاکچین، برخی از تغییرات ایجاد شده در یک حلقه ممکن است برای سایر قراردادها یا سیستم‌های خارجی بلافاصله قابل مشاهده نباشند. این موضوع را هنگام طراحی قراردادهای هوشمند در نظر داشته باشید و از لحاظ انسجام نهایی، به آن توجه کنید.

نتیجه‌گیری:

در این مقاله، حلقه های for و while در Solidity را بررسی کردیم، که دو ساختار ضروری کنترل جریان هستند که اجرای مکرر بلوک های کد را امکان پذیر می سازند. ما به نحوۀ عملکرد و کارکرد این حلقه ها نگاه کردیم و ملاحظات و بهترین شیوه هایی را که هنگام کار با حلقه ها در Solidity باید رعایت کرد، مورد بحث قرار دادیم. با استفاده موثر و کارآمد از حلقه ها، توسعه دهندگان می توانند قراردادهای هوشمند ایجاد کنند که به طور بهینه عمل کرده و از خطرات بالقوه مرتبط با مصرف گس و خرابی تراکنش جلوگیری کنند.

در هنگام نوشتن قراردادهای هوشمند در Solidity، همواره موارد استفاده خاص خود را به دقت بررسی کرده و به طور کامل هزینه‌های محاسباتی (Gas Fee) و محدودیت‌های بالقوه مرتبط با حلقه‌ها را در نظر بگیرید. با تسلط بر ساختارها و پیامدهای حلقه‌ها، قادر به نگارش قراردادهای هوشمند قدرتمند و کارآمد خواهید بود.


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

https://medium.com/@solidity101/100daysofsolidity-mastering-for-while-loops-in-solidity-11-a3c406e0ee60

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