כמפתחים חדשים או וותיקים, חלכם אולי מצאתם לנכון לעבור עם שפות מבוססות טייפים, וחלקכם אולי פחות. גם מי שכן עובד עם טייפים, בשפות מסויימות, למשל typescript, אפשר למצוא כי החשיבות לא גבוהה, כלומר אפשר גם בקלות לוותר עליהם או לעשים טייפים גולבלים או מספר טייפים וכל החשיבות של טייפים היא נטו לצורך נוחות ואם זה לא מדויק אז לא נורא. כמפתחי בלוקציין, או מפתחים שרוצים להיות מפתחי בלוקציין, כל ״הנחה״ שתעשו עם הטייפים תעלה לכם ביוקר, החשיבות של להיות gas efficient smart contract מתחיל בדיוק הטייפים. חלק מהותי של קורס סולידיטי זה הוא לנסות ולהחדיר בכם את ההבנה וכך תוכלו לייצר חוזה מדוייק ורזה מגז מיותר. ועכשיו אחרי כל ההקדמה הזו מה הם הטייפים constant, immutable?
בפוסט הקודם דיבנו על משתנים שהם state variable , שנשמרים במעיין מחסנית של נתונים שקשורים לחוזה, והם זמינים לנו (ולכל העולם) ומשתנים אלו מוגדרים בראשית החוזה (מעל קונסטרקטור) וכן הם מסוג storage. אך נוכל להגדיר משתנים בראשית החוזה שאינם storage, והם יכולים להיות משנה טייפים הבאים:
constant, immutable
להלן דוגמה שתמחיש מי אלו המשתנים והיכן ניתן להשתמש שהם ובהמשך הסבר מפורט:
// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.9; contract ConstantTypes { uint constant FAV_NUMBER = 9; uint immutable i_second_fav_number; constructor() { i_second_fav_number = 10; } function getFaveNumber() public pure returns(uint) { return FAV_NUMBER; } }
אז יש השואלים מה ההבדלים בין constant and immutable, אז אפשר לראות את ההבדל היחידי בינהם בדוגמה הזו, ואסביר:
- constant – אינו ניתן לשינוי ומקבל את הגדרתו כבר בזמן הקמפול של הקוד.
- immutable – אינו ניתן לשינוי , אלא אם אינו הוגדר בתחילת הקמפול, יהיה ניתן להגדיר אותו בזמן הקונסטרקטור.
חושב לציין כי מידע זה אינו נשמר ב storage slots אלא הם חלק מה bytecode של החוזה עצמו. כמו כן, אפשר לראות איזו קונבנציה שהשתמשתי פה, זה נכון להרבה ממתכנתי סולידיטי, כך ש constant כותבים באותיות גודולת. ועבור immutable נשתמש ב i_ בתחילת השם של המשתנה.
חלק ראשון – constant, immutable
שימוש נכון במשתנים ושימוש ב constant and immutable יהיה לכם חסכון בגז, עוד יותר מכך שהכל יהיה תקין ובמידה ויש משתנים שהינם קבועים ולא ניתנים לשינוי, מאוד מומלץ לא לאפשר זאת ולקבוע זאת מראש באמצעות ההגדרות הללו.
למעשה סיימנו את הפוסט הזה, הוא קצר וממוקם, וגם חשוב, נתקלתי כבר לא במעט חוזים שאנשים רשמו משתנים שאינם קבועים, שכן בהחלט היו יכולים להיות קבועים, וזה חבל מהמון בחינות. ולכן יש להקפיד על הגדרות הללו וכל הגדרות אחרות שתלמדו בהמשך כי להיות מפתח בלוקציין טוב זה אומר הקפדה מקסימלית כי מכאן הכל מתחיל וכפי שאתם יודעים ברגע שהדברים עולים לבלוקציין, אין יכולת חזרה. בהצלחה ונתראה בשיעורי ההמשך בקורס סולידי זה. 🐊🤓