روز ۱۳/‍۱۰۰ - آشنایی با آرایه‌ها در زبان سالیدیتی

در این مقاله، ما به مفهوم آرایه‌ها(arrays) در Solidity، یک زبان برنامه‌نویسی با تایپ ایستا که برای توسعه قراردادهای هوشمند بر روی بلاک‌چین اتریوم استفاده می‌شود، می‌پردازیم. آرایه‌ها یک ساختار داده ضروری در برنامه‌نویسی هستند که به ما امکان ذخیره و دستکاری مجموعه‌هایی از عناصر را می‌دهند. Solidity روش‌های مختلفی برای کار با آرایه‌ها ارائه می‌دهد، از جمله مقداردهی اولیه، دسترسی، اصلاح و حذف عناصر. ما در این مقاله به پوشش جزئیات این جنبه‌ها و ارائه نمونه‌های کد برای نشان دادن نحوه استفاده از آن‌ها می‌پردازیم.

#100DaysOfSolidity 📚 Array: An Introduction to Solidity Language #13
#100DaysOfSolidity 📚 Array: An Introduction to Solidity Language #13


آغاز به کار با 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 را نشان می‌دهیم. آرایه‌های حافظه زمانی مفید هستند که نیاز به ایجاد آرایه‌های موقت در داخل یک تابع داشته باشید.

روش‌های حذف عنصر از آرایه:

در ادامه به بررسی دو روش مختلف برای حذف عناصر از یک آرایه در زبان برنامه نویسی سالیدیتی می پردازیم:

  1. حذف با جابجایی عناصر:
contract ArrayRemoveByShifting {
 uint[] public arr;
function remove(uint _index) public {
 require(_index < arr.length, &quotindex out of bound&quot);
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) روی بلاکچین اتریوم خیلی مهم است.



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

https://medium.com/@solidity101/100daysofsolidity-array-an-introduction-to-solidity-language-13-e87bc7edc3e6

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