آموزش مپینگ های تو در تو در سالیدیتی
در اغلب زبانهای برنامه نویسی، یک هش مپ (Hashmap) یا مپ (Map) میتواند شامل مپ دیگری باشد. سالیدیتی نیز از این قابلیت پشتیبانی میکند. اما از آنجا که مپینگ ها در سالیدیتی نمیتوانند بهعنوان خروجی یک تابع بازگردانده شوند، هنگام استفاده از آنها باید تمامی کلید های مورد نیاز را به تابع بدهید.
بیایید به یک مثال ساده نگاه کنیم:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
contract ExampleContract { mapping(uint256 => mapping(uint256 => uint256)) public nestedMap; function setNestedMap( uint256 key1, uint256 key2, uint256 finalValue ) public { nestedMap[key1][key2] = finalValue; } function getNestedMap( uint256 key1, uint256 key2 ) public view returns (uint256) { return nestedMap[key1][key2]; } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
contract TrackDebt { mapping(address => mapping(address => uint256)) public amountOwed; function setAmountOwed( address borrower, address lender, uint256 amount ) public { amountOwed[lender][borrower] = amount; } } |
در این مثال، ترتیب پارامتر ها اهمیت دارد. این ساختار به این معناست که هر وام دهنده (lender) میتواند چند وام گیرنده (borrower) داشته باشد. اگر ترتیب را برعکس میکردیم، یعنی borrower در ابتدا قرار میگرفت، آنگاه معنای ساختار این میشد که هر وام گیرنده ممکن است چند وام دهنده داشته باشد.
همان محدودیتهایی که برای مپینگ های ساده وجود دارد، برای مپینگ های تو در تو نیز صادق است:
-
نمیتوان کلید های آنها را پیمایش (iterate) کرد.
-
نمیتوان آنها را درون یک تابع تعریف کرد.
-
نمیتوان آنها را از یک تابع بازگرداند.
نکته: مپینگ های عمومی تو در تو به درستی کار نمیکنند
یکی دیگر از ویژگیهای عجیب سالیدیتی این است که اگر یک مپینگ را بهصورت public
تعریف کنید، کامپایلر بهصورت خودکار برای آن یک تابع getter ایجاد میکند. اما این توابع getter تنها در صورتی قابل استفادهاند که شما همه کلید های لازم را به آنها بدهید.
بله، درست خواندید!
راهحل استاندارد این است که مپینگ های تو در تو را به صورت private
تعریف کرده و سپس یک تابع عمومی (public
) برای خواندن مقادیر مورد نیاز ایجاد کنید.
راستی! برای دریافت مطالب جدید در کانال تلگرام یا پیج اینستاگرام سورس باران عضو شوید.
- انتشار: ۱۰ اردیبهشت ۱۴۰۴
دسته بندی موضوعات
- آموزش ارز دیجیتال
- آموزش برنامه نویسی
- آموزش متنی برنامه نویسی
- اطلاعیه و سایر مطالب
- پروژه برنامه نویسی
- دوره های تخصصی برنامه نویسی
- رپورتاژ
- فیلم های آموزشی
- ++C
- ADO.NET
- Adobe Flash
- Ajax
- AngularJS
- apache
- ARM
- Asp.Net
- ASP.NET MVC
- AVR
- Bootstrap
- CCNA
- CCNP
- CMD
- CSS
- Dreameaver
- EntityFramework
- HTML
- IOS
- jquery
- Linq
- Mysql
- Oracle
- PHP
- PHPMyAdmin
- Rational Rose
- silver light
- SQL Server
- Stimulsoft Reports
- Telerik
- UML
- VB.NET&VB6
- WPF
- Xml
- آموزش های پروژه محور
- اتوکد
- الگوریتم تقریبی
- امنیت
- اندروید
- اندروید استودیو
- بک ترک
- بیسیک فور اندروید
- پایتون
- جاوا
- جاوا اسکریپت
- جوملا
- دلفی
- دوره آموزش Go
- دوره های رایگان پیشنهادی
- زامارین
- سئو
- ساخت CMS
- سی شارپ
- شبکه و مجازی سازی
- طراحی الگوریتم
- طراحی بازی
- طراحی وب
- فتوشاپ
- فریم ورک codeigniter
- فلاتر
- کانستراکت
- کریستال ریپورت
- لاراول
- معماری کامپیوتر
- مهندسی اینترنت
- هوش مصنوعی
- یونیتی
- کتاب های آموزشی
- Android
- ASP.NET
- AVR
- LINQ
- php
- Workflow
- اچ تی ام ال
- بانک اطلاعاتی
- برنامه نویسی سوکت
- برنامه نویسی موبایل
- پاسکال
- پایان نامه
- پایتون
- جاوا
- جاوا اسکریپت
- جی کوئری
- داده کاوی
- دلفی
- رباتیک
- سئو
- سایر کتاب ها
- سخت افزار
- سی اس اس
- سی پلاس پلاس
- سی شارپ
- طراحی الگوریتم
- فتوشاپ
- مقاله
- مهندسی نرم افزار
- هک و امنیت
- هوش مصنوعی
- ویژوال بیسیک
- نرم افزار و ابزار برنامه نویسی
- وردپرس