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

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

مفهوم private و public در فانکشن های سالیدیتی چیست؟

به صورت پیشفرض در زبان سالیدیتی فانکشن ها به صورت public هستند. یعنی اگر مشخص نشود که فانکشن public است یا private به صورت پیشفرض سالیدیتی آن را public در نظر می گیرد و هر شخصی می تواند این فانکشن را فراخوانی کند.

گاهی لازم است یک فانکشن فقط توسط بقیه فانکشن های درون contract فراخوانی شود. در این مواقع باید فانکشن را به صورت private تعریف کرد. به مثال زیر دقت کنید:

https://gist.github.com/sepisoltani/66e312289831b9845ebcd32996ed402f

همانطور که مشاهده می کنید توسط کلید واژه private در انتهای تعریف فانکشن این فانکشن به صورت private تعریف شد و حالا فقط توسط خود contract قابل فراخوانی است. معمولا به صورت توافقی توسعه دهندگان سالیدیتی اول اسم فانکشن های private را با خط تیره شروع می کنند.

مفهوم return در فانکشن های سالیدیتی چیست؟

مانند بقیه زبان های برنامه نویسی برای برگرداندن نتیجه عملیات درون یک فانکشن از return استفاده می شود. در سالیتی تایپ برگشتی فانکشن ها هم باید مشخص شوند. در مثال زیر تایپ خروجی فانکشن string تعریف شده است. به مثال زیر دقت کنید:

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

مفهوم function modifier چیست و چه کاربری دارد؟

در فانکشن فوق هیچ متغیری تغییر نکرده. فقط مقدار یک متغیر از contract برگردانده شده و این مقدار دست خوش هیچ تغییری نشده است. به این فانکشن ها فانکشن های view می گویند. یعنی فقط اطلاعات را می خوانند. در واقع باید فانکشن فوق را به صورت زیر تعریف کرد:

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

گاهی فانکشن ها در سالیدیتی به هیچ متغیری از contract وابسته نیستند. نه متغیر های contract را تغییر می دهند و نه می خوانند. در واقع فقط یک سری پارامتر دریافت می کنند و یک سری عملیات را روی آن دریافتی ها انجام می دهند. در سالیدیتی به این نوع فانکشن ها pure گفته می شود. به مثال زیر دقت کنید . این یک فانکشن pure است و به صورت pure نیز تعریف شده:

https://gist.github.com/sepisoltani/549815ef1552cc185575dcdfcafe9d45

همان طور که مشاهده می کنید فانکشن multiply فوق فقط با متغیر های دریافتی خودش یعنی متغیر a و متغیر b کار می کند و هیچ عملیات خواندن و یا نوشتن روی بقیه متغیر های contract ندارد. لذا به صورت pure تعریف شده است.

نکته: در سالیدیتی لازم نیست pure بودن یا view بودن فانکشن ها توسط ما تشخیص داده شوند. خوشبختانه کامپایلر سالیدیتی و IDE ها به ما warning می دهند و ما متوجه می شویم.

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

فانکشن Keccak256 یک hash فانکشن از نوع SHA3 است و در سالیدیتی از پیش تعریف شده است. این فانکشن ورودی را تبدیل به یک عدد ۲۵۶ بیتی هگزا دسیمال تصادفی تبدیل می کند.در واقع یک تغییر کوچک در ورودی باعث یک تغییر بزرگ در خروجی می شود. ورودی این تابع باید حتما به صورت bytes باشد. یعنی در واقع هر پارامتری که به این فانکشن به عنوان ورودی پاس داده می شود باید pack شود.

به مثال زیر دقت کنید:

https://gist.github.com/sepisoltani/0e4cfe50df80eb3890096366da2fae22

همانطور که مشاهده می کنید با یک تغییر کوچک در ورودی (aaaab تبدیل به aaaac) حاصل خروجی کاملا متفاوت است. در مثال فوق از فانکشن Keccak256 استفاده شده تا یک عدد سودو کد تصادفی ساخته شود که در ساخت برنامه های dApp اتریوم بسیار کاربردی است.

مفهوم type casting چیست و چه کاربری دارد؟

گاهی لازم است data type ها را به هم تبدیل کرد. به مثال زیر دقت کنید:

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

در کد فوق حاصل ضرب a در b یک uint است نه uint8. در نتیجه چون نتیجه حاصل ضرب در متغیر c ( که از نوع uint8 تعریف شده است) ریخته شده است برنامه خطا می دهد. برای رفع خطا می توانیم تایپ b را به uint8 تغییر دهیم. کافیست از فانکشن uint8 استفاده کنیم و متغیر b را برای آن ارسال کنیم تا تغییر تایپ یا type casting صورت بگیرد.




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

لطفا قسمت های قبلی یعنی قسمت اول و قسمت دوم را هم مطالعه کنید.

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



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