آرایه ها در زبان برنامه نویسی سالیدیتی
27 اردیبهشت 1401 1401-03-24 11:57آرایه ها در زبان برنامه نویسی سالیدیتی
آرایه ها در زبان برنامه نویسی سالیدیتی
مانند اکثر زبان های برنامه نویسی از آرایه ها برای نگه داری چندین مقدار استفاده می کنیم.آرایه ها معمولا از یک نوع داده ای خاص (مثلا مجموعه ای از unit یا Boolean ها) هستند.آرایه ها در زبان برنامه نویسی سالیدیتی به این صورت است که به جای ایجاد متغیرهای مختلف از یک نوع داده، می توانید یک آرایه برای ذخیره لیستی از عناصر ایجاد کنید. آرایه ها ساختارهای داده ای هستند که مجموعه ای از اقلام از همان نوع داده را در یک مکان اختصاص داده شده ذخیره می کنند. در زبان برنامه نویسی سالیدیتی دو نوع آرایه وجود دارد.آرایه های استاتیک (fixed) و آرایه های پویا (dynamic).آرایه های ثابت، همانطور که از نام آن پیداست، اندازه مشخصی دارند، اما آرایه های پویا اینطور نیستند.
همانطور که گفتیم سالیدیتی(Solidity) از آرایه هایی با اندازه های ثابت یا پویا پشتیبانی می کند. آرایه ها دارای یک مکان حافظه پیوسته هستند که به این معنی است که کمترین index با اولین عنصر مرتبط است و بالاترین index نشان دهنده آخرین عنصر است.
آرایه های طول ثابت و متغیر در زبان سالیدیتی
آرایه های با طول ثابت آرایه هایی هستند که سایز آنها ازقبل مشخص شده است.یعنی اینکه از لحاظ ظرفیت افزایش یا کاهش پیدا نمی کنند.
به عنوان مثال : ; uint [5] a یک نوع آرایه با طول ثابت می باشد.
;uint[5] my_array
آرایه های های پویا آرایه هایی هستند که طول آنها از قبل مشخص نشده است و در زمان اجرا طول آنها مشخص می شود.
به عنوان مثال : ; uint [] b یک نوع بدون طول مشخص می باشد.
;string[] my_array
عملیات بر روی آرایه ها در زبان برنامه نویسی سالیدیتی
آرایه ها دارای توابعی هستند که به شما امکان اضافه کردن، به روز رسانی و حذف اطلاعات را می دهد.
- Push – یک عنصر را به انتهای آرایه اضافه می کند
- Pop – آخرین عنصر آرایه را حذف می کند
- Length – طول آرایه را بدست می آورد. به عنوان مثال چند آیتم در آرایه وجود دارد
- delete – به شما امکان می دهد یک مورد را در یک مکان خاص در آرایه حذف کنید.
Length:
آرایهها دارای یک عضو lengthهستند که شامل تعداد عناصر آنها است. طول آرایههای مِمُوری پس از ایجاد ثابت است (اما پویا، یعنی میتواند به پارامترها در زمان اجرا بستگی داشته باشد).
push ():
آرایههای storage و bytes پویا (نه string) دارای یک عضو تابع به نام push() هستند که میتوانید از آن برای افزودن یک عنصر مقداردهی شده صفر در انتهای آرایه استفاده کنید. یک ارجاع به عنصر را برمیگرداند، بنابراین میتوان از آن مانند x.push().t = 2 یا x.push() = b استفاده کرد.
push(x):
آرایههای storage و bytesپویا (نه string) دارای یک عضو تابع به نام push(x) هستند که میتوانید از آن برای افزودن یک عنصر مشخص در انتهای آرایه استفاده کنید. تابع هیچ چیزی بر نمیگرداند.
pop:
آرایههای storage و bytes پویا (نه string) دارای یک عضو تابع به نام pop هستند که میتوانید برای حذف یک عنصر از انتهای آرایه استفاده کنید. همچنین به طور ضمنی delete را روی عنصر حذف شده فراخوانی میکند.
افزایش طول یک آرایه storage با فراخوانی push ()هزینه گاز ثابت را دارد زیرا مقداردهی اولیه storage صفر میباشد، در حالی که کاهش طول با فراخوانی pop() هزینهای دارد که به “اندازه” عنصر حذف شده بستگی دارد. اگر آن عنصر آرایهای باشد، میتواند بسیار پرهزینه باشد، زیرا شامل پاک کردن صریح عناصر حذف شده مشابه با فراخوانی delete روی آنها است.
آرایههای لیترال
آرایه لیترال لیستی جدا شده با کاما از یک یا چند عبارت است که در بِراکت مربعی محصور شده است ([…]). به عنوان مثال [1, a, f(3)] . نوع آرایه به صورت زیر تعیین میشود:
همیشه یک آرایه مِمُوری با اندازه ایستا است که طول آن تعداد عبارات است.
نوع پایهی آرایه، نوع اولین عبارت در لیست است به طوری که میتوان بقیه عبارات را به طور ضمنی به آن تبدیل کرد. اگر این امکان وجود نداشته باشد خطای نوع است.
کافی نیست نوعی وجود داشته باشد که همه عناصر بتوانند به آن تبدیل شوند. یکی از عناصر باید از آن نوع باشد. در مثال زیر، نوع [1, 2, 3] ، uint8[3] memory میباشد، زیرا نوع هر یک از این ثابتها uint8 است. اگر میخواهید نتیجه از نوع uint8[3] memory باشد، باید اولین عنصر را به uint8 تبدیل کنید.
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.4.16 <0.9.0;
contract C {
function f() public pure {
g([uint(1), 2, 3]);
}
function g(uint[3] memory) public pure {
// ...
}
}
ساخت یک آرایه داینامیک (پویا) در سالیدیتی
در این بخش می خواهیم به شما مراحل ساخت یک آرایه dynamic یا به اصطلاح dynamic array را در زبان برنامه نویسی سالیدیتی آموزش دهیم و مراحل ساخت این آرایه به همراه تست در محیط Remix-IDE را یاد دهیم پس با ما همراه باشید.
مرحله اول: ابتدا Remix-IDE را باز کنید. لینک Remix-IDE
مرحله دوم:از قسمت FILE EXPLORERS در سمت چپ محیط Remix آیکن سالیدیتی را انتخاب و از قسمت File یک فایل جدید با نام dynamicArray.sol بسازید و بر روی Ok بزنید (مانند تصویر زیر)
مرحله سوم:کدهای زیر را در فایلی که ساختید (dynamicArray.sol) وارد نمایید.هم چنین می توانید فایل مربوط به کد های زیر را از طریق لینک زیر دانلود و پس از اجرا در محیط سالیدیتی وارد نمایید.
// Solidity program to demonstrate
// the above approach
pragma solidity ^0.6.8;
contract DynamicArray{
// Declaring state variable
int[] private arr;
// Function to add data
// in dynamic array
function addData(int num) public
{
arr.push(num);
}
// Function to get data of
// dynamic array
function getData() public view returns(int[] memory)
{
return arr;
}
// Function to return length
// of dynamic array
function getLength() public view returns (uint)
{
return arr.length;
}
// Function to return sum of
// elements of dynamic array
function getSum() public view returns(int)
{
uint i;
int sum = 0;
for(i = 0; i < arr.length; i++)
sum = sum + arr[i];
return sum;
}
// Function to search an
// element in dynamic array
function search(int num) public view returns(bool)
{
uint i;
for(i = 0; i < arr.length; i++) { if(arr[i] == num) { return true; } } if(i >= arr.length)
return false;
}
}
مرحله چهارم:کامپایل کردن پروژه (فایل dynamicArray.sol) از بخش کامپایلر یا Solidity Compiler tab همانند تصویر زیر
مرحله پنجم: پس از کامپایل کردن پروژه خود از بخش Deploy and Run Transaction فایل خود را هماندد تصویر زیر Deploy کنید.
مرحله ششم: انجام عملیات مختلف بر روی آرایه های قرارداد deployed شده مانند همانند تصویر زیر