Thursday, February 23, 2012

PHP 08 - LOOPS හඳුනාගනිමු

නිවසේ ඔබේ කාමරයේ මේසය උඩ ලොකු Photo Album එකක් තියෙනවා පිටු 97ක්, නෑ 100ක්ම කියමුකෝ. දැන් ඔබට මේ Album එකේ තියෙන එක Photo එකක් බලන්න ඕන කියලා හිතෙනවා. නමුත් තියෙන්නෙ කොතැනද කියලා ඔබ දන්නෙ නැහැ. එකින් එක බලලා තමයි හොයාගන්න ඕන. දැන් ඔබ මේ කාර්යය මෙහෙම කළොත්!

ඇල්බමය විවෘත කරනවා. පළමු පිටුව බලනවා. නැවත ඇල්බමය වසා මේසය උඩ තියනවා. ආයෙමත් විවෘත කරලා 2වැනි පිටුව බලනවා. මේවිදියට නැවත නැවතත් කිරීම ප්‍රයෝජනයක් නැති වැඩක් බව ඔබට වැටහෙනවා ඇති. මොකද, එක වතාවක් ඇල්බමය විවෘත කර ඔබට අවශ්‍ය පින්තූරය හමුවනතුරු පිටු එකින් එක පෙරළාගෙන ගොස් අවශ්‍යදේ හමුවූ විට නැවත ඇල්බමය වසා දැමීම තමයි හොඳම ක්‍රමය.

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

මේවිදියට එකම කේතසටහන එක දිගට නැවත නැවත නොලියා එකවරකින් ක්‍රියාත්මක කරගතහැකි ක්‍රමලේඛකරණ සංකල්පයක් තමයි Loops කියන්නේ. මේ පාඩමෙන් අපි ඉගෙනගන්නේ මේ ආකාරයේ Loops පිළිබඳවයි. PHP වල මෙතෙක් අපි ඉගෙනගත් දේවල් වගේම, මේකත් හරියට එකසැරයක් ඔලුවට දාගත්තම හරිම ලේසියෙන් භාවිතා කරන්න පුලුවන්.

PHP වල Loops වර්ග 04ක් අපි ඉගෙනගමු එකින් එක බොහොම සරලව.

WHILE Loop


කිසියම් කොන්දේසියක් ඉටුවනතාක් කිසියම් කේතයක් ක්‍රියාත්මක කළයුතු නම් ඔබට ඒ සඳහා While Loop එක භාවිතා කළ හැකියි.

While Loop එකක ආකෘතිය මෙසේයි.


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


මෙහි 9 වැනි පේළියේදී මම $x නමින් variable එකක් හඳුන්වාදී එයට 1 නැමැති value එක assign කර තිබෙනවා. ඉන්පසු 10 වැනි පේළියෙන් ඇරඹෙන While Loop එකෙන් මා කියන්නේ x හි අගය 10ට අඩු හෝ සමානව පවතින තාක්කල් x හි අගය “X = “ යන String එකත් සමග බ්‍රව්සර් එකට print කරන ලෙසයි. එහි 13 වැන් පේළියේදී මම එසේ එක් වරක් අගය print කිරීමෙන් පසුව $x හි අගය එකකින් වැඩි කරන ලෙස කියා තිබෙනවා, increment operator එක භාවිතයෙන්.

මේ කේතය ක්‍රියාත්මක වෙන්නෙ මෙහෙමයි. මුලින්ම $x ට 1 යන අගය assign කර තිබෙනවා. දැන් පවතින  $x හි අගය 1යි. While Loop එකට ඇතුළු වී $x හි අගය 10ට අඩු හෝ සමානදැයි විමසා බලනවා. දැනට පවතින 1 නැමැති අගය 10ට අඩු බැවින් සඟල වරහන් තුළ ඇති කේතය ක්‍රියාත්මක කර 1 යන අගය බ්‍රව්සරයේ print කර ඉන්පසු $x හි අගය 1කින් වැඩිකරනවා.

නැවතත් $x හි අගය 10ට අඩු හෝ සමානදැයි විමසා බලනවා. දැනට පවතින 2 නම් අගය 10ට අඩු බැවින් සඟල වරහන් තුළ ඇති කේතය ක්‍රියාත්මක කර 1 යන අගය බ්‍රව්සරයේ print කර ඉන්පසු $x හි අගය 1කින් වැඩිකරනවා.

මෙය දිගින් දිගටම $හි අගය 10 වන තුරු සිදු කරන බව ඔබට තේරුම් යාවි.

අවසානයේදී  $x හි අගය 10ට අඩු හෝ සමානදැයි විමසා බලනවා. දැනට පවතින 10 නම් අගය 10ට අඩු බැවින් සඟල වරහන් තුළ ඇති කේතය ක්‍රියාත්මක කර 1 යන අගය බ්‍රව්සරයේ print කර ඉන්පසු $x හි අගය 1කින් වැඩිකරනවා.

දැන් $x හි අගය 11ක් වී ඇති බැවින් එතැනින් loop එක අවසන් කරනවා.

පැහැදිලියි නේද? මේ කේතයේ ප්‍රතිඵලය මේ විදියට පෙනේවි.


දැන් අපි While Loop එකට බොහෝ සෙයින් සමාන තවත් loop එකක් පිළිබඳව දැනගනිමු.


DO...WHILE loop


Do While loop එකේදී මුලින්ම සිදුවන්නේ අදාල කේතය ක්‍රියාත්මක වීමයි. කොන්දේසිය විමසා බලන්නේ ඉන් අනතුරුවයි. එම අවස්ථාව වන විටත් කොන්දේසිය සත්‍ය නම් නැවත කේතය ක්‍රියාත්මක වීම සිදුවේ.

මේ ලූප් එකේ ආකෘතිය මෙසේයි.


පෙර කී උදාහරණයම අපි දැන් Do..While සඳහා ගෙන බලමු.


පැහැදිලියි නේද?  දැන් අපි තවත් ටිකක් වෙනස් ආකාරයේ Loop එකක් හඳුනාගනිමු.

FOR Loop


කිසියම් කේතයක් ධාවනය වියයුතු වාර ගණන ඔබ හරියටම දන්නවානම්, ඒ සඳහා ඔබට For Loop එකක් භාවිතා කළ හැකියි. කලින් කතා කළ Loops වගේම වුණත් මෙහි ආකෘතියේ පුංචි වෙනසක් තිබෙනවා.


මෙතැනදී For කියන පදයෙන් පස්සේ වරහන් තුළ යොදන අගයන්ට අපි parameters කියලා කියනවා. මේ එක් එක් parameter එකෙහි අදහස මේ විදියට පැහැදිලි කරන්න පුලුවන්.

Initiation කියන්නේ ඔබට ගණනය කිරීම ආරම්භ කළයුත්තේ කුමන තැන සිටදැයි යන්නයි. මෙතැනට මේ විදියෙ ඉලක්කමක් වෙනුවට Loop එක ආරම්භයේදී ධාවනය කළයුතු කේතයක් ඇතුළත් කරන්නත් පුලුවන්. Condition යනු ඔබ විසින් විමසා බලන කොන්දේසියයි. Increment යනු Initiation එක සඳහා මුලින් ලබාදුන් අගය එකකින් වැඩි කරමින් යාමයි. මෙතැනදීත් Initiation එකේදී වගෙම increment එකක් හෝ loop එක අවසානයේදී ක්‍රියාත්මක කළ යුතු කේතයක් ලබාදිය හැකියි.

දැන් මේ සඳහා උදාහරණයක් ගෙන බලමු.


මේ කේතයෙන් කෙරෙන්නේ මෙවැනි දෙයක්. For පදයට පසු වරහන් තුළ ඇති $i=1; කොටසෙන් ගණනය කිරීම ඇරඹිය යුත්තේ 1න් බව පවසනවා. ඉන්පසුව $i<=10; කොටසෙන් විමසා බලන කොන්දේසිය නම් $i විචල්‍යය 10ට අඩු හෝ සමානද යන්නයි. ඉන්පසුව සිදුවන්නේ සඟල වරහන් තුළට ගොස් එහි ඇති කේතය ක්‍රියාත්මක කිරීමයි. පෙර කී වරහන තුළ ඇති $i++ කොටසට පැමිණෙන්නේ ඉන් පසුවයි. පැමිණ $i හි අගය 1කින් වැඩි කර නැවතත් යන්නේ  $i<=10; කොටසටයි. ඉන්පසු එම කොන්දේසිය සපිරේනම් නැවත සඟල වරහන තුළ ඇති කේතයත් ඉන්පසුව increment එකත් කරමින් නැවත කොන්දේසිය විමසා බලයි.

පැහැදිලියි නේද? මේ කේතය ප්‍රතිඵලය මේවිදියට ලැබේවි.


හොඳයි, දැන් අපි මේ පාඩමේ අවසාන කොටසට යමු.

FOREACH Loop


අපි ඉහත loops තුනම භාවිතා කළේ සාමාන්‍ය variable එකක තිබෙන අගයක් පරීක්ෂා කර ඒ අනුව එකින් එක වැඩි කරමින් ගොස් අදාල කේතය ක්‍රියාත්මක කරවීම සඳහායි.

නමුත් Array එකක් තුළ ඇති අගයන් එකින් එක පරීක්ෂා කරමින් මෙවැනි දෙයක් කිරීමටනම් අප භාවිතා කළ යුත්තේ Foreach Loop එකයි.

මෙහි ආකෘතිය පහත පරිදි වේ.


මෙහි $array යන්නට ඔබේ array එකෙහි නම ලබාදිය යුතුයි. $value යන්නට ඕනෑම අකුරක් හෝ වචනයක් variable එකක් ආකාරයෙන් ලබාදිය හැකියි. 

ඉහත කතා කළ හැම loop එකකම ක්‍රියාත්මක වන එක් වටයකට අපි iteration එකක් කියා කියනවා. මෙහිදී සිදුවන්නේ loop එකෙහි එක් එක් iteration එකක් පාසාම $array නම් array එකේ ඇති values එකින් එක බලමින්, ඒ එක් එක් value එක $value වෙත assign කරමින් සඟල වරහන් තුළ ඇති කේතය ක්‍රියාත්මක කිරීමයි. මෙහිදී array elements සංඛ්‍යාව අවසන් වනතුරු ඉබේම Index එක එකින් එක Increment වෙමින් යයි.

උදාහරණයක් ගෙන බලමු.


මෙම කේත සටහනේ 9 වැනි පේළියෙන් පළමුවෙන්ම $friends නමින් variable එකක් හඳුන්වා දී ඒ තුළ elements තුනක් සහිත array එකක් ගබඩා කර තිබෙනවා.

ඉන්පසුව, 11 වැනි පේළියෙන් ඇරඹෙන Foreach loop එකෙන් මෙම array එකෙහි ඇති elements එකින් එක බලමින් ඒ එක් එක් අවස්ථාවේදී හමුවන element එකේ අගය $name නම් variable එක තුළට assign කර ඉන්පසුව සඟලවරහන් තුළ ඇති කේතය ක්‍රියාත්මක කරනවා. ඉන්පසු නැවත ඊළඟ element එකට ගොස් එය $name variable එකට assign කර නැවතත් සඟල වරහන තුළ ඇති කේතය ක්‍රියාත්මක කරනවා. array elements සියල්ල අවසන්වනතුරු මෙය සිදුකරනවා. මෙහි ප්‍රතිඵලය පහත අයුරින් ඔබේ බ්‍රව්සරයේ පෙනේවි.


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

මේ ඉහළින් තිබෙන ප්‍රතිඵලයම අපි arrays පාඩමේදී ලබාගත්තේ මේ විදියටයි.


මේ විදියට පේළි 3කින් කරගතයුතු දේ අපිට loops හරහා එක පෙළකින් කරගත හැකිවුණා. තේරුණා නේද?

මේදක්වා ඉගෙනගත් අනෙකුත් සංකල්පත් අරගෙන, වෙනස් වෙනස් Loops ලියලා බලන්න.

මීළඟ පාඩමෙන් අපි තවත් වැදගත් කොටසක් සරලව ඉගෙනගමු. ඒ Function ගැනයි.

ඔබ මේ ලිපියෙන් යමක් ඉගෙනගත්තානම් Comment එකකින් මා දිරිමත් කරන්නත් අමතක කරන්න එපා.ස්තුතියි!