Chan Myae San Hlaing

Chan Myae San Hlaing

Programmer & Anime Enthusiast

19 May 2014

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 များအကြောင်းက စပါမည်။

Variables

ရူ ဘီ သည် dynamic language တစ်ခု ဖြစ်ပါသည်။ ထို့ ကြောင့် variable ကြေညာခြင်းကို သတ်သတ်လုပ်စရာ မလိုပါ။ စသုံးသည့် နေရာမှာ တင် ကြေညာလိုက်လို့ ရပါသည်။ဥပမာ a = 1 ဟု ရေးလိုက် လျှင် a ဟူသော variable ကို ကြေ ညာပြီး 1 ဟူသည့် တန်ဖိုး ထည့် ပြီး ဖြစ်သည်။ @ နှင့် စသော variable များ မှာ instance variable များ တစ်နည်း အားဖြင့် object တစ်ခု ၏ ကိုယ်ပိုင် member variable များ ဖြစ်သည်။ ဥပမာ @name ဟု ရေးလျှင် @name သည် ထို variable ကို အသုံးပြု သည့် class ၏ member variable ဖြစ်သည်။ Instance အဆင့်မဟုတ် ပဲ class အဆင့် variable များအား @ နှစ်လုံးဖြင့် ရေးပါသည်။ ဥပမာ @@count ဟုရေးလျှင် ထို class တစ်ခုလုံး နှင့် သက်ဆိုင်သည့် shared variable တစ်လုံးအဖြစ် အသုံး ပြု နိုင်ပါသည်။ name, person အစရှိသဖြင့် ပုံမှန် နာမည် အားလုံး သည် local variable ဒါမှမဟုတ် method call အဖြစ် သတ်မှတ်ပါသည်။ ရူဘီ တွင် ruby keyword, space သို့မဟုတ် ဂဏန်းဖြင့်စသော နာမည်များမှ လွဲ၍ variable အမည် ပေးနိုင်ပါသည်။ ကျန်သော language များ နှင့် သိပ်မကွာ ခြားပါ။ Global variable များကို တော့ $ ဖြင့် စတင်ပါသည်။ ဥပမာ $name သည် Global variable တစ်လုံးဖြစ်ပါသည်။ ရူဘီ တွင် variable များ၊ method များ အား နာမည်ပေးရာတွင် စကားလုံးခြားနားသောပုဒ်များ တွင် underscore “_” (snake case ဟုခေါ်ပါသည်) ဖြင့် သုံးလေ့ရှိပါသည်။ ဥပမာ user_name, my_var အစရှိသဖြင့် သုံးလေ့ရှိပါသည်။ Java အစရှိသော language များတွင် Camel Case ဟုခေါ်သော အစဆုံးစာလုံးအသေး နောက် စကားစုများကို အစစာလုံး အကြီးနှင့်ရေးလေ့ရှိသော ပုံစံကို သုံးလေ့မရှိပါ။ သုံး၍တော့ ရပါသည်။ ထုံးစံမရှိခြင်းသာ ဖြစ်ပါသည်။

Types

ရူဘီ သည် loosely-typed language တစ်ခုဖြစ်သည်။ တစ်နည်းအားဖြင့် variable တစ်လုံး ၏ အမျိ ုး အစားကို မဖြစ်မနေသတ်မှတ်ရန်မလိုပေ။ variable တစ်လုံး အား “String” ဖြစ်စေ “Integer” ဖြစ်စေ အခြား Object တစ်ခုခု ဖြစ်စေ assign လုပ်ခွင့်ရှိပါသည်။ သို့ သော် Type လုံး၀ ကင်းမဲ့သည်တော့မဟုတ်ပါ။ variable အားလုံးသည် object များ ဖြစ်၍ ထို object အတွင်း ထည့်သွင်းထားသည့် အမျ ိ ုးအစားကို တော့ ဆောင်နေမည်ဖြစ်ပါသည်။ ဥပမာ a = "Hello" ဟု ရေးလျှင် variable a သည် String type ဆောင်သည့် variable ဖြစ်နေပါမည်။ သို့သော် a = 2 ဟု ပြောင်းလဲလိုက်ပါက ၎င်း၏ type လည်း လိုက် ပြောင်းသွားမည်ဖြစ်သည်။ ထို့ကြောင့် explicit type conversion ခေါ် type ပြောင်းလဲပေးရခြင်းကို ပရိုဂရမ်မာ က တာဝန်ယူစရာမလိုပါ။ သို့သော် object အချင်းချင်း message များ ပို့ရာတွင် basic type များ ပြောင်းလဲလို ပါက explicit ပြောင်းလဲနိုင်ရန် to_s, to_i အစရှိသဖြင့် Type Conversion Method များ ထည့်သွင်းပေးထားပါသည်။

Hello World

Programming Language များ လေ့လာရာတွင် Hello World program ဖြင့် စတင်ခြင်းသည် ထုံး စံ တစ်ခု လိုပင် ဖြစ်နေပါပြီ။ ရူဘီ အတွက် Hello World မှာ အလွန် လွယ်ကူ ပါသည်။ puts "Hello World" ဆိုလျှင့် Hello World ထုတ်ပေးသော program တစ်ခု ဖြစ်ပါပြီ။ puts သည် console ကို print ထုတ်ပေးသော system function တစ်ခု ဖြစ်သည်။ နောက် က “Hello World” ဟူသော string ထည့်ပေးလိုက်သောအခါ console ပေါ် တွင် output ထွက်လာပါသည်။ ~ puts သည် အလိုအလျောက် နောက် တစ်လိုင်း ဆင်းပေးပါသည်။'\n' သတ်သတ်ထည့်ပေးစရာမလိုပါ။

(EDIT: 26-May-2014, ပထမအကြိမ် ဤ ဆောင်းပါးရေးစဉ်က Ruby Comments နှင့် Constant များ အကြောင်းကျန်ခဲ့ ၍ ထပ်ဖြည့်ထားပါသည်။ )

Comments

ရူဘီ တွင် source ကုတ် အတွင်း commentပေးလိုပါက # sign ဖြင့် စပေးရပါသည်။# ဖြင့်စထားသောနေရာမှစ၍ ထို တစ်လိုင်းလုံးကို comment အဖြစ်သတ်မှတ်ပြီး execute လုပ်ရာတွင် လျစ်လျူ ရှုသွားမည်ဖြစ်ပါသည်။ ရူဘီတွင် inline comment ပုံစံမရှိပါ။

Constants ရူဘီ တွင် constant များ အားလုံးကို English Capital Letter ဖြင့် စရေးလေ့ရှိပါသည်။ class name, module name အစရှိသော constant များကို အစစာလုံးသာ အကြီးထားလေ့ရှိပြီး တန်ဖိုး constant များကို တော့ ALL_CAPITAL ပုံစံဖြင့် ရေးလေ့ရှိပါသည်။

(END EDIT:)

Methods or Functions

ရူဘီ method တစ်ခု ကို def နှင့် end keyword နှစ်ခုဖြင့် သတ်မှတ်ပါသည်။

1
2
3
def my_method
  puts "Hello World"
end

ရူဘီ တွင် method များအား အသုံးပြု ပုံဂရမ်မာက ထူးခြား ပါသည်။ အခြား language များ ကဲ့ သို့ ဝိုက်ကွင်း နှစ်ခု ထည့် စရာမလိုပါ။ မိမိခေါ်လိုသော method name ကို ရေးလိုက်လျှင် ခေါ်လို့ ရပါသည်။ အကယ်၍ parameter ပေးလျှင် space ခြား ပြီး ပေးရုံပဲ ဖြစ်သည်။ ဥပမာ puts "Hello" သည် puts method ကို "Hello" parameter ပေး၍ ခေါ်ထားခြင်းဖြစ်သည်။ multiple parameter ပေးလျှင် ကော်မာ , ခံပြီးထပ်ထည့်လို့ ရပါသည်။ ဥပမာ add 1,2 သည် add method ကို parameter 1 နှင့် 2 ပေး၍ ခေါ်လိုက်ခြင်းဖြစ်သည်။အကယ်၍ ဝိုက်ကွင်း ပေး ပြီး ခေါ်ချင်လျှင်လည်း ခေါ်လို့ ရပါသည်။ ဥမာ add(1,2)သည် လည်း မှန်ကန်သော ရေးနည်းဖြစ်သည်။ များသောအားဖြင့် တစ်ဆင့်ထဲခေါ်သော method များကို space ဖြင့် ရေးပြီး နှစ်ဆင့်သုံးဆင့်ခေါ် သော၊ ရှုပ်ထွေးနိုင်သည့် method call များတွင် ဝိုက်ကွင်း ထည့်ရေးလေ့ရှိသည်။ ရူဘီ တွင် method အားလုံးသည် return ပြန် ပါသည်။ return keyword ဖြင့် သတ်သတ် return ပြန်လို့ရသလို return keyword မပါ လျှင်လည်း နောက်ဆုံ းအကြောင်း ၏ ရလဒ်ကို အလိုလို return ပြန် သွားမည်ဖြစ်သည်။ ရူဘီ method များအား class တစ်ခုထဲတွင် member တစ်ခု အနေနှင့်ထည့်ရေးနိုင်သလို global space တွင် သူ့ချည်းသက်သက်လည်း ရေးနိုင်ပါသည်။

မှတ်ချက်။ ။ ရူဘီသည် object များကို အခြေခံထားသော language တစ်ခုဖြစ်ပါသည်။ ရူဘီ တွင် အရာရာ သည် object များ နှင့် ၎င်းတို့ အချင်းချင်း ဆက်သွယ်နေကြသော message များသာဖြစ်ပါသည်။ထိုအကြောင်းကို class နှင့် object များအကြောင်းရောက်မှ အသေးစိတ်ရှင်းသွားပါမည်။

Conditionals

အခြားခြားသော language များလိုပင် ရူဘီ တွင်လည်း conditional statement များ ရေးနိုင်ပါသည်။ if နောက်တွင် မိမိစစ်လိုသော မှန်\မှား expression ကို ရေး၍ then နောက်တွင် မှန်လျှင်လုပ်မည့် expression, else နောက်တွင် မှားလျှင် လုပ်မည့် expression ကို ရေးရပါသည်။ မှတ်ရမည့်တစ်ချက်မှာ if ဖွင့် ပြီးတိုင်း နောက်က end ပိတ်ပေးရခြင်းဖြစ်သည်။ ဥပမာ

1
2
3
4
5
if true then
  puts "True"
else
  puts "False"
end

else ကိုကြားထဲတွင် ကြိုက်သလောက် ညှပ်ထည့်၍ရေးနိုင်ပါသည်။ မှန်\မှား expression ကို () ဝိုက်ကွင်း မထည့်လည်းရပါသည်။ အဓိကက if တစ်ခုဖွင့်တိုင်း ထို if နှင့်သက်ဆိုင်ရာ အဆုံးသတ်တွင် end ထည့်ပေးရခြင်းဖြစ်သည်။ ရူဘီတွင် if နှင့် ဆန့်ကျင်ဘက် unless လည်းရှိပါသည်။ unless မှာ if not နှင့် အတူတူဖြစ်သည်။ ပိုမို ရိုးရှင်းသော english grammar ပုံစံအတိုင်းရေး နိုင်အောင် ထည့်သွင်းပေးထားခြင်းဖြစ်သည်။ unless ကို သုံးချင်လျှင် if နေရာမှာ unless ကို အစားထိုးရေးရုံပဲ ဖြစ်သည်။ if unless နှစ်ခုလုံးကို အတိုရေးနိုင်သော ပုံစံလည်းရှိသည်။ တစ်ကြောင်း if ဟုတ် ခေါ်သော ပုံစံဖြစ်သည်။ မှန်လျှင်လုပ်မည့် expression ကို ရှေ့ က ရေး၍ နောက် တွင် if နှင့် မှန်\မှား expression ကို ထည့်ရသည်။ဥပမာ puts "True" if true , puts "false" unless false စသဖြင့် ပုံစံမျိုး ဖြစ်သည်။ တစ်ကြောင်း ပုံစံတွင် end keyword ထည့်ပေးရန်မလိုပါ။ ရူဘီတွင် switch statement လည်းရှိပါသည်။ သို့သော် switch keyword ကိုတော့ မသုံးပါ။ case…when ပုံစံဖြင့် သုံးပါသည်။ caseနောက် တွင် စစ်ချင်သော မှန်\မှား expression ကို ထည့်၍ အောက် က when နောက်တွင် မိမိစစ်ချင်သော expression တစ်ခုချင်းအတွက် စစ်နိုင်ပါသည်။default statement ကိုတော့ else ဖြင့် သုံးရပါသည်။ အားလုံးပြီးသွားလျှင် end keyword ပိတ်ပေးဖို့လိုပါသည်။ ဥပမာ

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
my_number = 3

case my_number
when 3
  puts 3
when 4
  puts 4
else
  puts "Default"
end

Operators

ရူဘီတွင် အခြား language များတွင်သုံးသော operator အများ စုကို အသုံးပြုနိုင်ပါသည်။ သို့သော် +,–,,/ ,% စသော arithmatic operator များသည် အမှန်တကယ်တော့ method name များသာ ဖြစ်ပါသည်။ ထို operator များ အား special method များအဖြစ် သတ်မှတ်ထားခြင်းဖြစ်သည်။ ယင်းအကြောင်းကို class နှင့် object များ အကြောင်းတွင် ထပ်မံ ရှင်းပါမည်။ ရူဘီ တွင် and, or နှင့် not နှစ်မျိ ုး ရေးလို့ ရပါသည်။ and, or နှင့် not ဟူ ၍ english စာလုံးအတိုင်းဖြစ်စေ၊ &&,|| နှင့် ! ဟူ၍ sign နှင့်ဖြစ်စေ ရေးနိုင်ပါသည်။၎င်း သုံးခုမှာ non-method operator များ ဖြစ်၍ method တစ်ခုကဲ့ သို့ အသုံးပြု၍ မရနိုင်ပါ။ အခြား conditional operator များမှာ “>, >= ,<, <=, ==, ===, !=” စသည်ဖြင့် ဖြစ်ပါသည်။ ၎င်း တို့မှာ method များ ဖြစ်၍ override လုပ်လို့ ရနိုင်ပါသည်။ assignment operator မှာ = ဖြစ်ပြီး +=,-=,*=,/= စသည့် shortcut assignment များလည်းရှိပါသည်။ - နှင့် + ကို unary တစ်လုံး operator များ အဖြစ်လည်းသုံးနိုင်ပါသည်။ ++ နှင့် – ကဲ့သို့ increment operator မရှိပါ။ ထူးခြားသည့် operator အချိ ု့ မှာ namespace operator ::, array subscript operator [] နှင့် « operator တို့ ဖြစ်သည်။ ၎င်းတို့ ၏ အသုံးကို ဆီလျော်ရာ နေရာတွင် ထည့်သွင်းရှင်းပြသွားမည်ဖြစ်ပါသည်။ if-else conditional များကို ternary operator ? : ဖြင့်လည်း ရေးနိုင်ပါသည်။ ဥပမာ 1===1 ? puts “one” : puts “two” ပုံစံမျ ိ ုးဖြစ်သည်။ ,/ သည် +,– ထက် precedence မြင့်ပါသည်။ Range operator များ လည်းရှိပါသည်။ .. နှင့် … မှာ range operator များဖြစ်သည်။ Range operator များသည် ဂဏန်း နှစ်ခု အကြား အရေအတွက်ကို သတ်မှတ်ပါသည်။ ဥပမာ 1..10 သည် 1 နှင့် 10 ကြားမှ ဂဏန်း အားလုံးကို ရည်ညွှန်းပါသည်။ dot နှစ်လုံး ..မှာ inclusive range operator ဖြစ်ပြီး 1..10 ဆိုပါက 10 ပါ အပါအဝင် ဆယ်လုံးဖြစ်သည်။ dot သုံးလုံး … ကတော့ non-inclusive ဖြစ်ပြီး 1…10 ဟုဆိုလျှင် 10 မပါဝင်ဘဲ 1 to 9 ကို သာ ဆိုလိုပါသည်။ Range operator များ မှာ looping statement များ ရေးရာတွင် အလွန်အသုံးဝင်သော operator များ ဖြစ်သည်။

ဆက်ပါဦးမည်..

ကျေးဇူးတင်ပါသည်

dbc

Categories