Dreaming Black Cat

Whispers of an ordinary cat...

Ruby နွင့္ ေတြ့ ဆုံ ျခင္း ၅

ေရွ့ ေဆာင္းပါးတြင္ ရူဘီ ၏ object အေျခခံသဘာ၀အားေဖာ္ျပခဲ့ပါသည္။ ယခုေဆာင္းပါးတြင္ ရူဘီ၏ ပင္မ စြမ္းအားတစ္ခု ျဖစ္ေသာ Module မ်ား အေျကာင္းကုိ ေဖာ္ျပသြားမည္ ျဖစ္ပါသည္။

Module မ်ားအား တည္ေဆာက္ျခင္း

Module မ်ားသည္ class မ်ားကဲ့သုိ့ပင္ method မ်ား၊ instance variable မ်ား၊ class variable မ်ား၊ constant မ်ားအား ျခုံ ငုံ ထည့္သြင္းထားနုိင္ေသာ၊ အမည္ေပးနုိင္သည့္ ကုတ္အစုအေ၀းတစ္ခု ျဖစ္ပါသည္။ သို့ရာ တြင္ Module တစ္ခုကုိ အသုံးျပု ၍ class တစ္ခုကဲ့ သုိ့ object instance မ်ား တည္ေဆာက္ျခင္း မျပု နုိင္ပါ။ Module တစ္ခုကုိ တည္ေဆာက္လုိပါက class keyword ေနရာတြင္ module keyword ကုိ အစားထုိးသုံးစြဲရပါသည္။ ထုိ module keyword နွင့္ end keyword အျကားတြင္ class တစ္ခုကဲ့သုိ့ ပင္ method မ်ား ေျကညာျခင္း၊ Constant မ်ားေျကညာျခင္း အစရွိသျဖင့္ ျပု လုပ္နုိင္ပါသည္။ သုိ့ရာတြင္ Module မ်ားသည္ class တစ္ခုကဲ့သုိ့ instance object မ်ား မတည္ေဆာက္နုိင္သည့္အတြက္ initialize hook method အားအသုံးျပု နုိင္မည္ မဟုတ္ပါ။ဥပမာ

“Module Definition”
1
2
3
4
5
module MyModule
  MY_CONSTANT = "My constant"
  def my_method
  end
end

Module မ်ား အား အဓိက အား ျဖင့္ namespace မ်ား တည္ေဆာက္ရာ၌လည္းေကာင္း၊ class မ်ားအတြင္း တူညီေသာ functionality တစ္ခုအား mix-in မ်ား အျဖစ္ေရာေမြွအသုံးျပု ရာ၌ လည္းေကာင္း အသုံးခ်ေလ့ရွိပါသည္။

Ruby နွင့္ ေတြ့ ဆုံ ျခင္း ၄

ျပီးခဲ့ ေသာေဆာင္းပါး တြင္ ရူဘီ ၏ အေျခခံ OOP feature မ်ားကုိ ေဖာ္ျပခဲ့ ပါသည္။ ရူဘီသည္ ယခင္ေဆာင္းပါးမ်ားတြင္ ေရးခဲ့သည့္အတုိင္း Object မ်ား ကုိ အသုံးျပု ၍ ဖြဲ့ စည္းတည္ေဆာက္ထားေသာ language တစ္ခုျဖစ္ပါသည္။ Java အစရွိေသာ language မ်ားကဲ့ သုိ့ primitive data type မ်ားကုိ အေျခခံ၍ object မ်ား တည္ေဆာက္ေရးသားျခင္းမဟုတ္ပဲ။ Number နွင့္ String ကဲ့ သုိ့ primitive data type မ်ားသည္ ပင္လွ်င္ Object မ်ား အျဖစ္ဖြဲ့ စည္းတည္ေဆာက္ထားျခင္းျဖစ္ပါသည္။ ထုိ့ေျကာင့္ ရူဘီ ၏ OOP ကုိ နားလည္လုိပါ က ရူဘီ language အတြင္း object မ်ား အခ်င္းခ်င္း မည္သုိ့ မည္ပုံ သက္ေရာက္ဆက္နြယ္ေနသည္ ကုိ သိထားဖုိ့ လိုအပ္ပါသည္။

Basic Object နွင့္ Object ေဆြစဥ္မ်ိ ုးဆက္

ရူဘီ တြင္ အရာရာသည္ BasicObject ဟုေခါ္ေသာ object တစ္ခုကို အေျခခံျပီးတည္ေဆာက္ထားပါသည္။ ၎ BasicObject တြင္ object မ်ား အား တည္ေဆာက္၊ ရွင္းလင္း၊ ျပုျပင္ေျပာင္းလဲ၊ အသုံးခ်ေစနုိင္မည့္ အနည္းဆုံးလုိအပ္ေသာ feature အားလုံးကုိ ထည့္သြင္းထားပါသည္။ ထုိ object မွတစ္ဆင့္ အျခားေသာ language feature မ်ား အတြက္ inheritance ကုိ အသုံးခ် ၍ ျဖစ္ေစ၊ အျခားနည္းမ်ားျဖင့္ ျဖစ္ေစ object မ်ား အဆင့္အဆင့္ တည္ေဆာက္သြားျခင္းျဖစ္သည္။ (မွတ္ခ်က္။ ။ ရူဘီ အတြင္းပုိင္း object မ်ား၏ အလုပ္လုပ္ပုံသည္ အဓိက ရူဘီ ဗားရွင္း ျကီး မ်ားတြင္ အေျပာင္းအလဲမ်ားရွိျကပါသည္။ ဤ ေဆာင္းပါးသည္ ရူဘီ ဗားရွင္း 1.9.3 အား အသုံးျပုထားပါသည္။)

Ruby နွင့္ ေတြ့ ဆုံ ျခင္း ၃

ျပီးခဲ့ ေသာေဆာင္းပါးတြင္ Looping Structures မ်ားအတြက္ အသုံးျပ ုနုိင္သည့္ နည္းလမ္းမ်ားကုိ ေဖာ္ျပခဲ့ပါသည္။ ယခု ရူဘီ ၏ object-oriented programming စြမ္းအား ကုိ မိတ္ဆက္ရန္ အခ်ိန္တန္ျပီဟုထင္ပါသည္။

Class and Objects

ရူဘီသည္ programming style တစ္မ်ိ ုးထက္မက ေရးနုိင္ေသာ multi-paradign language တစ္ခုျဖစ္ပါသည္။ ၎တုိ့ ထဲတြင္ မွ object-oriented programming(OOP) ကုိ မ်ားစြာအသားေပးထားပါသည္။ သုိ့ေသာ္ Java ကဲ့ သုိ့ class အေျချပ ု OOP ပုံစံတစ္မ်ိ ုးထဲေတာ့ မဟုတ္ပါ။ ရူဘီတြင္ အရာရာသည္ object ျဖစ္ပါသည္။ ယုတ္စြ အဆုံး 1 , 2, 3 အစရွိ interger literal မ်ား သည္ ပင္ object မ်ား ျဖစ္ပါသည္။ ရူဘီ တြင္ primitive data type ဟူ ၍ မရွိပါ။ ရူဘီ object မ်ား အခ်င္းခ်င္း method call မ်ား ျဖင့္ message မ်ား ပုိ့ ျခင္းအားျဖင့္ အလုပ္လုပ္ပါသည္။ ရူဘီ သည္ smalltalk ၏ object-based concept ကုိ အေျခခံ၍ တည္ေဆာက္ထားျခင္းျဖစ္ပါသည္။ ထုိ့ေျကာင့္ ရူဘီ ကုိ ထိထိေရာက္ေရာက္ အသုံးခ်လုိလွ်င္ ရူဘီ ၏ object model ကုိ ေတာ့ နားလည္ထားဖုိ့ လုိအပ္ပါသည္။ပထမဦးစြာ အျခား OOP language မ်ားကဲ့ သုိ ့ အသုံးျပ ုပုံကုိ ေဖာ္ျပပါမည္။

ပုံမွန္ OOP ကဲ့ သုိ့ ပင္ ရူဘီ တြင္ class မ်ား ေျကညာနုိင္ပါသည္။ class တစ္ခု သည္ object တစ္ခု ေဆာက္ဖုိ့ အတြက္ blueprint တစ္ခု ျဖစ္သည္။ ရူဘီတြင္ class တစ္ခုကို class keyword ျဖင့္ တည္ေဆာက္ျပီး class keyword ေနာက္တြင္ မိမိ ေျကညာလုိေသာ class နာမည္ကုိ ေရးရပါသည္။ ထုိ့ေနာက္ end keyword ျဖင့္ အဆုံးသတ္ေပးရပါသည္။ ထုိ class နွင့္ end keyword နွစ္ခုအျကားတြင္ေရးေသာ ကုတ္သည္ ထုိ class နွင့္သက္ဆုိင္ေသာ ကုတ္ပင္ျဖစ္ပါသည္။

Ruby နွင့္ ေတြ့ ဆုံျခင္း ၂

ျပီးခဲ့ ေသာ ေဆာင္းပါး တြင္ ရူဘီ language မိတ္ဆက္အျဖစ္ variable, types, condtionals စသည္တုိ့ အေျကာင္း ေရးခဲ့ပါသည္။ ဆက္လက္၍ looping structures မ်ား အေျကာင္း ေဖာ္ျပသြားပါမည္။

Looping Structures

ပုံမွန္အားျဖင့္ programming basic တြင္ conditional မ်ား ျပီးသည္နွင့္ looping structure မ်ား လာရျမဲ ျဖစ္သည္။ သုိ့ ေသာ္ ရူဘီ တြင္ looping အသုံးျပု ပုံသည္ အျခား language မ်ားနွင့္ ျခားနားပါသည္။ Loop structure ကုိ သုံး ရန္ အေျကာင္းျပခ်က္ အျကမ္းအားျဖင့္ ၂ မ်ိ ုး ရွိသည္ဟု ဆုိနုိင္ပါသည္။ တစ္မ် ိ ုး မွာ အျကိမ္ျကိမ္ အဖန္ဖန္ လုပ္ရေသာ အရာ မ်ား အတြက္ သုံးျခင္းျဖစ္ျပီး ေနာက္တစ္မ်ိ ုးမွာေတာ့ collection ဟုေခါ္ေသာ data ကုိ အစုအေ၀း ျဖင့္ သိမ္းဆည္းသည့္ data structure မ်ားကုိ သုံးျခင္း၊ ျပင္ျခင္း၊ အသစ္ထည့္ျခင္း မ်ား ျပုလုပ္ရန္ျဖစ္သည္။ ရူဘီ တြင္ နွစ္မ်ိ ုးလုံးအတြက္ loop structure မ်ား သီးသန့္ ရွိပါသည္။ ပထမတစ္မ်ိ ုးတြင္ အက် ုံး ၀င္ေသာ looping မ်ား အတြက္ loop, while,until နွင့္ for in control structure မ်ား ရွိသည္။အရုိးရွင္းဆုံးမွာ loop statement ျဖစ္သည္။

loop statement

loop statement ကို အရုိးရွင္းဆုံး infinite loop တစ္ခုအတြက္သုံးနုိင္သည္။ဥပမာ

“loop Statement”
1
2
3
   loop do
     puts "hello"
   end

အထက္ပါ loop သည္ user က ctrl+c မနွိပ္မခ်င္း loop ပတ္ေနမည့္ infinite loop တစ္ခုျဖစ္သည္။ သူ့ခ်ညး္ သက္သက္ကေတာ့ သိပ္အသုံးမ၀င္ ပါ။ သုိ့ ေသာ္ ထုိ loop ကုိ control လုပ္နုိင္မည့္ break, next နွင့္ redo keyword မ်ားလည္းရွိပါသည္။ break keyword သည္ loop ကုိ ရပ္သြားေစမည့္ keyword ျဖစ္ျပီး next keyword ကေတာ့ လက္ရွိအျကိမ္ ေက်ာ္ ၍ ေနာက္တစ္ေက်ာ့ကုိ skip လုပ္မည့္ keyword ျဖစ္သည္။ redo ကေတာ့ လက္ ရွိအေက်ာ့ကုိ ထပ္ေက်ာ့ လုပ္ေစမည့္ keyword ျဖစ္သည္။ ၎ keyword မ်ား ျဖင့္ တြဲသုံးပါက loop statement သည္ လည္း အစြမ္းထက္ေသာ control structure တစ္ခု ျဖစ္လာပါသည္။

Ruby နွင့္ ေတြ့ ဆုံျခင္း ၁

ကြ်န္ေတာ့္ ဘ၀ တြင္ Programming နွင့္ပတ္သက္၍ အျကီးမားဆုံး အေျပာင္း အလဲ နွစ္ခု ရွိပါသည္။ ပထမတစ္ခုမွာ ကြန္ပ်ူ တာ ပထမနွစ္တြင္ ေဒါက္တာေဒါ္အိအိလုွိင္ နွင့္ C++ ျဖင့္ Programming အေျခခံကုိ သင္ျကားခဲ့ ရျခင္းျဖစ္ျပီး ဒုတိယတစ္ခုမွာေတာ့ Ruby on Rails ကုိ စတင္ ေလ့လာခြင့္ ရခဲ့ျခင္းျဖစ္ပါသည္။ Ruby on Rails ကုိ စတင္ေလ့လာခြင့္ ရခဲ့ခ်ိန္မွ စ၍ Programming အေပါ္ထားေသာ ကြ်န္ေတာ့္ သေဘာထား မ်ား စြာ ေျပာင္းလဲခဲ့ ပါသည္။ ယင္းမတုိင္မီ က Web Development သည္ ကြ်န္ေတာ့ အတြက္ ခက္ခဲေသာ ဘာသာတစ္ခုျဖစ္ခဲ့ သည္။ သုိ့ေသာ္ Convention Over Configuration နွင့္ Programmer Happiness ကုိ အဓိကထားေသာ Rails Framework နွင့္ Ruby Language က Web Development ကုိ လြယ္ကူေအာင္ ဖန္တီးေပးခဲ့သည္။ ထုိ့ အျပင္ ယခင္ က Programming Language အသစ္မ်ား၊ Technology အသစ္မ်ားကုိ ေျကာက္ရြံ ့ခဲ့ေသာ ကြ်န္ေတာ့္ကုိ လည္း အသစ္ အဆန္း ဆုိတာ ေျကာက္စရာမဟုတ္ေျကာင္း မီးေမာင္းထုိးျပေပးခဲ့ပါသည္။ _why က ေျပာခဲ့သည့္ Vitamin Rအား ကြ်န္ေတာ္နွင့္ အလားတူ ခံစားေနရသူမ်ား အတြက္ ကြ်န္ေတာ္ တတ္စြမ္းသေလာက္ ကြ်န္ေတာ္ ျပန္လည္ ေ၀မွ်ခ်င္သည့္အတြက္ ဤ စာကုိ ေရးပါသည္။

Vitamin R. Goes straight to the head. Ruby will teach you to express your ideas through a computer. You will be writing stories for a machine. * Why’s Poignant guide to Ruby-_why_the_lucky_stiff*

ရူဘီ အေျခခံကုိ ေလ့လာရန္ အတြက္ ေလ့လာစရာ အရင္းအျမစ္မ်ား အင္တာနက္ေပါ္တြင္ အလြန္မ်ားျပားပါသည္။ သုိ့ေသာ္ ၀မ္းနည္းစရာတစ္ခ်က္က ကြ်န္ေတာ္ ဤ စာကို ေရးသည့္အခ်ိန္ ထိ ျမန္မာဘာသာျဖင့္ ေရးသားေသာ ရူဘီ ပရုိဂရမ္မင္း အေျကာင္း စာမ်ား အေတာ္ပင္နည္းပါး လွပါသည္။ ထုိ ကဲ့ သုိ့ လြတ္ေနေသာ ကြက္လပ္ တစ္ခု တြင္ တတ္စြမ္းသမွ် ၀င္ေရာက္ ျဖည့္ဆည္းေပးခ်င္ပါသည္။

ကြ်န္ေတာ္ ရူဘီကုိ စတင္ေလ့လာ စဥ္ က Java,C++,Javascript အစရွိသည့္ ပရုိဂရမ္ဘာသာစကားမ်ား အထိုက္အသင့္ ေလ့လာခဲ့ ျပီး ျဖစ္ပါသည္။ ထုိ့ အတြက္ ပရုိဂရမ္ဘာသာစကား အားလုံးအတြက္ အေျခ ခံ ျဖစ္ေသာ variable, loop, function, array, data types, conditionals အစရွိသည္မ်ား ကုိ ကြ်မ္း၀င္ ျပီး ျဖစ္သည္။ ဤ စာဖတ္သူ အမ်ားစုလည္း အလားတူ ျဖစ္မည္ ဟု ယူဆပါသည္။ ထုိ့ေျကာင့္ ထုိ အပုိင္းမ်ားကို ကြ်န္ေတာ္ ေသခ်ာ ရွင္းျပမည္ မဟုတ္ပါ။ အျခား language မ်ားနွင့္ ကြဲျပားျခားနား သည္မ်ားကို သာ ဦးစားေပးေရးသြားမည္ျဖစ္ပါသည္။ ထို့ အတူ ရူဘီ ကုိ install လုပ္ ျခင္း နွင့္ သက္ဆုိင္ ေသာအေျကာင္းအရာမ်ားကုိ လည္း ေရးသြားမည္မဟုတ္ပါ။ အကယ္၍ ရူဘီကုိ install လုပ္ခ်င္ပါက “how to install ruby” ဟုသာ ဂူဂယ္ လုိက္ပါ။ သိပ္အခက္အခဲ မရွိပဲ သြင္းနုိင္ပါလိမ့္မည္။ပထမဆုံး variable မ်ားအေျကာင္းက စပါမည္။

Octopress Blog အသစ္

ကြ်န္ေတာ့္ အေနနဲ့ ေက်ာင္းသားဘ၀ကထဲက ကိုယ္ပုိင္ ဘေလာ့ခ္ တစ္ခု ေရးခ်င္ခဲ့ တာ ျကာပါျပီ။ ဒီျကားထဲမွာ blogging engine တစ္ခ်ိ ု့ နဲ့ စမ္းေရး ျကည့္ခဲ့ ေပမဲ့ content လည္း မယ္မယ္ရရ မရွိ၊ စြဲစြဲ ျမဲျမဲ လည္း မရွိခဲ့ ပါဘူး။ ေနာက္ ပုိင္း မွာ Ruby Programming ကို စေလ့လာ ျပီး ေနာက္ပုိင္း Ruby Community နဲ့ စတင္ထိေတြ ့ခဲ့ ပါ တယ္။ Expert ေတြ၊ Geek ေတြ ရဲ ့ blog ေတြ ကုိ ဖတ္ရျပီး သူတို့ ေတြ လုိ မ်ိ ုး ကုိယ္ကုိယ္တုိင္လည္း စာဖတ္သူေတြ အက် ိ ုး ရွိေစမဲ့ blog မ်ိ ုး ေရးခ်င္လာပါတယ္။ အဲဒီ မွာ Octopress Project ကို စေတြ ့တာ ပါပဲ။ စဖတ္ရကထဲက stactic page ဆုိတာက ကြ်န္ေတာ့ စိတ္ကို ဆြဲေဆာင္ေစပါတယ္။ Markdown format နဲ့ ေရးရတာက အလုပ္ရွုပ္သက္သာေစပါတယ္။ ေနာက္ Community က ေပးထားတဲ့ အေျခခံ theme ေတြက လည္း ရုိးရွင္းျပီး ျကည့္လုိ့ေကာင္းပါတယ္။ ဒါနဲ့ စျပီး လုပ္ ျဖစ္ပါတယ္။ စလုပ္ေတာ့ ကိုယ္ပုိင္ theme လုပ္မယ္ဆုိ ျပီး စလုပ္ပါတယ္။ ဒါေပမဲ့ နဂုိတည္း က web design ပါရမီမပါလွတဲ့ ကြ်န္ေတာ့္ အတြက္ ကြ်န္ေတာ့္ theme က သူမ်ား ေတြ လုပ္ထားတာေလာက္ လည္း ျကည့္လို့မေကာင္း ကာလာလည္း မအပ္စပ္တာနဲ့ Octorpress Themes က lavendar theme ကုိ ယူထားပါတယ္ basic theme ကုိ ကာလာ ပဲ ခ်ိန္းထားတာပါ။ ရုိးရွင္းျပီး မ်က္စိေအးပါတယ္။

တကယ္ေတာ့ စာေရးရတာ မလြယ္ပါဘူး။ ငယ္ငယ္ကေတာ့ ဒုိင္ယာရီေတြ ကဗ်ာေတြ ေရးျဖစ္ေပမဲ့ ေက်ာင္းသားဘ၀ကုိ ေက်ာ္လြန္ျပီး အလုပ္ခြင္ကုိ ၀င္ရျပီ ဆုိတာနဲ့ စာေရးဖုိ့ဆုိတာ သက္သက္ အခ်ိန္ေပးရတဲ့ အရာ တစ္ခု ျဖစ္လာတာပါ။ ဒါေပမဲ့ လည္း ကြ်န္ေတာ္ ေလ့လာတာေတြ၊ ကြ်န္ေတာ္ ေတြးမိတာ ေတြ၊ ကြ်န္ေတာ္ ေ၀မ်ွ ခ်င္တာေတြ အကုန္လုံးကုိ ေ၀မွ် နုိင္ဖုိ့အတြက္ ကြ်န္ေတာ္ စာေရးမွ ျဖစ္မွာပါ။ မဟုတ္ရင္ ကြ်န္ေတာ့္ရဲ့ ျကိုးစားအားထုတ္မွုေတြ၊ ေတြးမိတဲ့ အေတြး ေတြ ၊ မွားမိတဲ့ အမွားေတြ ဟာ ေလထဲမွာ ေပ်ာက္သြားမွာပါပဲ။ဒါေျကာင့္ ဒီဘေလာ့ခ္မွာ ကြ်န္ေတာ့္ အေတြး အေခါ္ေတြ၊ အေတြ့အျကုံေတြ ထင္ျမင္ခ်က္ေတြကုိ မွတ္တမ္းတင္သြားပါမယ္။ ဒီ ဘေလာ့ခ္ကုိ ဖတ္မိသူေတြ အားလုံးမဟုတ္ေတာင္ တစ္ဦးတစ္ေလ အတြက္ အက်ိ ုး တစ္စုံတစ္ခု ျဖစ္ေစရင္ေတာင္ ကြ်န္ေတာ့္ အေနနဲ့ ေက်နပ္ပါျပီ။