Swift ඉගෙන ගන්නා අය අතර “let” එකක් භාවිතා කරලා class එකක property එකක් වෙනස් කරලා වැඩ කරලා බලලා අමුතුවෙන් හුඟාක් අමුතුයි කියලා සිතෙනවා.
ඒකේ හේතුව “signpost” කියන මූලධර්මයයි. Class එකක් variable එකකට assign කරද්දී, ඒ variable එක ඇත්තේ class instance එකේ memory location එකට යොමු කරන “pointer” එකක් පමණයි. ඒ pointer එක “let” එකක් නම්, එය ස්ථාවරයි; එය වෙනත් object එකකට යොමු නොකරයි. ඒත් pointer එකේ ඉදිරිපස ඇති object එකේ අභ්යන්තර property වෙනස් කිරීමට තැන්පත් නැත, ඒ නිසා let class instance එකේ property වෙනස් කළ හැකිය.
උදාහරණයක් ලෙස, class Ninja එකක් නිර්මාණය කරලා let naruto = Ninja(name: "Naruto", powerLevel: 9000) කියලා assign කළාම, naruto.powerLevel = 9001 කරන්න පුළුවන්. මෙහි “naruto” යනු pointer එක, එය වෙනස් නොවෙයි; නමුත් pointer එකේ ඉදිරිපස ඇති Ninja object එකේ powerLevel වෙනස් වේ.
එකට විරුද්ධව struct එකක් “value type” එකක්. එය data එකම memory එකේ සෘජුවම ගබඩා කරනවා. ඒ නිසා let goku = AnimeCharacter(name: "Goku", powerLevel: 9001) කියලා assign කළාම, goku.powerLevel = 9002 කිරීම compile‑වෙන්නේ නැත. මෙහි “let” කියන්නේ මුළු struct value එකම ස්ථිර බවයි; ඒ value එකේ කොටසක් වෙනස් කරන්නේ නම්, මුළු struct එකම නව value එකක් ලෙස ප්රතිස්ථාපනය කළ යුතුය, එය constant එකකට නොහැක.
ඒ අනුව, let class instance එකේ property වෙනස් කළ හැකි අතර, let struct instance එකේ property වෙනස් කළ නොහැකි බව තේරෙනවා. මෙය Swift වල reference‑type හා value‑type අතර ඇති මූලික වෙනසයි.
ශ්රී ලංකාවට ඇති වැදගත්කම
- දේශීය developers ලට reference‑type හා value‑type අතර ඇති වැදගත් වෙනස තේරුම් ගැනීමට මෙය හොඳ උදාහරණයක්.
- ඉගැන්වීම්, bootcamps, university curricula වලදී “let” භාවිතය නිවැරදිව පැහැදිලි කිරීමෙන් coding errors අඩු වේ.
- ආයතනික software projects වලදී class‑based design සහ struct‑based design අතර තේරීම් සකස් කරගැනීමේදී performance, memory usage, thread‑safety වැනි කරුණු සැලකිල්ලට ගත හැකිය.
- ඉදිරිපත් කරන iOS/Swift apps වල scalability සහ maintainability වැඩි කර ගැනීමට මෙම මූලධර්මය අවශ්යයි.
අවසානයට, Swift භාෂාවේ “let” keyword එකේ අරුත මතක තබා ගැනීම, class සහ struct අතර ඇති structural වෙනස සමඟ, ඔබේ කේත ලේඛනවල නිවැරදි තීරණ ගැනීමට මඟ පෙන්වයි.