Saturday, June 29, 2013

9. C නවවන පාඩම - C හි ශ්‍රිත භාවිතය (Functions/Methods in C)



ශ්‍රිත (Function) යනු කේත කොටසකි(Block of code). මෙය සෑම පරිගණක භාෂාවකදිම දැකිය හැකි තවත් වැදගත් අංගයකි. අනෙක් සැමගේ මෙන්ම C හිදීද Function ප්‍රධාන ආකාර දෙකක් පවති. ඒවා නම් C හි පවතින Built-in function සහ පරිශීලකයා විසින් හඳුන්වාදෙන ලද (User define) function ලෙසයි. අප function භාවිතා කරනු ලබන්නේ ක්‍රමාලේඛයක යම් කොටසක් නැවත නැවත යොදාගැනීම (re-usability) පහසු කරගැනීමට සහ programming structure එක ගොඩනගාගැනීමටය.

දැනටමත් අපි C භාවිතයේදි මෙවැනි function භාවිතා කර ඇත්තෙමු. ඔබ මෙතෙක් ලියූ සෑම කේතයකදීම main() ලෙස function එකක් ලියා ඇත. මෙම main() function එක පාඩම ආරම්භයේදි විස්තර කල ආකාරයටම functions කීපයක් ඇති ක්‍රමලේඛයකදි වුවත් මුලින්ම ධාවනය වන function එකයි.

අපි දැන් User define functions ගැන සලකා බලමු.

Function එකක් define කිරීමේදි පහත සඳහන් ව්‍යුහය එක අනුගමනය කල යුතුය.

return-type function_name ( arg_type arg1, ..., arg_type argN )
{
    //Function body
}

උදාහරණයක් මගින් එය පැහැදිලිකරගනිමු.

int calc(int a, int b){
  int result; 
  result = a + b; 
  return result;
}
ඉහත උදාහරණයක සලකන්න. එහිදි calc ලෙස user define function එකක් ඇති අතර එම function එක තුලට a සහ b ලෙස integer විචල්‍ය argument දෙකක් ලබාදී ඇත. Function එක තුලදී මෙම a සහ b අගයන් එකට එකතු වී පිළිතුර result යන විචල්‍ය තුල ගබඩා කරගෙන එය return කර ඇත. මෙහි return යන keyword එක භාවිතා කිරීමෙන් සිදුවන්නෙ මෙම function එක අමතන (call) තැනදී එහි අගය ලබාගැනීමයි. එනම් මෙහිදී, a හා b හි අගයන් එකතු වී ලැබෙන පිලිතුර මෙම function එක call කරන ස්ථානයේදි ලබාගත හැකියි. මෙහිදී සැලකිළිමත් විය යුතු කරුණ වන්නේ අප function එකක return කල හැක්කෙ එහි return type එකේම අගයක් පමණි. මෙම උදාහරණයේදී calc function එකෙහි return  type එක int (Integer) ය. එනම් මෙම function එකෙන් integer අගයක් return කළ හැකිය.

දැන් මෙලෙස ක්‍රමලේඛ කල function එකක් යම් තැනක භාවිතා කරන්නේ කෙසේදැයි බලමු. එනම් අප මෙලෙස ක්‍රමලේඛ කරගත් function එකක ක්‍රියාවලියට ආමන්ත්‍රණය කල යුතුය. නොඑසේනම් call කළ යුතුය. පහත සරළ උදාහරණය මගින් එය පැහැදිලි කර ගනිමු.

void main(){
 int x;
 x = calc(2,3);
 printf("%d",x);
}

මෙහිදී කර ඇත්තෙ ඉහතදී හඳුන්වා දුන් calc() නම් function එකට main() function එක තුලදී ආමන්ත්‍රණය කර එයට 2 සහ 3 යන අගයන් ලබා දීමයි. එහිදී පිලිවෙලින් a හා b සඳහා 2 සහ 3 අගයන් ලැබේ එවිට calc() තුලදි එහි result හි පිළිතුර ලෙස 5 ලැබෙන අතර එය එහි return අගය බැවින් main() තුළ x = calc(2,3) ලෙස ඇති බැවින් x සඳහා calc() හි return අගය ලැබේ. එනම් x සඳහා 5 යන අගය ලැබේ. printf මගින් එම x අගය මුද්‍රණය කර දක්වා ඇත.

යම් function එකක් තුලින් return අගයක් නැත්නම් එය void යන return type එකෙන් හඳුන්වාදිය හැකිය. එවිට එම function එක මගින් අගයක් return නොවන අතර එවැනි අවස්ථාවක එවැනි function එකකට call කිරීමෙදි එහි නම සහ ඇත්නම් argument pass කිරීම ප්‍රමාණවත්ය.

functionName();

Built-in functions යනු ක්‍රමලේඛ භාෂාවේ ඇති function වන අතර අපට ඒවායේ නාමකරණ අපේ function නැතිනම් user define function සඳහා භාවිතා කළ නොහැක. මෙහි අප භාවිතා කළ printf(). scanf() යනාදිය මෙන්ම තවත් නොයේකුත් අවශ්‍යතාවයන් සඳහා ක්‍රමලේඛ භාෂාව මගින් ලබාදී ඇති functions බොහෝමයක් ඇත.

6 comments:

  1. සරලයි.. පොඩ්ඩයි..

    තව ටිකක් විස්තර කරල දාන්නෝ..

    ReplyDelete
  2. තවත් විස්තර කරන්න නම් අමාරුයි. :) 

    ඔයාට නොතේරෙන තැන කිව්වොත් ඒක විස්තර කරල කියල දෙන්නම්.

    ReplyDelete
  3. ayye function jathi 5k tiyenwa neda ethakota ??

    ReplyDelete
  4. ඔව් මෙන්න මේ විදියට 5කට බෙදන්න පුලුවන්.

    1. Arguments සහ Return value එකක් නොමැති ශ්‍රිත
    2. Arguments ඇති නමුත් Return value එකක් නොමැති ශ්‍රිත
    3. Arguments එකක් සහ Return value එකක් ඇති ශ්‍රිත
    4. Arguments එකක් නොමැති නමුත් Return value එකක් ඇති ශ්‍රිත 
    5. Multiple return value ඇති ශ්‍රිත

    ReplyDelete
  5. Recursion function gana poddak wisthara karala liyannako

    ReplyDelete
  6. Recursion function gana poddak wisthara karala liyannako

    ReplyDelete