Thursday, June 2, 2016

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...

No comments:

Post a Comment