وبلاگ

آرایه ها در زبان برنامه نویسی سالیدیتی

آرایه ها در زبان برنامه نویسی سالیدیتی
سالیدیتی مقالات آموزشی

آرایه ها در زبان برنامه نویسی سالیدیتی

مانند اکثر زبان های برنامه نویسی از آرایه ها برای نگه داری چندین مقدار استفاده می کنیم.آرایه ها معمولا از یک نوع داده ای خاص (مثلا مجموعه ای از 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 {
        // ...
    }
}
آرایه لیترال [1, -1] نامعتبر است زیرا نوع عبارت اول int8است در حالی که نوع دوم int8است و نمی‌توان آنها را به طور ضمنی به یکدیگر تبدیل کرد. برای استفاده از آن، می‌توانید از [int8(1), -1] استفاده کنید.

ساخت یک آرایه داینامیک (پویا) در سالیدیتی

در این بخش می خواهیم به شما مراحل ساخت یک آرایه dynamic یا به اصطلاح dynamic array را در زبان برنامه نویسی سالیدیتی آموزش دهیم و مراحل ساخت این آرایه به همراه تست در محیط Remix-IDE را یاد دهیم پس با ما همراه باشید.

مرحله اول: ابتدا Remix-IDE را باز کنید. لینک Remix-IDE

مرحله دوم:از قسمت FILE EXPLORERS در سمت چپ محیط Remix آیکن سالیدیتی را انتخاب و از قسمت File یک فایل جدید با نام  dynamicArray.sol بسازید و بر روی Ok بزنید (مانند تصویر زیر)

مشاهده  اینترفیس در برنامه نویسی سالیدیتی
ساخت آرایه در سالیدیتی
ساخت فایل در محیط Remix

مرحله سوم:کدهای زیر را در فایلی که ساختید (dynamicArray.sol) وارد نمایید.هم چنین می توانید فایل مربوط به کد های زیر را از طریق لینک زیر دانلود و پس از اجرا در محیط سالیدیتی وارد نمایید.

dynamicArray


// 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 همانند تصویر زیر

محیط Solidity Compiler tab
کامپایل کردن پروژه سالیدیتی

مرحله پنجم: پس از کامپایل کردن پروژه خود از بخش Deploy and Run Transaction فایل خود را هماندد تصویر زیر Deploy کنید.

دیپلوی کردن پروژه سالیدیتی
بخش Deploy and Run Transaction

مرحله ششم: انجام عملیات مختلف بر روی آرایه های قرارداد deployed شده مانند همانند تصویر زیر

deployed contracts section
بررسی آرایه ها در قرارداد هوشمند سالیدیتی

دیدگاه خود را اینجا قرار دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

محبوب ترین دوره ها

برچسب های محبوب

Mapping Solidity Inheritance آموزش برنامه نویسی سالیدیتی آموزش سالیدیتی آموزش قرارداد هوشمند اجزای قرارداد هوشمند ارز دیجیتال اتریوم ارز دیجیتال یونی ارزهای متاورسی الگوریتم اثبات کار الگوریتم اجماع امنیت کیف پول اهمیت قرارداد هوشمند اپلیکیشن متمرکز برنامه نویس سالیدیتی برنامه نویسی اتریوم برنامه نویسی بلاکچین برنامه نویسی ریمیکس برنامه نویسی سالیدیتی برنامه نویسی شی‌ گرا برنامه نویسی قرارداد هوشمند بلاکچین بلاک چین اتریوم بهترین ارزهای دیجیتال ترون چیست توسعه دهنده سالیدیتی صرافی های ارزدیجیتال صرافی‌ غیرمتمرکز قرارداد هوشمند قیمت پولکادات متاورس مزایای قرارداد هوشمند نوشتن سیستم رای گیری با سالیدیتی نوشتن قرارداد هوشمند واقعیت مجازی متاورس ویژگی‌های اتریوم پلتفرم های ارزدیجیتال پیش نیاز قرارداد هوشمند کاربرد قرارداد هوشمند کد نویسی سالیدیتی کسب درآمد با قرارداد هوشمند کسب درآمد در متاورس کیف پول ارزدیجیتال کیف پول الکترونیکی کیف پول نرم‌افزاری