ویرگول
ورودثبت نام
sepisoltani
sepisoltani
خواندن ۴ دقیقه·۳ سال پیش

آموزش زبان Solidity (قسمت دوم)

مفهوم آرایه (Arrays) چیست و چه کاربردی دارد؟

مثل اکثر زبان های برنامه نویسی از آرایه ها برای نگه داری چندین مقدار استفاده می کنیم. در سالیدیتی ۲ نوع آرایه وجود دارد. آرایه fixed و آرایه dynamic.

ارایه های fixed طول ثابتی دارند و قابل افزایش نیستند. آرایه های dynamic طول ثابتی ندارند و می توان طول آن ها را افزایش داد و مقادیر بیشتری به آن ها اضافه کرد.

در هنگام تعریف یک آرایه باید data type عناصر آن مشخص باشد. به مثال های زیر دقت کنید:

https://gist.github.com/sepisoltani/597618f74a4a95aa6670eb5feb75d732

شما می توانید یک آرایه از نوع struct هم تعریف کنید . در قسمت اول آموزش یک struct از نوع Person تعریف کردیم. به مثال زیر دقت کنید . یک آرایه از نوع Person و به صورت داینامیک تعریف شده.

https://gist.github.com/sepisoltani/23dd1f34e16176c0decb6f200a3072e6

به خاطر دارید که در قسمت قبلی گفتم state variable ها برای همیشه در بلاکچین اتریوم ذخیره می شوند؟ با تعریف آرایه های داینامیک می توانیم یک سری اطلاعات را داخل storage نگه داری کنیم. مثل یک دیتابیس. به آن عنصر اضافه کنیم. اجزای ارایه را تغییر بدهیم. به آن عنصر اضافه کنیم. یا از آن عنصر حذف کنیم. دقیقا مثل یک پایگاه داده.

مفهوم public arrays چیست و چه کاربری دارد ؟

در هنگام تعریف یک آرایه می توانیم آن را public تعریف کنیم. در واقع یک آرایه public از بیرون contract خودش قابل خواندن است. ولی قابل نوشتن نیست. آرایه های public می توانند برای نگه داری اطلاعات public داخل contract ها مورد استفاده قرار بگیرند.

مفهوم function چیست و چگونه یک function تعریف کنیم ؟

مانند اکثر زبان های برنامه نویسی از فانکشن ها برای دسته بندی کد هایی که رفتار به خصوصی دارند استفاده می کنیم. به فانکشن زیر دقت کنید.

https://gist.github.com/sepisoltani/e6b9bccce9d01eb39a814ef0e7fb5da7

یک فاکشن با اسم eatHotDogs تعریف شده است که ۲ پارامتر (ورودی های تابع) می گیرد. یکی از نوع uint و کی از نوع string. بدنه ی این فانکشن فعلا خالی هست. توجه کنید که فانکشن به صورت public تعریف شده است. اگر دقت کنید متوجه می شوید که مشخص کردیم متغیر name کجا ذخیره شود . در داخل مموری (memory) ! . برای دیتا تایپ های از نوع reference type یعنی arrays - struct ها و mapping ها و string ها حتما باید مشخص کنیم کجا ذخیره بشوند.

حالا reference type چی هست ؟

در سالیدیتی به ۲ روش می توان اطلاعات را به فانکش ها پاس داد. یکی By value و دیگری By reference.

پاس دادن به صورت By value به این معنی است که کامپایلر سالیدیتی یک کپی جدید از مقدار پارامتر ایجاد کرده و آن را به فانکشن شما منتقل می کند. این به فانکشن شما اجازه می دهد تا مقدار را بدون نگرانی از تغییر مقدار پارامتر اولیه تغییر دهید. یعنی اگر مقدار پارامتر را داخل فانکشن تغییر دهید مقدار پارامتری که از بیرون فانکشن پاس دادید تغییر نمی کند.

پاس دادن به صورت By reference هم یعنی که فانکشن شما با اشاره به متغیر اصلی فراخوانی می شود. بنابراین، اگر فانکشن شما مقدار متغیری را که دریافت می کند تغییر دهد، مقدار متغیر اصلی که از بیرون فانکشن پاس دادید تغییر می کند.

اگر بخواهیم یک متغیر را به روش By value به فانکشن پاس بدهیم باید از کلید واژه memory در تعریف پارامتر فانکشن استفاده کنیم. در فانکشن بالا متغیر name به صورت memory تعریف شده است. یعنی مقدار متغیری که به این پارامتر پاس داده می شود فقط درون فانکشن تغییر می کند.

توجه: یک قرارداد و توافق بین تمام توسعه دهندگان سالیدیتی وجود دارد که اول اسم پارامتر های فانکشن ها باید با _ شروع بشود . من از این قرارداد در تمام قسمت های این سری آموزش استفاده می کنم.

برای فراخوانی کردن یک فانکشن به صورت زیر عمل می کنیم.

https://gist.github.com/sepisoltani/c82187009c87037c8468af20ce96ac49

افزودن عنصر به آرایه ها چگونه است ؟

به contract زیر دقت کنید . یک struct تعریف شده با نام Person. هر Person باید یک name و یک age داشته باشد. همچنین یک آرایه که می تواند تعدادی Person را نگه داری کند به اسم people تعریف شده است.

به فانکشن درون contract دقت کنید . بدنه این فانکشن یک Person جدید ایجاد می کند و آن را به آرایه people اضافه می کند.

https://gist.github.com/sepisoltani/65b3d8e710f0063e4099b3e44a427a7b

توجه کنید که push عنصر جدید را همیشه به انتهای آرایه اضافه می کند.



امیدوارم لذت برده باشید. در قسمت بعدی موارد بیشتری را آموزش می دهیم. اگر قسمت قبل را مطالعه نکرده اید از لینک زیر استفاده کنید و حتما مطالعه کنید.

آموزش سالیدیتی قسمت اول

اگر دوست داشتید من را در لینکدین دنبال کنید.

سالیدیتیsolidityآموزش سالیدیتیقرارداد هوشمندبلاک‌چین
Senior backend developer
شاید از این پست‌ها خوشتان بیاید