آموزش آرایه ها در فضای ذخیره سازی (Storage) در سالیدیتی

آموزش آرایه ها در فضای ذخیره سازی در سالیدیتی

ممکن است در بخش مربوط به آرایه ها متوجه شده باشید که سه مورد عمداً ذکر نشده‌اند:

  • نوشتن روی یک ایندکس خاص در آرایه

  • افزودن مقدار به انتهای آرایه (append)

  • حذف مقدار از انتهای آرایه (pop)

دلیل این امر آن است که این عملیات ها به‌ندرت روی آرایه هایی انجام می‌شوند که به‌عنوان ورودی به توابع ارسال شده اند (مانند calldata). اما زمانی‌که آرایه ها به‌صورت متغیرهای ذخیره سازی (storage) تعریف شده باشند، انجام این عملیات ها رایج‌تر است.

در اینجا چند کد برای مثال آورده شده است:

پیشنهاد می‌شود این کد را در محیط Remix کپی و اجرا کنید تا درک بهتری از نحوه عملکرد آن به‌دست آورید.

برای مثال، اگر تابع setMyArray را با آرایه [1,2,3,4,5,6] فراخوانی کنید و سپس تابع getLength() را اجرا نمایید، مقدار ۶ را دریافت خواهید کرد. حال اگر تابع addToArray را با مقدار ورودی ۱۰ فراخوانی کنید و مجدد getLength() را اجرا نمایید، خروجی برابر ۷ خواهد بود. با اجرای تابع removeFromArray() یک عنصر از انتهای آرایه حذف می‌شود و طول آن مجدداً به ۶ کاهش می‌یابد.

نمایش خودکار آرایه در Remix

از آن‌جا که متغیر myArray به‌صورت public تعریف شده است، کامپایلر به‌صورت خودکار تابعی به همین نام ایجاد می‌کند که امکان مشاهده مقادیر آرایه از طریق ایندکس را فراهم می‌کند:

اما کل آرایه را برنمی‌گرداند. یک اندیس (index) را درخواست می‌کند و مقدار موجود در آن اندیس را برمی‌گرداند. تابع myArray به این صورت عمل می‌کند:

برای دریافت کل آرایه باید از تابع getEntireArray() استفاده کنید.

نکته مهم دیگر این است که تابع pop() فقط عنصر انتهایی را حذف می‌کند و مقداری بازنمی‌گرداند.

حذف یک عنصر خاص از آرایه در سالیدیتی

زبان Solidity به‌صورت مستقیم امکان حذف یک عنصر از میانه آرایه همراه با کاهش طول آرایه را ندارد. اگر تابع زیر را اجرا کنید، مقدار عنصر مورد نظر برابر صفر خواهد شد، اما طول آرایه تغییر نخواهد کرد:

تکنیک Pop and Swap

برای حذف کامل یک عنصر و کاهش طول آرایه، باید از روش «Pop and Swap» استفاده کنید. این روش عنصر مورد نظر را با آخرین عنصر آرایه جایگزین کرده و سپس عنصر انتهایی را حذف می‌کند:

توجه داشته باشید که این روش ترتیب عناصر در آرایه را حفظ نمی‌کند و فقط برای حذف سریع مفید است.

رشته ها (Strings) در سالیدیتی

رشته ها نیز مشابه آرایه ها رفتار می‌کنند، اما تفاوت‌هایی نیز دارند:

  • رشتههای public کل مقدار خود را بازمی‌گردانند، زیرا برخلاف آرایه‌ها، قابلیت ایندکس‌گذاری ندارند.

  • متدهایی مانند pop() و length برای رشته‌ها وجود ندارند.

مثال:

5/5 - (1 امتیاز)

راستی! برای دریافت مطالب جدید در کانال تلگرام یا پیج اینستاگرام سورس باران عضو شوید.

پکیج صفر تا صد آموزش سئو و بهینه سازی بصورت عملی
  • انتشار: ۱۰ اردیبهشت ۱۴۰۴

دسته بندی موضوعات

آخرین محصولات فروشگاه

مشاهده همه

نظرات

بازخوردهای خود را برای ما ارسال کنید