Skip to main content

පට්ට ගවේසි

කුනු හරුප ගීත හා ශෘංගාරාත්මක කලා නිර්මාන අතර වෙනස ගැන ලියන්න කියල ගත්තට ලියලත් වැඩක් නැහැ වගේ හිතෙනවා.  ජාතියේ හැම පැතිකඩක්ම කඩා වැටෙද්දි, පක්ෂ විපක්ෂ භේදයකින් තොරව දේශපාලුවන් විවිධ ක්‍රම ඔස්සේ රට දූෂ්‍ය කරද්දි එක එක පක්ෂවලට තාමත් හුරේ දමන මරි මෝඩ ජනතාවට කුනුහරුප සිංදු හැර ප්‍රබුද්ධ හෝ සරල රස වින්දන සිංදු දැනේවිද! තම මෑනි, මනුස්සයා යුද්ධ කරද්දි, තමන්ව අවජාතන කල දුකට ශිෂ්නයේ සයිස් එක ගැන සිංදු කීමට දෛර්ය ගත් යොහානිට පට්ට (ග)වේසි නිල නාමය ලබා දුන්නත් අපේ නම් කිසි මෙව්ව එකක් නැක. 

c හා c++ ප්‍රෝග්‍රැමිං - 6


වේරියබල් නේම් (හා වෙනත් ඕනෑම අයිඩෙන්ටිෆයර්) එකක් සඳහා නමක් ලිවීමේදී ඉහත රීති අනිවාර්යෙන්ම පිළිපැදිය යුතු අතර, ඊට අමතරව අනිවාර්ය නොවූවත් පිළිපැදීමට සුදුසු හොඳ පුරුදුද ඇත. නමක් දීමේදී අර්ථවත් නමක් ලබා දෙන්නට උත්සහ කරන්න. උදාහරණයක් ලෙස, වයස, උස, බර යන දත්තයන් සඳහා වේරියබල් 3ක් ඩික්ලෙයාර් කිරීමට අවශ්‍ය යැයි සිතමු. එය පහත ආකාරයට කළ හැකියි.

int var1, var2, var3;

ඉහත ඩික්ලරේෂන් ස්ටේට්මන්ට් එක නිවැරදියි මොකද ඉහත කොන්දේසි සියල්ල සපුරා ඇත. එහෙත්, එම වේරියබල්වලට දී තිබෙන්නේ පොදු නම් 3කි. කුමන වේරියබල් එකෙන් කුමන දත්තය ගබඩා කරන්නේද යන්න ඉන් දිස් වන්නේ නැත. ප්‍රායෝගිකව මෙවැනි වේරියබල් නේම් සමග වැඩ කරන විට, පැටලීම් හා අවුල් වියවුල් ඇතිවීම නිතර සිදු වේවි. එහෙත් ඉහත නම් වෙනුවට අර්ථවත් ලේබල්/නාමයන් යෙදිය හැකි නම් සියල්ල එකවරම පැහැදිලි වේ.

int age, weight, height;

සමහරවිට ඔබට සිතේවි වඩා අර්ථාන්විත වීම සඳහා තනි වචනයක් සහිත නමක් වෙනුවට වචන කිහිපයකින් යුතු නමක් ලියන්නට. එවැනි නමක් ලියන විට, මූලික ක්‍රම දෙකක් ඇත. එකක් නම්, එක් එක් වචනය අන්ඩර්ස්කෝර් එකකින් වෙන් කිරීම. අනෙක් ක්‍රමය නම්, සාමාන්‍යයෙන් අකුරු සියල්ල සිම්පල්වලින් ලියා, නමුත් එක් එක් වචනයෙහි පළමු අකුර පමණක් කැපිටල් කිරීම (පළමු වචනයේ පළමු අකුර සාමාන්‍යයෙන් සිම්පල් විදියටම තිබේ). මෙම දෙවැනි ක්‍රමය camel notation (ඔටු නිරූපණය) ලෙස හැඳින්වේ. ඊට හේතුව ඔටුවාගේ මොල්ලි දිස්වන්නා සේ මැද තිබෙන කැපිටල් අකුරු ලොකුවට ඉලිප්පී පෙනෙන නිසාය.

int mass_of_sun;
int massOfSun;

වේරියබල් නේම් (හෝ වෙනත් ඕනෑම අයිඩෙන්ටිෆයර්) එකක් දීමේදී ඇත්තෙන්ම එම නමෙහි ඇති අක්ෂර සංඛ්‍යාව බයිනරි ප්‍රෝග්‍රෑම් එක විශාල වීමට බල පාන්නේ නැත. ඔබ යම් වේරියබල් නේම් (හෝ ඕනෑම අයිඩෙන්ටිෆයර්) එකක් a යන තනි අකුරකින් දැක්කුවත්, abcdefghijklmn වැනි අක්ෂර විශාල සංඛ්‍යාවක් තිබෙන නමකින් දැක්කුවත් අවසන් බයිනරි ප්‍රෝග්‍රෑම් එකේ සයිස් එක කොහෙත්ම වෙනස් නොවේ. සමහරෙකුට සිතෙනවා ඇති නමෙහි අක්ෂර ගණන වැඩි වන විට එම අක්ෂර සඳහා අමතරව බයිට් ප්‍රමාණයක් වැය වෙනවා නේද කියා. එසේ සිතීම සාවද්‍ය වේ. ඊට හේතුව මෙයයි. සෝස් කෝඩ් එකේ අප විසින් ලියනු ලබන සියලුම අයිඩෙන්ටිෆයර්/නම්/ලේබල් කම්පයිල් වීමේදී යම් නිශ්චිත බිට් ගණනකින් දක්වන ලේබලයක් බවට පත් වේ (ඇත්තටම මෙම ලේබලය බොහෝවිට බිට් 32කින් යුත් අංක ලෙසයි පවතින්නේ; අපට අක්ෂර සමග වැඩ කිරීමට පහසු වුවත්, පරිගනකයට ඉලක්කම් සමග වැඩ කිරීමයි ඉතාම පහසු). එවිට, a වැනි ඉතාම කුඩා ලේබලුත් abcdefghijklmn වැනි විශාල ලේබලුත් සියල්ලම එකම ප්‍රමාණයේ බිට් ගණනකින් නිරූපණය වේ. එනිසා "ලෝභ නොවී" හා "කම්මැලි නොවී" හොඳ අර්ථවත් ලේබල්/නම් ලියන්න.

සටහන
ප්‍රෝග්‍රැමිංවලදී අනිවාර්යෙන්ම පිළිපැදිය යුතු රීති (rules) ඇත. ඒවා කඩ කළොත් අනිවාර්යෙන්ම ප්‍රෝග්‍රෑම් එක වැඩ නොකරනු ඇත. ඊට අමතරව, පිළිපැදීමට සුදුසු "හොඳ ප්‍රෝග්‍රැමිං පුරුදු" ඇත. ඒවා Good programming practices ලෙස හඳුන්වනවා. මේවා පිළිපැදීම අනිවාර්ය නොවූවත්, හොඳ ප්‍රෝග්‍රැමර්ස්ලා මේවා රීති සේම අනුගමනය කරනවා. ඊට හේතු ගණනාවක්ම තිබෙනවා. තමන් විසින් සාදපු ප්‍රෝග්‍රෑම් එකක් වුවත්, යම් කාලයකට පසුව එම සෝස් කෝඩ් තමන් විසින්ම කියවන විට, තරමක් නුපුරුදු ගතියක් ඇති වෙනවා. ඉතිං හොඳ පුරුදු අනුගමනය කළොත් පහසුවෙන්ම සෝස්කෝඩ් එක මතක් වෙනවා/වැටහෙනවා. ඒ වගේමයි, ඔබ ලියන ප්‍රෝග්‍රෑම් වෙනත් අය විසින්ද පාවිච්චි කරන්නට පුලුවන්. ඉතිං එවැනි අයට ඔබේ ප්‍රෝග්‍රෑම් එක කොහෙත්ම හුරු නැත. ඒ කියන්නේ කණ්ඩායම් වැඩක් ලෙස ප්‍රෝග්‍රැමිං කරන විට, හොඳ පුරුදුවල වටිනාකම කියා නිම කළ නොහැකියි.

හොඳ පුරුදු ගණනාවක්ම තිබෙනවා. එකක් නම්, දැනටමත් ඔබ ඉගෙන ගත් පරිදි අර්ථාන්විත නම් යෙදීමයි. තවත් හොඳ පුරුද්දක් තමයි ඇසට ප්‍රසන්න ආකාරයට ප්‍රෝග්‍රෑම් (සෝස්කෝඩ්) ලිවීමයි. එය හරියට ඔබේ වැඩකරන මේසය හෝ ඔබේ කාමරය තබා ගන්නා විදිය වැනිය. එය අවුල් ජාලාවක් සේ පෙනෙන ලෙසත් ඔබට තබා ගත හැකියි; නැතිනම් ඉතාම පිළිවෙලට එය තැබිය හැකියි. අවුල් වෙච්ච මේසයකින් දෙයක් සොයා ගන්න කොතරම් අපහසුද යන්න අත්දැකීමෙන්ම අප දන්නවානෙ. ඒ වගේම තමයි අවුල් ජාලාවක් වගේ පෙනෙන සෝස්කෝඩ්. තවත් හොඳ පුරුද්දක් තමයි අවශ්‍ය ප්‍රමාණයට කමෙන්ට් ලිවීම. කමෙන්ට් ගැන වැඩි විස්තර පහත දැක්වේ.

සෝස්කෝඩ් වරක් සෑදුවාට පසුව ඒවා තමන් විසින්ම හෝ වෙනත් ප්‍රෝග්‍රැමර්ස්ලා විසින් හෝ නිතර නිතර බැලීමට අවශ්‍ය වෙනවා. එක්කෝ එම සෝස්කෝඩ් එක කියවා ඉගෙන ගන්නට හෝ එවැනිම වෙනත් ප්‍රෝග්‍රෑම් එකක් සෑදීමේ අරමුණින් ඒවා කියවයි. ප්‍රෝග්‍රෑම් එකේ ගැටලු ඇති වූ විට, ඒවා නිවැරදි කිරීමට සෝස් කෝඩ් කියවීමට සිදු වේ. එසේත් නැතිනම්, ප්‍රෝග්‍රෑම් එක තවදුරටත් සංවර්ධනය කිරීමට සෝස් කෝඩ් කියවයි. හේතුව කුමක් වුවත්, සෝස්කෝඩ් නිතර නිතර බැලීමට සිදු වෙන එක නම් අනිවාර්යයි. ඉතිං කෙසේ හෝ යම් ප්‍රෝග්‍රෑම් එකක් සෑදීමට "ඔහේ" සෝස්කෝඩ් ලියුවොත් ඉන් ඇති වන්නේ විශාල පාඩුවක් හැමපැත්තෙන්ම. මෙතැනදී තමයි ඉහත සටහනේ කියූ ලෙසම හොඳ පුරුදු වැදගත් වන්නේ. මේ අතරිනුත් කමෙන්ට් (comment) කිරීම ඉතාම හොඳ පුරුද්දකි. ඇත්තටම එය අත්‍යවශ්‍ය තරමටම සැලකිය හැකි වැදගත් දෙයකි.

කමෙන්ට් යනු යම් සෝස්කෝඩ් එකේ ලියනු ලබන සටහනකි. කිසිදු කමෙන්ට් එකක් කම්පයිල් කිරීමේදී බයිනරි කෝඩ් එකට ඇතුලු වන්නේ නැත. එනිසා කොතරම් කමෙන්ට් ලිව්වත් අවසාන බයිනරි ෆයිල් එකේ සයිස් එක වැඩි වන්නේ නැත. එනිසා අවශ්‍ය තරම් කමෙන්ට් යෙදීම සුදුසුයි. ඔබ සෝස්කෝඩ් එකේ ලියන කමාන්ඩ් ගැන සටහන් කමෙන්ට් ලෙස සෝස්කෝඩ් එකෙහිම ලිවිය හැකියි. එය හරියට ඔබේ පෞද්ගලික ඩයරිය වගේ. නැතිනම් කටුසටහන් පොත වගේ. ඔබ කරන කියන දේවල කෙටි සටහන් ඩයරියේ හෝ කටුසටහන් පොතේ ලියනවානෙ. එලෙසම එම සෝස්කෝඩ් කියවන අයට අහවල් අහවල් ස්ටේට්මන්ට්වලින් කරන්නේ කුමක්ද කියා කමෙන්ට්ස් කියවීමෙන් දැනගත හැකියි. එනිසා, කමෙන්ට් ලියන විට පැහැදිලිවත් කෙටියෙනුත් ඒවා ලියන්න. අනෙක් අයට තේරෙන්නෙ නැති නම් ඔබ කොතරම් කමෙන්ට් ලිව්වත් ඉන් වැඩක් නැහැනෙ.

සී ප්‍රෝග්‍රෑම් එකක් තුළ කමෙන්ට් ලියන්නේ /* හා */ යන සංඛේත දෙක අතරයි. /* හා */ යන සංඛේත comment delimiters ලෙස හැඳින්විය හැකියි. සෝස්කෝඩ් එක කම්පයිල් වන විට, කම්පයිලරයට /* යන්න පළමුව හමු වී නැවත */ යන්න හමුවන තෙක් කිසිම දෙයක් කම්පයිල් කරන්නේ නැත. ඒවා මඟහරිමින් යනවා. අන්න එහෙමයි කමෙන්ට් අවසන් බයිනරි ෆයිල් එකට ඇතුලු වීම වලකින්නේ. එනිසා කමෙන්ට් එකක් තුළ සී කීවර්ඩ්ස් හා කමාන්ඩ්ස් පවා ලිවිය හැකි අතර, ඒවා ක්‍රියාත්මක නොවී නිකංම අකුරු ලෙසයි සලකන්නේ. එහෙත් කමෙන්ට් එකක් තුල /* යන්න ලිවිය නොහැකියි.

සාමාන්‍යයෙන් ප්‍රෝග්‍රෑම් ෆයිල් එකක මුලින්ම තිබෙන්නේ කමෙන්ට් බ්ලොක් එකකි. කමෙන්ට් එක පේලි කිහිපයකින් තිබෙන විට, comment block එකක් කියාද ඊට කියනවා. ඒ තුල, ප්‍රෝග්‍රෑම් එක සාදපු දිනය, ප්‍රෝග්‍රෑම් එක සාදපු ප්‍රෝග්‍රැමර්ගේ නම, ප්‍රෝග්‍රැම් එකෙන් කරන්නේ කුමක්ද ආදී පොදු විස්තර කිහිපයක් තිබේවි. ඇත්තටම, කමෙන්ට් ලිවිය යුත්තේ කුමන කුමන අවස්ථාවලදීද යන්න තරමක් පුරුද්දෙන්ම (වෙනත් අයගේ හොඳ ප්‍රෝග්‍රෑම්ද කියවා) ලබා ගත යුතු දැනුමක් බව මා සිතනවා. උදාහරණයක් ලෙස, දවසේ සිදු කරන සෑම දෙයක්ම ඔබ ඩයරියේ ලියන්නේ නැහැනෙ. අන්න ඒ වගේ ප්‍රෝග්‍රෑම් එක තුළ සිදු කරන සෑම දෙයක් ගැන්ම කමෙන්ට් කරන්නට යන්නේ නැත. වැදගත් ඒවා පමණයි කමෙන්ට් කරන්නේ.

දැන් අපි මෙතෙක් උගත් කරුණු සලකමින් තවත් කුඩා ප්‍රෝග්‍රෑම් එකක් සාදමු. මීට පෙර ඔබ දැකපු ප්‍රෝග්‍රෑම් දෙකට වඩා වැඩිපුර ක්‍රියාකාරිත්වයක් මෙම ප්‍රෝග්‍රෑම් එකේ නැතත්, ඔබට දැනෙනවා ඇති මෙහි පිළිවෙලක් ලස්සනක් තිබෙන බව. ඔබත් මෙය ලියා කම්පයිල් කර රන් කර බලන්න.

 


මුලින්ම ඇත්තේ කමෙන්ට් බ්ලොක් එකකි. එහි අලංකාර බව වැඩි කිරීමට * වලින් පෙට්ටියක් ආකාරයට දිස් වන සේ සකස් කර ඇත. එහෙත් බලන්න එම පෙට්ටිය් වම් උඩු කෙළවර පටන් ගන්නේ /* යන්නෙන් වන අතර, දකුණු යට කෙළවරින් අවසන් වන්නේ */ වලිනි. ඒ කියන්නේ /* හමුවූ තැන සිට */ හමුවන තැන දක්වා සියල්ල කමෙන්ට් එකකි. ඒ විතරක් නොව, /* stores your lucky number */ ලෙස තවත් කුඩා කමෙන්ට් එකක් ඔබට දැකිය හැකියි. ඔව්, ඔබට හැකියි කමෙන්ට් එකක් ස්ටේට්මන්ට් එකක අවසානයේ (සෙමිකෝලනයට පසුව) ලියන්නත්.

සෑම ස්ටේමන්ට් එකක්ම සෙමිකෝලන් එකකින් අවසන් කර ඇති බව පේනවා නේද? එහෙත් #include <stdio.h> යන්නත් main() යන කොටසත් එසේ සෙමිකෝලන්වලින් අවසන් කොට නැත. ඊට හේතු මොහොතකින් පැහැදිලි කෙරේ.

ඇසට පහසු ප්‍රියමනාප ගතියක් මෙම සෝස්කෝඩ් එකේ ඇත. සුදුසු ලෙස හිස් පේලි තබා තිබෙනවා ප්‍රෝග්‍රෑම් එක තුළ. සාමාන්‍යයෙන් පරිගනකයේ යමක් ලියන විට තමන් දැන් සිටිනා පේලියේ සිට ඊළඟ පේළියට යෑමට කීබෝඩයේ එන්ටර් කී එකනෙ ප්‍රෙස් කරන්නේ. මෙලෙස එන්ටර් ඔබා ඊළඟ පේළියට ගමන් කිරීම පරිගනක තාක්ෂණයේදී හඳුන්වන්නේ newline කියාය. කීබෝඩ් එකේ එන්ටර් ඔබා නිව්ලයින් එකක් ලබා ගත හැකියාව තිබෙන්නා සේම, ප්‍රෝග්‍රෑම් එකක් තුළ printf() වැනි තිරයේ යම් යම් දේවල් ලිවීමට යොදා ගන්නා කමාන්ඩ් එකකු තුළ \n යන්න ලියූ විටද සිදු වන්නේ එයමයි. උදාහරණයක් ලෙස, printf(“This is first sentence. This is second sentence.”) යැයි ලියුවොත් මෙම කමාන්ඩ් එක රන් වන විට තිරයේ දිස්වන්නේ සියල්ලම එකටය (පහත ආකාරයට).

This is first sentence. This is second sentence.

එහෙත් එයම printf(“This is first sentence.\n This is second sentence.”) කියා ලියුවොත් This is first sentence. යන්න එක් පේළියක ලියා, \n නිසා ඊළඟට ලිවීමට තිබෙන දේවල් ලියවෙන්නේ ඊළඟ පේළියේය (පහත ආකාරයට).

This is first sentence.
This is second sentence.

ඒ අනුව \n යනු සී ප්‍රෝග්‍රෑම් එකට විශේෂ අර්ථයක් සහිත (එනම් විශේෂ කටයුත්තක් කරන) කොටසකි. මෙලෙස \ (මෙම සලකුණ බැක්-ස්ලෑෂ් - backslash ලෙස හඳුන්වනවා) යන සලකුණට පසුව n වැනි අකුරක් සහිතව ඇති කොටසක් escape sequence එකක් ලෙස හැඳින්වෙනවා (ඒ කියන්නේ සෑම එස්කේප් සීක්වන්ස් එකක්ම පටන්ගන්නේ බැක්ස්ලෑෂ් එකකිනි).

අකුරු ලියන විට එම අකුරු අතර හිස් තැන් ලිවිය හැකියි කීබෝඩ් එකේ space කී එක එබීමෙන්. කමාන්ඩ් ලියන විට වචන අතර හිස්තැන් තැබිය යුතුයිනෙ. සාමාන්‍යයෙන් වචන හා කමාන්ඩ් අතර එක් හිස්තැනක් තැබීම ප්‍රමාණවත්. එහෙත් ඔබට අවශ්‍ය නම් හිස්තැන් කිහිපයක් (තමන්ට ඕනෑ තරමක්) වුවද තැබිය හැකියි. ඒ අනුව පහත දැක්වෙන සේ කමාන්ඩ් ලිව්වාට එරර් එකක් ඇති වන්නේ නැත. පළමු ස්ටේට්මන්ට් එකේදී short හා variable1 අතර ඇත්තේ එක් හිස් තැනක් වන අතර, දෙවැන්නෙහිදී ඒ දෙක අතර හිස් තැන් කිහිපයක්ම තබා ඇත.

short variable1;
short variable2;

කමාන්ඩ් ලියන විට එහි වචන/කොටස් අතර එලෙස හිස්තැන් තැබිය හැකි වුවත්, printf() වැනි තිරයේ යම් යම් දේවල් ලිවීමට ගන්නා කමාන්ඩ් තුළ ලියන වචන අතර ඔබ තබන හිස්තැන් ප්‍රමාණය වැදගත් වේ මොකද ඔබ තබන හිස්තැන් ප්‍රමාණය එලෙසම තිරයේ දිස්වේවි. උදාහරණයක් ලෙස, printf(“a sample text”) යන්න රන් වන විට, තිරයේ a sample text ලෙස ලියවෙන අතර, printf(“a sample text”) යන්න රන් වන විට, තිරයේ එය දිස්වන්නේ a sample text ලෙසයි.

ස්පේස් කී/බාර් එක ප්‍රෙස් කළ විට ලැබෙන හිස් තැනත්, එන්ටර් කී එක එබීමෙන් ලැබෙන නිව්ලයින් එකත් (නිව්ලයින් එකත් එක්තරා ආකාරයක හිස්තැනක් ලෙස සලකන්නට පුලුවන්) පොදුවේ සී වල white space ලෙස හඳුන්වනවා. මීට අමතරව ඔබ දන්නවා කීබෝඩ් එකේ ටැබ් කී එක ප්‍රෙස් කරන විටත් බොහෝවිට විශාල හිස්තැනක් ඇති වෙනවා (ටෙක්ස්ට් එඩිටර් එකක් ඕපන් කර ටැබ් කී එක ඔබා බලන්න; ස්පේස් කී එකෙන් ඇති වන හිස්තැනට වඩා දිගු හිස්තැනක් ඉන් ඇති වේවි). ඉතිං මේ සියලුම ආකාරයේ හිස්තැන් තමයි වයිට් ස්පේස් කියා හඳුන්වන්නේ.

සී හිදී කමාන්ඩ්වල පද අතර ඇති වයිට් ස්පේස් එක ගැන සැලකිලිමත් වන්නේ නැත. පද දෙකක් අතර එක් හිස්තැනක් තිබ්බත්, හිස්තැන් ලක්ෂ ගණනක් තිබුණත් සී කම්පයිලරයට ඉන් වගක් නැත. මෙන්න මෙම ගති ලක්ෂණය තමයි අප ඉහත යොදා ගෙන තිබෙන්නේ සෝස්කෝඩ් අලංකාරවත් ලෙස ලිවීම සඳහා. එනම්, කමාන්ඩ් අතර හිස් පේලි තැබීම, සමහර කමාන්ඩ් ලියන විට තරමක් දකුණු අත පැත්තට වන සේ තැබීම (ඉන්ඩෙන්ටේෂන්) යන ඒවා සිදු කළේ වයිට් ස්පේස් විවිධාකාරයෙන් තැබීම නිසා නේද? යම් ස්ටේට්මන්ට් එකකට පසුව කමෙන්ට් ලිවීමට හැකියාව ලැබෙන්නේද ඒ නිසාමය. එනම්, කමෙන්ට් එක ඊළඟ පේලියේ ලිව්වත්, සෙමිකෝලන් එකට පසුව හිස්තැනක් තබා ලිව්වත් දෙකම එකයි සී කම්පයිලරයට.

තවද, සඟල වරහන් තුළ ඇති ස්ටේට්මන්ට් සියල්ලම වම් කෙළවර සිට දකුණු ඇත පැත්තට ගොස් ඇත (මෙය indentation ලෙස හැඳින්වෙනවා). ඒ කියන්නේ සඟල වරහන් තුල ඇති දේවල් දකුණට ඉන්ඩෙන්ට් කර තිබෙනවා. තවද, වේරියබල් නේම් එක කැමල් නොටේෂන් අනුව අර්ථවත් විදියට ලියා ඇත. මේ සියල්ල නිසාම සෝස්කෝඩ් එකට අලංකාරයත් කියවීමට පහසු බවත් ලැබී තිබේ.

සී භාෂාවේ ඇති තවත් සුවිශේෂි ලක්ෂණයක් තමයි එය සිම්පල් කැපිටල් වෙනසට සංවේදී වීම. උදාහරණයක් ලෙස, char හෝ short යන පද Char හෝ SHORT ආදී ලෙස ලිවිය නොහැකියි. එනිසා සී භාෂාව case-sensitive (කැපිටල් සිම්පල් වෙනසට සංවේදී) යැයි කියනු ලබනවා.

සාමාන්‍යයෙන් වේරියබල් එකක් පෙර පෙන්වා දුන් ආකාරයකින් ඩික්ලෙයාර් කළාට පසුව, එම වේරියබල් එකේ තවමත් ප්‍රයෝජනවත් දත්තයක් ගබඩා වී/කර නොමැත. එය හරියට ආරාධිත අමුත්තෙකුට වෙන් කළ ආසයනයක් බඳුයි. තවම අමුත්තා එහි වාඩි වී නොමැත. ඉතිං, එම වේරියබල්වලට සුදුසු දත්තයක් ගබඩා කරන්නේ = යන කාරකය (operator) උපයෝගි කරගෙනයි. උදාහරණයක් ලෙස short myvar; ලෙස myvar යන නමින් short වර්ගයට අයත් වේරියබල් එකක් ඩික්ලෙයාර් කළ පසු, ඊට 48 යන සංඛ්‍යාව ගබඩා කරන්නේ පහත ආකාරයටයි.

myvar = 48;

මෙලෙස යම් වේරියබල් එකකට යම් සුදුසු දත්තයක් ගබඩා කිරීම assignment ලෙස හැඳින්වෙන අතර, = යන්න assignment operator ලෙස හැඳින්වෙනවා. මතක තබා ගන්නා මා ඉහතදී හැමවිටම පැවසුවේ "සුදුසු" දත්තයක් ගබඩා කිරීම ලෙසයි. ඒ කියන්නේ ඔබට ගබඩා කළ හැක්කේ එම වේරියබල් එක අපේක්ෂා කරන දත්ත වර්ගයකුයි. ඉහත උදාහරණයේ short යනු පුර්ණ සංඛ්‍යාවක් අපේක්ෂා කරන වේරියබල් එකක් නිසා 48 ගබඩා කළ හැකි වුවත් abc වැන්නක් එහි ගබඩා කළ නොහැකියි.

එක් වරක් යම් වේරියබල් එකකට ඉහත ආකාරයට යම් සුදුසු දත්තයක් ගබඩා කළ පසුව, ප්‍රෝග්‍රෑම් එකේ තවත් තැනකදී එම වේරියබල් එකටම නැවත වරක් තවත් සුදුසු දත්ත ගබඩා කළ හැකියි. ඔව්, යම් වේරියබල් එකකට ඕනෑම වාර ගණනක් සුදුසු දත්ත ගබඩා කළ හැකියි. එමනිසානෙ ඊට වේරියබල් (විචල්‍ය) යන නම ලැබී තිබෙන්නෙත්. උදාහරණයක් වශයෙන්, ඉහත myvar යන වේරියබල් එකේ දැනට 48 යන දත්තය ගබඩා වී තිබෙනවානෙ. ඉතිං දැන් myvar = 100; යන අසයින්මන්ට් ස්ටේට්මන්ට් එක ලියා ඊට 100 යන අගය ගබඩා කළ හැකියි.

යමක් හොඳින් මතක තබා ගන්න. එනම්, යම් වේරියබල් එකක් ඩික්ලෙයාර් කළාට පසුව, එය ප්‍රයෝජනයට ගත යුත්තේ ඊට සුදුසු දත්තයක් ගබඩා කළාට පසුව පමණි. ඊට සුදුසු දත්තයක් ගබඩා කළ නොමැති විට, එහි සමහරවිට කිසිවක් ගබඩා නොවී තිබෙන්නට පුලුවන්. එහෙමත් නැතිනම්, අහඹු දත්තයක් එහි ඉබේම ගබඩා වී තිබෙන්නට පුලුවන්. මෙම අහඹු දත්තය garbage (කුණු ගොඩක්) ලෙස සාමාන්‍යයෙන් හඳුන්වනවා. ඔබ විසින් තවම සුදුසු දත්තයක් ගබඩා නොකළ වේරියබල් එකක ගාබේජ් ගබඩා වී තිබෙනවාද කිසිවක් ගබඩා වී නැතිද යන්න තීරණය වන්නේ ඔබේ මෙහෙයුම් පද්ධතිය අනුවයි. මේ දෙකෙන් කුමක් වුවත්, ඒ දෙකෙන්ම අපට ඇති වන්නේ කරදර පමණි. ඉතිං එම කරදරයෙන්/භයානක කමින් බේරෙන්නට කරන්නට තිබෙන එකම දේ පෙර සඳහන් කළ ලෙසම, යම් වේරියබල් එකකට සුදුසු දත්තයක් ගබඩා කළ පසුව එය පාවිච්චියට ගැනීම පමණි.

ඉහත ඔබ දුටුවේ පළමුව වේරියබල් ඩික්ලෙයාර් කර, ඉන්පසුව එම වේරියබල්වලට සුදුසු අගයන් ගබඩා කිරීමයි. ඔබට අවශ්‍ය නම්, වේරියබල් එක ඩිකලෙයාර් කිරීමයි සුදුසු දත්තයක් එහි ගබඩා කිරීමයි යන දෙකම එකම ස්ටේට්මන්ට් එක තුළම සිදු කළ හැකියි පහත ආකාරයට.

short myvar2 = 200;

එනම් සුපුරුදු ලෙසම ඩේටා ටයිප් එක ලියා වේරියබල් නේම් එක ලියා, ඊටම = හා සුදුසු දත්තය ලිවීම පමණයි කළ යුත්තේ. මෙලෙස වේරිබල් එකක් සාදන විටම ඊට සුදුසු අගයක් ගබඩා කිරීම initialization ලෙස හඳුන්වනවා. ඔබට අවශ්‍ය නම්, එකම ස්ටේට්මන්ට් එක තුළ එකම වර්ගයේ වේරියබල් කිහිපයක්ම ඉනිෂියලයිස් කළ හැකියි පහත ආකාරයට. මෙහිදී "වේරියබල් නේම් = දත්තය" ලෙස කමාවලින් වෙන් කළ යුගල පද ලිවිය යුතුය.

long myvar3 = 300, myvar4 = 420, myvar5 = 222;

තවද, ඉහතදී ඔබ short හා long ලෙස භාවිතා කළ ඩේටා ටයිප් දෙක short int හා long int ලෙසද ලිවිය හැකියි. ඇත්ත වශයෙන්ම ඉතාම නිවැරදි ක්‍රමය වන්නේ short int හා long int යන්නයි. මේ දෙවර්ගයම int හි සුවිශේෂි ආකාර දෙකකි. එහෙත් බොරුවට දිගට ලියනවාට වඩා කෙටියෙන් ලියන එක පහසු නිසා short හා long ලෙස ඒවා සම්මත කරගෙන තිබෙනවා.

short int var1; /* මෙය short var1; යන්නට සමානයි */
long int var2; /* මෙය long var2; යන්නට සමානයි */


තවද, char, short, int, long යන දත්ත වරිග 3 signed හා unsigned යන ආකාර 2කින් තිබිය හැකි බව මීට කලින් සඳහන් කළා. මෙතෙක් සිදු කළ පරිදි නිකංම char var1; හෝ short var2; හෝ long var3; ආදී ලෙස ලියූ විට ඉන් සෑදෙන්නේ සයින්ඩ් වර්ගයේ වේරියබල්ද අන්සයින්ඩ් වර්ගයේ වේරියබල්ද? එහි ඇත්තටම යම් ගැටලුවක් තිබේ. බොහෝවිට සයින්ඩ් වර්ගයේ ඒවා ඉබේම සෑදේ (එහෙත් එය එසේ වේ යැයි "ගැරන්ටියක්" නැත; එය තීරණය වන්නේ යොදා ගන්නා කම්පයිලරයක අනුවයි). එහෙත් ඔබට නිශ්චිතව සයින්ඩ් හෝ අන්සයින්ඩ් වර්ගය සාදන්නට කියා කිව හැකියි. ඒ සඳහා signed හෝ unsigned යන කීවර්ඩ් දෙකෙන් එකක් ඩේටා ටයිප් එකට ඉදිරියෙන් යෙදිය හැකියි.

/* පහත 4න් සෑදෙන්නේ සයින්ඩ් වර්ගයේ වේරියබල් වේ. ඒ කියන්නේ ධන හා ඍණ සංඛ්‍යාද මෙම වේරියබල් තුළ ගබඩා කළ හැකියි. */
signed char svar1;
signed int svar2;
signed short svar3;
signed long svar4;

/* පහත 4න් සෑදෙන්නේ අන්සයින්ඩ් වර්ගයේ වේරිබල් වේ. ඒ කියන්නේ මෙම වේරියබල් තුළ ගබඩා කළ හැක්කේ ධන සංඛ්‍යා පමණි. */
unsigned char uvar1;
unsigned int uvar2;
unsigned short uvar3;
unsigned long uvar4;



c c++ programming...

Comments

Popular posts from this blog

දන්නා සිංහලෙන් ඉංග්‍රිසි ඉගෙන ගනිමු - පාඩම 1

මෙම පොත (පාඩම් මාලාව) පරිශීලනය කිරීමට ඔබට එදිනෙදා සිංහල භාෂාව භාවිතා කිරීමේ හැකියාව හා සාමාන්‍ය බුද්ධිය පමණක් තිබීම අවම සුදුසුකම ලෙස මා සලකනවා.  තවද, ඇසෙන පරිදි ඉංග්‍රීසි අකුරින් ලිවීමට හැකිවීම හා ඉංග්‍රීසියෙන් ලියා ඇති දෙයක් කියවීමට හැකි නම්, ඔබට මෙතැන් සිට මෙම පාඩම් මාලාව කියවා ඉගෙන ගත හැකිය.  ඔබට එසේ ඉංග්‍රීසි කියවීම හා ලිවීම ගැන දැනීමක් දැනටමත් නොමැත්තේ නම්, කරුණාකර මෙ‍ම පොතෙහි “අතිරේකය - 1 ”  බලා පළමුව එම හැකියාව ඇති කරගන්න.  තවද, හැකි පමණ ඉංග්‍රීසි වචනද පාඩම් කරගන්න. ඔබ හිතවතෙකුගේ නිවසකට හෝ වෙනත් පිටස්තර තැනකට යන විටෙක හැසිරෙන්නේ ඔබට අවශ්‍ය විදියටම නෙමේ නේද?  එනම්, පිට නිවසකට ගිය විට අහවල් පුටුව තිබෙන තැන හරි නැහැ, අහවල් එක මෙහෙම තිබෙන්නට ඕනෑ ආදී ලෙස ඔවුනට පවසන්නේ නැහැ, මොකද අප සිටින්නේ අනුන්ගේ තැනක නිසා.  එලෙසම, ඉංග්‍රීසි භාෂාව යනු සිංහල නොවේ.  ඔබ කැමැති වුවත් නැතත් ඉංග්‍රීසි ඉගෙනීමේදීද අප ඉංග්‍රීසි ව්‍යාකරණ රීති හා රටා එපරිද්දෙන්ම උගත යුතුය.  එනම්, සෑම සිංහල වගන්ති රටාවක්ම ඉංග්‍රීසියට ඔබ්බන්නට නොව, ඉංග්‍රීසියේ ඇති රටා ඔබ දන්නා සිංහල භාෂාව තුළින් ඉගෙනීමට උත්සහ කළ යුතුය. 

දන්නා සිංහලෙන් ඉංග්‍රිසි ඉගෙන ගනිමු - අතිරේකය 1

මූලික ඉංග්‍රීසි ලිවීම හා කියවීම ඉංග්‍රීසියෙන් ලියන්නේ හා ඉංග්‍රීසියෙන් ලියා ඇති දෙයක් කියවන්නේ කෙසේද?  ඉංග්‍රීසිය ඉගෙනීමට පෙර ඔබට මෙම හැකියාව තිබිය යුතුමය.  එය එතරම් අපහසු දෙයක්ද නොවේ.  ඔබේ උනන්දුව හොඳින් ‍තිබේ නම්, පැය කිහිපයකින් ඔබට මෙම හැකියාව ඇති කර ගත හැකිය.  මුල සිට පියවරෙන් පියවර එය උගන්වන්නම්.   මුලින්ම මිනිසා භාෂාවක් භාවිතා කළේ ශබ්දයෙන් පමණි.  එනම් ලිඛිත භාෂාව ඇති වූයේ පසු කාලයකදීය.  කටින් නිකුත් කරන ශබ්ද කනින් අසා ඔවුන් අදහස් උවමාරු කර ගත්තා.  පසුව ඔවුන්ට වුවමනා වුණා මෙම ශබ්ද කොලයක හෝ වෙනත් දෙයක සටහන් කර ගන්නට.  ඒ සඳහායි අකුරු නිර්මාණය කර ගත්තේ.  එම අකුරු නියෝජනය කරන්නේ ශබ්දයි .  මෙසේ මූලික අකුරු කිහිපයක් ඔවුන් එක එක භාෂාව සඳහා නිර්මාණය කර ගත්තා.  ඉංග්‍රීසියේදී මෙලෙස මූලික අකුරු 26ක් ඇත.   එය ඉංග්‍රීසි හෝඩිය ලෙස හැඳින් වෙනවා. අප ඉගෙන ගත යුත්තේ මෙම අකුරු මඟින් නියෝජනය කෙරෙන ශබ්ද මොනවාද යන්නයි.  එවිට ඔබට ඉංග්‍රීසි ලිවීමට හා කියවීමට හැකි වෙනවා.  ඊට පෙර අප අකුරු 26 දැනගත යුතුයි.  එම අකුරු 26 පහත දක්වා ඇත.  ඉංග්‍රීසියේදී සෑම අකුරක්ම “සිම්පල්” හා “කැපිටල්” ලෙස දෙයාකාර

කතාවක් කර පොරක් වන්න...

කෙනෙකුගේ ජීවිතය තුල අඩුම වශයෙන් එක් වතාවක් හෝ කතාවක් පිරිසක් ඉදිරියේ කර තිබෙනවාට කිසිදු සැකයක් නැත. පාසැලේදී බලෙන් හෝ යම් සංගම් සැසියක හෝ රැස්වීමක හෝ එම කතාව සමහරවිට සිදු කර ඇති. පාසලේදී කතා මඟ හැරීමට ටොයිලට් එකේ සැඟවුනු අවස්ථාද මට දැන් සිහිපත් වේ. එහෙත් එදා එසේ කතා මඟ හැරීම ගැන අපරාදේ එහෙම කළේ යැයි අද සිතේ. යහලුවන් ඉදිරියේ "පොර" වෙන්න තිබූ අවස්ථා මඟ හැරුණේ යැයි දුකක් සිතට නැඟේ. ඇත්තටම කතාවක් කිරීම "පොර" කමකි. දක්ෂ කතිකයන්ට සමාජයේ ඉහල වටිනාකමක් හිමි වේ. පාසැලේදී වේවා, මඟුලක් අවමඟුලක් හෝ වෙනත් ඕනෑම සමාජ අවස්ථාවකදී වේවා දේශපාලන වේදිකාව මත වේවා කතාවක් කිරීමේදී පිලිපැදිය යුත්තේ සරල පිලිවෙතකි. එහෙත් එම සරල පිලිවෙත තුල වුවද, තමන්ගේ අනන්‍යතාව රඳවන කතාවක් කිරීමට කාටත් හැකිය. පුද්ගලයාගෙන් පුද්ගලයා වෙනස් වේ. එම වෙනස ප්‍රසිද්ධ කතා (public speaking) තුලද පවත්වාගත හැකිය. මේ ගැන මට ලිපියක් ලියන්නට සිතුනේ මාගේ මිතුරෙකුට ප්‍රසිද්ධ කතාවක් කිරීමට අවශ්‍ය වී, ඒ ගැන මේ ළඟ දවසක අප පැයක් පමණ සිදු කළ සංවාදයක් නිසාය. මා ප්‍රසිද්ධ දේශකයකු නොවුණත් මේ විෂය සම්බන්දයෙන් පාසැල් කාලයේ සිටම පත

දෛශික (vectors) - 1

එදිනෙදා ජීවිතයේදිත් විද්‍යාවේදිත් අපට විවිධාකාරයේ අගයන් සමඟ කටයුතු කිරීමට සිදු වෙනවා . ඉන් සමහරක් නිකංම සංඛ්‍යාවකින් ප්‍රකාශ කළ හැකි අගයන්ය . අඹ ගෙඩි 4 ක් , ළමයි 6 දෙනෙක් ආදී ලෙස ඒවා ප්‍රකාශ කළ හැකියි . තවත් සමහර අවස්ථාවලදී නිකංම අගයකින් / සංඛ්‍යාවකින් පමණක් ප්‍රකාශ කළ නොහැකි දේවල් / රාශි (quantity) හමු වේ . මෙවිට “මීටර්” , “ තත්පර” , “ කිලෝග්‍රෑම්” වැනි යම් ඒකකයක් (unit) සමඟ එම අගයන් පැවසිය යුතුය ; නැතිනම් ප්‍රකාශ කරන අදහස නිශ්චිත නොවේ . උදාහරණයක් ලෙස , “ මං 5 කින් එන්නම්” යැයි කී විට , එම 5 යනු තත්පරද , පැයද , දවස්ද , අවුරුදුද ආදි ලෙස නිශ්චිත නොවේ . මේ දෙවර්ගයේම අගයන් අදිශ (scalar) ලෙස හැඳින්වේ . අදිශයක් හෙවත් අදිශ රාශියක් යනු විශාලත්වයක් පමණක් ඇති දිශාවක් නැති අගයන්ය . ඔබේ වයස කියන විට , “ උතුරට 24 යි , නැගෙනහිරට 16 යි” කියා කියන්නේ නැහැනෙ මොකද දිශාව යන සාධකය / කාරණය වයස නමැති රාශියට වැදගත්කමක් නැත . එහෙත් සමහර අවස්ථා තිබෙනවා අගයක් / විශාලත්වයක් (magnitude) මෙන්ම දිශාවක්ද (direction) පැවසීමට සිදු වන . මෙවැනි රාශි දෛශික (vector) ලෙස හැඳින්වේ . උදාහරණයක් ලෙස , ඔබ යම් “බලයක්

දැනගත යුතු ඉංග්‍රිසි වචන -1

ඉංග්‍රිසි බස ඉගැනීමේදී වචන කොපමණ උගත යුතුද, එම වචන මොනවාදැයි බොහෝ දෙනෙකුට මතුවන ගැටලුවක් වන අතර, බොහෝ දෙනා ඊට විවිධ පිලිතුරුද සපයා ඇත. මේ ගැන හොඳින් පරීක්ෂණය කර ඇමරිකානු ආයතනයක් විසින් වචන 5000ක ලැයිස්තුවක් ඉදිරිපත් කර ඇත. එම ලැයිස්තුව මා කෙටස් දෙකකට (දිගු වැඩි නිසා) සිංහල තේරුම්ද සහිතව ඉදිරිපත් කර ඇත. (මේවා සැකසුවත් සෝදුපත් බලා නැති නිසා සුලු සුලු දෝෂ සමහරවිට තිබිය හැකිය). පහත ලැයිස්තුවේ වචන 2500ක් ඇත.    Word    තේරුම        be    ඉන්නවා    and    හා    of    ගේ    in    තුල    to    ට    have    තියෙනවා    to    ට    it    ඒක, ඌ    I    මම    that    ... කියලා, ඒ/අර, ඒක/අරක    for    සඳහා    you    ඔබ, ඔබලා    he    ඔහු    with    සමඟ    on    මත    do    කරනවා, "මෙව්ව කරනවා"    say    කියනවා    this    මේ, මේක    they    උන්, ඒවා, ඒගොල්ලෝ    at    දෙස, අසල    but    නමුත්    we    අපි    his    ඔහුගේ    from    සිට, ගෙන්    not    නැහැ    by    විසින්, මඟින්    she    ඇය    or    හෝ, හෙවත්    as    විට, නිසා, වශයෙන්    what    මොකක්ද,