AI & ML; Python Programmer And Interested In Decentralized World
روز ۱۳/۱۰۰ - آشنایی با آرایهها در زبان سالیدیتی
در این مقاله، ما به مفهوم آرایهها(arrays) در Solidity، یک زبان برنامهنویسی با تایپ ایستا که برای توسعه قراردادهای هوشمند بر روی بلاکچین اتریوم استفاده میشود، میپردازیم. آرایهها یک ساختار داده ضروری در برنامهنویسی هستند که به ما امکان ذخیره و دستکاری مجموعههایی از عناصر را میدهند. Solidity روشهای مختلفی برای کار با آرایهها ارائه میدهد، از جمله مقداردهی اولیه، دسترسی، اصلاح و حذف عناصر. ما در این مقاله به پوشش جزئیات این جنبهها و ارائه نمونههای کد برای نشان دادن نحوه استفاده از آنها میپردازیم.
آغاز به کار با array در Solidity:
در Solidity، آرایهها میتوانند اندازه ثابت در زمان کامپایل یا اندازه داینامیک داشته باشند. در این بخش به بررسی روشهای مختلف برای ایجاد اولیه یک آرایه میپردازیم:
آرایه با اندازه داینامیک:
```solidity
uint[] public arr;
uint[] public arr2 = [1, 2, 3];
```
در مثال اول، آرایهای داینامیک به نام arr
بدون تعیین اندازه اولیه تعریف میکنیم. کلیدواژه public
این آرایه را از خارج از قرارداد قابل دسترس میکند. در مثال دوم، arr2
با سه عنصر 1، 2 و 3 مقداردهی اولیه میشود.
آرایه با اندازه ثابت:
```solidity
uint[10] public myFixedSizeArr;
```
در اینجا، یک آرایه با اندازه ثابت به نام myFixedSizeArr
با طول ۱۰ تعریف میکنیم. آرایههای با اندازه ثابت، طولی از پیش تعیین شده دارند که در طول زمان اجرا قابل تغییر نیست.
دسترسی و تغییر عناصر آرایه در سالیدیتی
سالیدیتی توابع و تکنیکهای مختلفی را برای دسترسی و تغییر عناصر آرایه ارائه میدهد. در این بخش به بررسی برخی از آنها میپردازیم.
1. دسترسی به عناصر
```solidity
function get(uint i) public view returns (uint) {
return arr[i];
}
```
تابع get
به ما اجازه می دهد تا مقدار مربوط به شاخص خاص i
را از آرایه arr
استخراج کنیم.
۲. بازگرداندن تمام عناصر آرایه:
```solidity
function getArr() public view returns (uint[] memory) {
return arr;
}
```
تابع getArr
کل آرایه arr
را برمیگرداند. با این حال، هنگام استفاده از این روش با آرایههایی که میتوانند بهطور نامحدود رشد کنند، احتیاط کنید، زیرا میتواند حجم قابل توجهی از گس را مصرف کند.
۳. افزودن عناصر به انتها(append):
```solidity
function push(uint i) public {
arr.push(i);
}
```
تابع push
عنصر جدید i
را به انتهای آرایه arr
اضافه میکند و طول آن را به اندازه یک واحد افزایش میدهد.
۴. پاک کردن عناصر از آرایه (remove):
```solidity
function pop() public {
arr.pop();
}
```
تابع pop
آخرین عنصر آرایه arr
را حذف و طول آن را به اندازه یک واحد کاهش میدهد.
۵. طول آرایه:
```solidity
function getLength() public view returns (uint) {
return arr.length;
}
```
تابع getLength
با دریافت آرایه arr
به عنوان ورودی، طول آن را محاسبه کرده و به عنوان خروجی برمیگرداند.
۶. حذف کردن عناصر:
```solidity
function remove(uint index) public {
delete arr[index];
}
```
تابع remove
عنصر موجود در شاخص مشخص شده index
در آرایه arr
را حذف می کند. کلمه کلیدی delete
مقدار آن شاخص را به مقدار پیش فرض آن (در این مورد 0) بازنشانی می کند بدون اینکه طول آرایه را تغییر دهد.
۷. کار با آرایههای حافظه:
```solidity
function examples() external {
uint[] memory a = new uint[](5);
}
```
در تابع examples
، نحوه ایجاد یک آرایه حافظه با اندازه ثابت 5 را نشان میدهیم. آرایههای حافظه زمانی مفید هستند که نیاز به ایجاد آرایههای موقت در داخل یک تابع داشته باشید.
روشهای حذف عنصر از آرایه:
در ادامه به بررسی دو روش مختلف برای حذف عناصر از یک آرایه در زبان برنامه نویسی سالیدیتی می پردازیم:
- حذف با جابجایی عناصر:
contract ArrayRemoveByShifting {
uint[] public arr;
function remove(uint _index) public {
require(_index < arr.length, "index out of bound");
for (uint i = _index; i < arr.length - 1; i++) {
arr[i] = arr[i + 1];
}
arr.pop();
}
function test() external {
arr = [1, 2, 3, 4, 5];
remove(2);
// [1, 2, 4, 5]
assert(arr[0] == 1);
assert(arr[1] == 2);
assert(arr[2] == 4);
assert(arr[3] == 5);
assert(arr.length == 4);
arr = [1];
remove(0);
// []
assert(arr.length == 0);
}
}
در این مثال، تابع remove
عناصری را که بعد از شاخص مشخص شده _index
قرار دارند، به سمت چپ جابجا میکند. سپس از تابع pop
برای حذف عنصر تکراری که در انتهای لیست قرار دارد استفاده میکند.
۲. حذف با جایگزینی با عنصر آخر:
contract ArrayReplaceFromEnd {
uint[] public arr;
function remove(uint index) public {
arr[index] = arr[arr.length - 1];
arr.pop();
}
function test() public {
arr = [1, 2, 3, 4];
remove(1);
// [1, 4, 3]
assert(arr.length == 3);
assert(arr[0] == 1);
assert(arr[1] == 4);
assert(arr[2] == 3);
remove(2);
// [1, 4]
assert(arr.length == 2);
assert(arr[0] == 1);
assert(arr[1] == 4);
}
}
در این مثال، تابع remove
عنصر در موقعیت دلخواه index
را با آخرین عنصر در آرایه جایگزین میکند. سپس از تابع pop
برای حذف آخرین عنصر تکراری استفاده میکند و به طور موثر عنصر مورد نظر را حذف میکند.
نتیجهگیری:
در این مقاله، با آرایه ها در سالیدیتی آشنا شدیم. یاد گرفتیم که چطور آرایه ها را بسازیم، مقداردهی اولیه انجام دهیم، به بلاک هایشان دسترسی پیدا کنیم، مقادیرشان را عوض کنیم و حتی حذفشان کنیم. همه این موارد را با مثال های کد هم تمرین کردیم. آرایه ها ابزارهای قدرتمندی هستند که به ما کمک می کنند تا با گروهی از اطلاعات به طور مرتب کار کنیم. موقع کار با آرایه هایی که ممکن است اندازه شان هیچی توقف نداشته باشد، باید حواسمان باشد که چه نوع آرایه ای انتخاب می کنیم و چقدر برای انجام عملیات روی آن ها gas (گس) مصرف می شود. اینکه بتوانیم خوب با آرایه ها در سالیدیتی کار کنیم، برای ساختن قراردادهای هوشمند پیچیده و برنامه های غیرمتمرکز (dApp) روی بلاکچین اتریوم خیلی مهم است.
🔸 این مقاله،از مقالات ترجمه شده از سالیدیتی آکادمی است برای خواندن مقاله اصلی میتوانید به لینک زیر مراجعه کنید:
🔸 شما میتوانید برای خواندن ادامه مقالات ترجمه شده این آکادمی به سالیدیتی آکادمی مراجعه کنید.
مطلبی دیگر از این انتشارات
روز 6/100 - درک immutability در سالیدیتی: ساخت قراردادهای هوشمند قابل اعتماد
مطلبی دیگر از این انتشارات
روز ۳/۱۰۰ - درک انواع دادههای اولیه در سالیدیتی
مطلبی دیگر از این انتشارات
روز ۹/۱۰۰ - تسلط بر گس و کارمزد گس در تراکنشهای اتریوم: راهنمای جامع