Monday, September 3, 2018

Rubyအခန္း(3)


Unicode

Data အမျိုးအစားများ နှင့် Data ဖွဲ့စည်းမှုပုံ


အမှာ။ ။ အသုံးချ Ruby လို့ခေါင်းစဉ်တပ်ထားပြီး ခုထိ အသုံးမချရသေးပါလားလို့ အပြစ်တင်ရင်လည်းခံရမည်ပင်။
သို့သော်၊ ထိုသို့အသုံးချသည့်အဆင့်ကိုရောက်ရန်၊ သိရမည့် အကြောင်းများကိုကား ရေးသားရပေဦးမည်။
Programming ဟူသည် Data များကို ပြုပြင်ပြောင်းလဲ အသုံးချခြင်းဖြစ်ရာ၊ အသုံးပြုနိုင်သော Data အမျိုးအစားများ
အကြောင်းကိုသိရန်လိုအပ်ပါသည်။

ပထမဦးစွာ Variable များကြေငြာခြင်းအကြောင်းကို နားလည်လွယ်စေရန်၊ ကြိုးစားအားထုတ်ကာ၊ ဆက်စပ်ရှင်းလင်းရေးသားထားပါသည်။
၄င်းနောက်မှ Ruby ၏ Data အမျိုးအစားများနှင့် Data ဖွဲ့စည်းမှုပုံစံများ ကိုဖော်ပြထားပါသည်။
Class, Object and Object Oriented Programming
ယခု သင်ခန်းစာများသည် Object Oriented Programming (OOP) ကိုဦးတည်ရေးသားသည် မဟုတ်သော်လည်း၊
Ruby သည် OOP Language တစ်ခုဖြစ်သည် တစ်ကြောင်း၊ Object သည် အခြေခံအကျဆုံး၊ Data အမျိုးအစားဖြစ်နေသည်ကြောင့် တစ်ကြောင်း
ရေးသားရပေသည်။
ပထမဦးစွာ မှတ်သားရမည်မှာ “Everything is object in Ruby.”
Ruby ထဲတွင် အရာတိုင်းသည် Object ဖြစ်သည်။
ဤစာကြောင်းကို စွဲမြဲအောင် အခါတစ်ရာလောက်ရွတ်ဆိုပါ။ (ဟီ ဟီ)
object ဆိုသည်မှာ အဘယ်နည်း။ ဥပမာ ယူကြပါစို့။ ကိုသာသာ သည် ယောကျ်ားတစ်ယောက်ဖြစ်သည်။ (မရယ်ရ)
မသီတာ သည်မိန်းမတစ်ယောက်ဖြစ်သည်။ ထို့ကြောင့် ကိုသာသာတွင် ယောက်ျားများတွင် ရှိအပ်သော စွမ်းရည်များရှိသကဲ့သို့၊
မသီတာ တွင် မိန်းမများတွင် ရှိအပ်သော စွမ်းအားများရှိ၏။ ယောကျ်ား၊ မိန်းမတို့သည်၊ လူများဖြစ်ကြ၏။
ထို့ကြောင့် အဆင့်ဆင့် စွမ်းရည်ဆက်ခံမှု ပုံစံကို ရုပ်ပုံဆွဲကြည့်ပါက အောက်ပါအတိုင်းရလေသည်။
သက်ရှိသတ္တဝါ၊ သက်မဲ့အရာဝထ္ထု အတန်းအစားများနှင့် Object တို့အကြားတွင် များစွားသော
အတန်းအစားများကို ဖန်တီးနိုင်သေးကြောင်း သတိပြုရာ၏။
အထက်ပါ ဥပမာ နည်းတူ၊ Ruby တွင်ပါ၀င်သော Data အမျိုးအစား (အတန်းအစား) အားလုံးသည်လည်း အတန်းအစား အားလုံး၏ဘုံစွမး်ရည်ကို ပိုင်သော
မူလဘူတ Object အတန်းအစားမှ ဆင်းသက်လာသည်ဟုသတ်မှတ်ထားလေသည်။ ထိုသို့ သတ်မှတ်မှုမျိုးထားရှိသော Programming language များ၊ ဥပမာ
Java, C#, Ruby စသည်တို့ကို Object Oriented Language ဟုခေါ်ကာ၊ ၄င်း သတ်မှတ်မှုမျိုးကို လိုက်နာကာ Program ရေးသားခြင်းကို
Object Oriented Programming ဟုခေါ်ဆိုခြင်းဖြစ်သည်။
အထက်ပါ ဥပမာတွင်၊ ကိုသာသာနှင့် မသီတာမှလွဲ၍ အားလုံးသည် အတန်းအစား (class) များဖြစ်ကြပြီး၊ ထိုနှစ်ဦးမှာကား (object instance)
သီးခြား object များဖြစ်ကြသည်။ ဆိုလိုရင်းမှာ၊ ကိုသာသာ အတန်းအစား ဟူသတ်မှတ်၍၊ ကိုသာသာ တစ်ဦးထက်ပို၍ ရှိရန် သတ်မှတ်က၊ မဖြစ်နိုင်ချေ။
ရှင်းလင်းခဲ့သော အချက်များသည် Object Oriented Programming အကြောင်းအရာ၊ တစ်ခုလုံးကို ခြံငုံမိသည်မဟုတ်ချေ။ OOP ၏ အရိပ်အမြွက်၊ Object, Class နှင့်
Inheritance အကြောင်းတို့ကို ဥပမာပေးခဲ့ခြင်းသာဖြစ်ပါသည်။ OOP အကြောင်းကို http://en.wikipedia.org/wiki/Object-ori … rogramming တွင်
ဖတ်ရှုနိုင်ပါသည်။ ယခုကဲ့သို OOP subject မဟုတ်ဘဲ လျှာရှည်ရခြင်းမှာ၊ အောက်တွင် ပါ၀င်သော အခန်းများ၌ object ဟုဆိုလျှင်ဘာကိုဆိုလိုမှန်းသိနိုင်စေရန်နှင့်၊
inheritance သဘောကို မြင်သာစေရန်ဖြစ်ပါသည်။
ထိုမှ တစ်ဖန်….လူ၊ ခွေး၊ လင်းပိုင်၊ လင်းနို့ တို့သည် နို့တိုက်သတ္တဝါများဖြစ်ကြသည်။ မြွေ၊ငါးတို့ သည် နို့မတိုက်သော သတ္တဝါများဖြစ်ကြသည်။
နို့တိုက်နှင့် နို့မတိုက် သတ္တဝါများသည်၊ သက်ရှိသတ္တဝါများဖြစ်ကြသည်။ ၄င်းတို့၏ အဆင့်ဆင့် စွမ်းရည်ဆက်ခံမှုပုံစံကား အောက်ပါအတိုင်းဖြစ်၏။
နို့တိုက်သတ္တဝါအားလုံးနှင့် နို့မတိုက်သတ္တဝါ အားလုံးတို့သည် သက်ရှိသတ္တဝါ တွင်ပါရှိသည့် စွမ်းရည်များကို အဆင့်ဆင့် ဆက်ခံကာ၊ မိမိ တွင်သာသီးခြားရှိသည့်
အခြားစွမ်းရည်သစ်များလည်းပါ၀င်စေလေသည်။ ဥပမာ အသက်ရှိခြင်း အရည်အသွေးတူညီသော်လည်း၊ နို့တိုက်နိုင်ခြင်းနှင့် နို့မတိုက်နိုင်ခြင်းကွာခြားသကဲ့သို့၊
လူနှင့်ခွေးတို့တွင်၊ နို့တိုက်နိုင်ခြင်းစွမ်းရည်တူသော်လည်း၊ ခြေထောက် အရေအတွက်တို့ ကွဲပြားခြင်းစသည်တို့ဖြစ်သည်။
သက်ရှိသတ္တဝါ နည်းတူ၊ သက်မဲ့အရာဝတ္ထု ဟူသည့် အတန်းအစားလည်း ရှိအံ့။ ၄င်းအောက်တွင်၊ သက်မဲ့ဖြစ်သော၊ ခုံ၊ ပေတံ၊ ဖျာ၊ ဦးထုပ်၊ စသည်ဖြင့်
များစွာရှိနိုင်သေး၏။
Figure 1 နှင့် Figure 2 တွင် အထက်၌ရှိသော အဆင့်အတန်းများ သည်၊ အောက်ဖက်တွင်ရှိသော အဆင့်အတန်းများ ၏ ဘုံကျသော၊ စွမ်းရည်များကိုပိုင်ဆိုင်၏။
ဤသို့ဆိုလျှင်၊ သက်ရှိသတ္တဝါ နှင့် သက်မဲ့ အရာဝတ္ထုတို့ ၏အထက်တွင်၊ ၄င်းတို့ ဘုံ စွမ်းရည် ဆက်ခံနိုင်သည့် အတန်းအစားကားအဘယ်နည်းဟူသည်ကား
စဉ်းစားဖွယ်ဖြစ်လေသည်။
အထက်ပါ အဆင့်ဆင့်စွမ်းရည် ဆက်ခံမှု သီဝရီ အရတွေးလျှင်၊ ဟိုး….ထိပ်ဆုံး၌၊ အတန်းအစား အားလုံး၏ဘုံစွမ်းရည်ကို ပိုင်ဆိုင်သော အတန်းအစားတစ်ခု
ရှိရမည်ဖြစ်သည်။ သို့သော်၊ ၄င်း၌မည်သည့်စွမ်းရည်ရှိသည်၊ မည်သို့ခေါ်တွင်မည်ကို လက်တွေ့သတ်မှတ်ရန်ခက်လေသည်။ သီဝရီအရ၊ ယထာဘူတ ကျကျ
တွေးခေါ်ခြင်းဖြင့်သာ၊ ထိုမူလဘူတ အတန်းအစားရှိကြောင်းသက်သေထူနိုင်၏။ ၄င်း အတန်းအစားကို Object ဟုသတ်မှတ်ခြင်းဖြစ်လေသည်။
Variable Declaration
ငယ်စဉ်က သချင်္ာတွက်ရာတွင်၊ အောက်ပါအတိုင်းရေးကြသည်ကို မှတ်မိကြပေမည်။
a = 10
b = 20
c = a + b = 30
ဒီနေရာတွင် a = 10 ဟုရေးခြင်းမှာ a ၏ တန်ဖိုးကို သတ်မှတ် ကြေငြာလိုက်ခြင်းပင်။
၄င်း a ကို variable name ဟုခေါ်ပြီး 10 မှာ variable value ဖြစ်လေသည်။
= ကား assignment operator ဟုခေါ်သည်။ “=” ကသာလျှင် a သည် 10 ဖြစ်ကြောင်းသတ်မှတ်ပေးခြင်းဖြစ်သည်။
အထက်ပါ ဥပမာကို ချဲ့ထွင်အံ့။
a = 10
b = 20.0
a = 20
c = a + b = 40.0
a ၏ တန်ဖိုး ကို နှစ်ကြိမ် သတ်မှတ်လိုက်လျှှင် နောက်ဆုံး သတ်မှတ်လိုက်သည့် တန်ဖိုးသာ အကျုံးဝင်ပေသည်။
ယခုကဲ့သို့ တန်ဖိုးကို အချိန်မရွေးပြောင်းလဲသတ်မှတ်နိုင်ခြင်းကြောင့် ပြောင်းလဲနိုင်သောကိန်း (variable) ဟုခေါ်ခြင်းဖြစ်သည်။
အထက်ပါဥပမာတွင် ကျွန်ုပ်တို့ ကိန်းဂဏန်းများ ကို ကြေငြာသတ်မှတ်ကြသည်။ အောက်ပါ ဥပမာတွင် ကိန်းဂဏန်းများ အစား စာကြောင်းများကို သုံးပြထားပါသည်။
a = my name is
b = ko thar thar
c = a + b = my name is ko thar thar
ယခုလို စာကြောင်းများကို လည်း variable တန်ဖိုးအဖြစ်သုံးနိုင်သည်။
ကိန်းဂဏန်းများနှင့် စာကြောင်းများ သည် အမျိုးအစားကွဲပြားကြောင်း အထူးရှင်းစရာမလိုပေ။
ထိုကဲ့သို့ အမျိုးအစားများကို variable types သို့မဟုတ် data types ခေါ်သည်။
ထို variable ၏တန်ဖိုးများကို ပေါင်း၊နှုတ်၊မြှောက်၊စား လုပ်နိုင်သည်။ သို့သော် အမျိုးအစား မတူသော variable များကို အတူ တကွမည်သို့ ပေါင်း၊နှုတ်၊မြှောက်၊စား လုပ်နိုင်အံ့နည်း။
ဥပမာဆိုရသော်
a = my name is
b = 10
c = a + b = ?
ဤနေရာတွင်၊ my name is နှင့် 10 တို့ကို ကိန်းဂဏန်း တန်ဖိုးအဖြစ်ပေါင်းအ့ံ။
my name is ၏ ကိန်းဂဏန်းတန်ဖိုးသတ်မှတ်ချက်ကားမရှိ။ ထို့ကြောင့်မဖြစ်နိုင်။
စာကြောင်းတန်ဖိုး အဖြစ်ပေါင်းအ့ံ။ 10 ကို စာကြောင်းအဖြစ်ယူဆကရ၏၊ ထို့ကြောင့် my name is 10 ဟု ဆိုကောင်းဆိုနိုင်၏။
ယခု ဥပမာတွင် b = 10 ဟုရေးသားပုံကိုကြည့်ရုံနှင့် 10 သည် စာကြောင်းလော၊ ဂဏန်းလော မခွဲခြားနိုင်။
ထို့ကြောင့် စာကြောင်းဟုသတ်မှတ်ရေးသားပုံနှင့် ဂဏန်းအဖြစ် ရေးသားပုံကိုပြောင်းလဲသတ်မှတ်ရန်လိုအပ်လာပေသည်။
ထိုသို့ရေးသားပုံ ကို မခွဲခြားပါက၊ စာဖတ်သူပင် နားလည်မှုလွဲနိုင်လျှင်၊ စဉ်စားဉာဏ် အလျင်းကင်းသော ကွန်ပြူတာစက်သည်ကား ဆိုဖွယ်မရှိပြီ။
ရေးသားပုံကွဲပြားစေရန်၊ စာကြောင်းများကို quote ထဲတွင်ထည့်ရေးရမည်ဟု ကျွနု်ပ်တို့ သတ်မှတ်အံ့။ အောက်ပါအတိုင်းရလေသည်။
a = “my name is”
b = “10”
c = a + b = “my name is 10”
သို့သော်
a = “my name is”
b = 10
c = a + b = ?
ဟုရေးပါက၊ အမျိုးအစား မတူညီသော data အပေါ်တွင် ပေါင်း၊နှုတ်၊မြှောက်၊စား မလုပ်နိုင်၊ ထို့ကြောင့်၊ “+” operation ကို a နှင့် b အပေါ်တွင် လုပ်ခြင်းအမှုကား မှားလေသည်။
ဖော်ပြခဲ့သော ဥပမာများတွင် ယထာဘူတ ကျသောစဉ်းစားမှု စည်းမျဉ်းကိုသုံးကာ variable တန်ဖိုး ကို ကြေငြာပြခဲ့ပြီ။
သို့သော် English နှင့်ဖြစ်စေ၊ မြန်မာ ဘာသာဖြင့်ဖြစ်စေ ရေးသား ဖော်ပြမည်ဆိုပါက၊ သက်ဆိုင်ရာ ဘာသာ စကား၏ grammer (သဒ္ဒါ) စည်းမျဉ်းများကို လိုက်နာမှသာ အဓိပါယ်ပြည့်စုံမှန်ကန်ပေမည်။
English တွင် a = 10 ဟုရေးပါ a ၏ တန်ဖိုး သည် 10 ဖြစ်သည်ဟုမဆိုနိုင်ပေ။
The value of ‘a’ is 10. သို့မဟုတ် a is equal to 10 ဟုရေးမှ အဓိပါယ် ရှိပေသည်။
ထို့အတူ မြန်မာစာတွင် “အေ ၏တန်ဖိုးသည် ၁၀ ဖြစ်သည်” ဟုရေးမှအဓိပါယ်ရှိပေသည်။
Ruby ဘာသာစကားဖြင့် ရေးသားရာတွင်လည်း Ruby ၏ grammer အတိုင်းရေးမှ မှန်ပေမည်။ ဆက်လက်၍ Ruby ဘာသာစကားတွင် သတ်မှတ်ထားသော၊ data အမျိုးအစား များအကြောင်းကို ရှင်းလင်းဖော်ပြပါမည်။
သို့သော် ကျွနု်ပ်သည် ဆရာတစ်ဆူမဟုတ်သဖြင့် ပြည့်စုံရန် ရေးသားခြင်းငှာမစွမ်း၊ ထို့ကြောင့် အသုံးချ Ruby သင်တန်းအတွက်၊ လိုအပ်သလောက်ကိုသာ ဖော်ပြ၍ Programming အတွေ့အကြံုမရှိသေးသူများ အတွက်၊ စိမ်းနေမည့် ယူဆချက်၊ သတ်မှတ်ချက် များကို မြန်မာလို အသားပေးရှင်းလင်းရေးသားထားပါသည်။
Numbers
ကွန်ပြူတာသည် ကိန်းဂဏန်းများကိုသာ နားလည်၊ ဆောင်ရွက်သော စက်ပစ္စည်းဖြစ်သဖြင့်၊ မည်သည့် programming language တွင်မဆို၊
ကိန်းဂဏန်းများသည် အခြေခံ Data အမျိုးအစားအဖြစ် ပါရှိ၏။
အထက်ပိုင်းတွင် ဖော်ပြခဲ့သလို၊ ကိန်းဂဏန်းများ သည် Ruby ၏ object များဖြစ်ကြသည်။ ကိန်းဂဏန်း အတန်းအစားများကို အောက်ပါအတိုင်းသတ်မှတ်ထား၏။
Ruby ရေးရာတွင် ဖန်တီးသည့် ကိန်းဂဏန်းတို်င်း သည် Numeric အမျိုးစားဖြစ်သည်။ Integer များသည် ကိန်းပြည့်များဖြစ်၍၊ Float များသည် ဒဿမကိန်းများဖြစ်ကြသည်။
Fixnum ဟူသည်ကား ကွန်ပြူတာ၏ မူလဘူတ binary (ဒွိဂဏန်း) အခြေခံသချင်္ာနည်းအရ၊ ဒဿမကိန်း၏ နေရာကို မရွှေ့ပြောင်းစေဘဲ၊ သတ်မှတ်ထားခြင်း၊ (fixed decimal position) ရှိခြင်းကို အခြေခံကာ Fixnum ဟုခေါ်ခြင်းဖြစ်သည်။ Bignum သည်ကား အလွန်ကြီးမားသည့် ကုဋေ ကုဍာ သိန်းပေါင်းများစွာ ပမာဏရှိသော ကိန်းဂဏန်းမျိုးကို သိုမှီးရန်ဖြစ်သည်။
Fixnum နှင့် Bignum တို့သည် ကွန်ပြူတာနားလည်သည့် ပမာဏ ကိုသတ်မှတ်ခြင်းသာဖြစ်၏။ ကိန်းဂဏန်း object တစ်ခု၏ ပမာဏ ကိုမူတည်ကာ Fixnum နှင့် Bignum အမျိုးအစား တစ်ခုမှတစ်ခုသို့ Ruby သည်အလိုအလျောက်ပြောင်းလဲပေးရာ၊ စာဖတ်သူအနေဖြင့် စိုးရိမ်ရန်မလိုချေ။
Integer ကို ဥပမာပြရသော်
0
123
12345678901234567890
Float ကိုဥပမာပြရသော်
0.0
-3.14
6.02e23 (ဆိုလိုသည်မှာ 6.02 x 1023 )
Ruby ၏ ဂဏန်းသချင်္ာ အတွက်အချက် တွင် +,-,*,/ ဟု ပေါင်း၊ နှုတ်မြှောက်စားတို့ကို သတ်မှတ်ထား၏။
x = 5/2 (x ၏ တန်ဖိုး 2 ရ၏၊ ဒဿမကိန်းကို မသိမ်းလေ)
x = 5.0/2 (x ၏ တန်ဖိုး 2.5 ရ၏၊ တည်ကိန်းမှာ ဒဿမဖြစ်သောကြောင့်)
x = 5/2.0 (x ၏တန်ဖိုး 2.5 ရ၏၊ စားကိန်းမှာ ဒဿမဖြစ်သောကြောင့်)
modulo (%) ကိုကား အကြွင်းရှာရာတွင် သုံး၏။
x = 5%2 (x ၏တန်ဖိုး 1 ရ၏။ 5 ကို 2 နှင့်စားရာ၌အကြွင်းကိုသာ ယူခြင်းဖြစ်၏)
x = 1.5%0.4 (x ၏တန်ဖိုး 0.3 ရ၏)
(**) ကိုကား ထပ်ညွွှန်း တွက်ရန်သုံး၏။
x**4 ( x*x*x*x ကို လေးကြိမ်မြှောက်ခြင်း x4 နှင့်တူညီ၏။)
x**-1 ( 1/x နှင့်ညီ၏။)
ဤမျှဆိုလျှင် လုံလောက်ပြီ။ အောက်ပါ လိပ်စာများကို သွားရောက်ဖတ်ရှု ကာများပြားသော Ruby operator များကိုလေ့လာသင့်ပါသည်။
အားလုံးကိုမှတ်မိရန်မလိုပါ။ အလျဉ်းသင့်သလို၊ အသုံးချပုံများကို ထည့်သွင်း ဖော်ပြမည်ဖြစ်ပါသည်။ အခြေခံအားဖြင့် ပေါင်းနှုတ်မြှောက်စား
သိလျှှင်လုံလောက်ပေပြီ။
http://www.techotopia.com/index.php/Ruby_Operators
http://www.meshplex.org/wiki/Ruby/Variables_Datatypes_Operators
http://whytheluckystiff.net/ruby/pickaxe/html/tut_stdtypes.html



Zawgyi


Data အမ်ိဳးအစားမ်ား ႏွင့္ Data ဖြဲ႕စည္းမႈပုံ

အမွာ။ ။ အသုံးခ် Ruby လို႔ေခါင္းစဥ္တပ္ထားၿပီး ခုထိ အသုံးမခ်ရေသးပါလားလို႔ အျပစ္တင္ရင္လည္းခံရမည္ပင္။
သို႔ေသာ္၊ ထိုသို႔အသုံးခ်သည့္အဆင့္ကိုေရာက္ရန္၊ သိရမည့္ အေၾကာင္းမ်ားကိုကား ေရးသားရေပဦးမည္။
Programming ဟူသည္ Data မ်ားကို ျပဳျပင္ေျပာင္းလဲ အသုံးခ်ျခင္းျဖစ္ရာ၊ အသုံးျပဳနိုင္ေသာ Data အမ်ိဳးအစားမ်ား
အေၾကာင္းကိုသိရန္လိုအပ္ပါသည္။
ပထမဦးစြာ Variable မ်ားေၾကျငာျခင္းအေၾကာင္းကို နားလည္လြယ္ေစရန္၊ ႀကိဳးစားအားထုတ္ကာ၊ ဆက္စပ္ရွင္းလင္းေရးသားထားပါသည္။
၄င္းေနာက္မွ Ruby ၏ Data အမ်ိဳးအစားမ်ားႏွင့္ Data ဖြဲ႕စည္းမႈပုံစံမ်ား ကိုေဖာ္ျပထားပါသည္။
Class, Object and Object Oriented Programming

ယခု သင္ခန္းစာမ်ားသည္ Object Oriented Programming (OOP) ကိုဦးတည္ေရးသားသည္ မဟုတ္ေသာ္လည္း၊
Ruby သည္ OOP Language တစ္ခုျဖစ္သည္ တစ္ေၾကာင္း၊ Object သည္ အေျခခံအက်ဆဳံး၊ Data အမ်ိဳးအစားျဖစ္ေနသည္ေၾကာင့္ တစ္ေၾကာင္း
ေရးသားရေပသည္။

ပထမဦးစြာ မွတ္သားရမည္မွာ “Everything is object in Ruby.”
Ruby ထဲတြင္ အရာတိုင္းသည္ Object ျဖစ္သည္။
ဤစာေၾကာင္းကို စြဲၿမဲေအာင္ အခါတစ္ရာေလာက္႐ြတ္ဆိုပါ။ (ဟီ ဟီ)

object ဆိုသည္မွာ အဘယ္နည္း။ ဥပမာ ယူၾကပါစို႔။ ကိုသာသာ သည္ ေယာက်္ားတစ္ေယာက္ျဖစ္သည္။ (မရယ္ရ)
မသီတာ သည္မိန္းမတစ္ေယာက္ျဖစ္သည္။ ထို႔ေၾကာင့္ ကိုသာသာတြင္ ေယာက္်ားမ်ားတြင္ ရွိအပ္ေသာ စြမ္းရည္မ်ားရွိသကဲ့သို႔၊
မသီတာ တြင္ မိန္းမမ်ားတြင္ ရွိအပ္ေသာ စြမ္းအားမ်ားရွိ၏။ ေယာက်္ား၊ မိန္းမတို႔သည္၊ လူမ်ားျဖစ္ၾက၏။

ထို႔ေၾကာင့္ အဆင့္ဆင့္ စြမ္းရည္ဆက္ခံမႈ ပုံစံကို ႐ုပ္ပုံဆြဲၾကည့္ပါက ေအာက္ပါအတိုင္းရေလသည္။

သက္ရွိသတၱဝါ၊ သက္မဲ့အရာဝထၳဳ အတန္းအစားမ်ားႏွင့္ Object တို႔အၾကားတြင္ မ်ားစြားေသာ
အတန္းအစားမ်ားကို ဖန္တီးနိုင္ေသးေၾကာင္း သတိျပဳရာ၏။

အထက္ပါ ဥပမာ နည္းတူ၊ Ruby တြင္ပါ၀င္ေသာ Data အမ်ိဳးအစား (အတန္းအစား) အားလုံးသည္လည္း အတန္းအစား အားလုံး၏ဘုံစြမး္ရည္ကို ပိုင္ေသာ
မူလဘူတ Object အတန္းအစားမွ ဆင္းသက္လာသည္ဟုသတ္မွတ္ထားေလသည္။ ထိုသို႔ သတ္မွတ္မႈမ်ိဳးထားရွိေသာ Programming language မ်ား၊ ဥပမာ
Java, C#, Ruby စသည္တို႔ကို Object Oriented Language ဟုေခၚကာ၊ ၄င္း သတ္မွတ္မႈမ်ိဳးကို လိုက္နာကာ Program ေရးသားျခင္းကို
Object Oriented Programming ဟုေခၚဆိုျခင္းျဖစ္သည္။

အထက္ပါ ဥပမာတြင္၊ ကိုသာသာႏွင့္ မသီတာမွလြဲ၍ အားလုံးသည္ အတန္းအစား (class) မ်ားျဖစ္ၾကၿပီး၊ ထိုႏွစ္ဦးမွာကား (object instance)
သီးျခား object မ်ားျဖစ္ၾကသည္။ ဆိုလိုရင္းမွာ၊ ကိုသာသာ အတန္းအစား ဟူသတ္မွတ္၍၊ ကိုသာသာ တစ္ဦးထက္ပို၍ ရွိရန္ သတ္မွတ္က၊ မျဖစ္နိုင္ေခ်။

ရွင္းလင္းခဲ့ေသာ အခ်က္မ်ားသည္ Object Oriented Programming အေၾကာင္းအရာ၊ တစ္ခုလုံးကို ၿခံငုံမိသည္မဟုတ္ေခ်။ OOP ၏ အရိပ္အႁမြက္၊ Object, Class ႏွင့္
Inheritance အေၾကာင္းတို႔ကို ဥပမာေပးခဲ့ျခင္းသာျဖစ္ပါသည္။ OOP အေၾကာင္းကို http://en.wikipedia.org/wiki/Object-ori … rogramming တြင္
ဖတ္ရႈနိုင္ပါသည္။ ယခုကဲ့သို OOP subject မဟုတ္ဘဲ လွ်ာရွည္ရျခင္းမွာ၊ ေအာက္တြင္ ပါ၀င္ေသာ အခန္းမ်ား၌ object ဟုဆိုလွ်င္ဘာကိုဆိုလိုမွန္းသိနိုင္ေစရန္ႏွင့္၊
inheritance သေဘာကို ျမင္သာေစရန္ျဖစ္ပါသည္။

ထိုမွ တစ္ဖန္….လူ၊ ေခြး၊ လင္းပိုင္၊ လင္းနို႔ တို႔သည္ နို႔တိုက္သတၱဝါမ်ားျဖစ္ၾကသည္။ ေႁမြ၊ငါးတို႔ သည္ နို႔မတိုက္ေသာ သတၱဝါမ်ားျဖစ္ၾကသည္။
နို႔တိုက္ႏွင့္ နို႔မတိုက္ သတၱဝါမ်ားသည္၊ သက္ရွိသတၱဝါမ်ားျဖစ္ၾကသည္။ ၄င္းတို႔၏ အဆင့္ဆင့္ စြမ္းရည္ဆက္ခံမႈပုံစံကား ေအာက္ပါအတိုင္းျဖစ္၏။

နို႔တိုက္သတၱဝါအားလုံးႏွင့္ နို႔မတိုက္သတၱဝါ အားလုံးတို႔သည္ သက္ရွိသတၱဝါ တြင္ပါရွိသည့္ စြမ္းရည္မ်ားကို အဆင့္ဆင့္ ဆက္ခံကာ၊ မိမိ တြင္သာသီးျခားရွိသည့္
အျခားစြမ္းရည္သစ္မ်ားလည္းပါ၀င္ေစေလသည္။ ဥပမာ အသက္ရွိျခင္း အရည္အေသြးတူညီေသာ္လည္း၊ နို႔တိုက္နိုင္ျခင္းႏွင့္ နို႔မတိုက္နိုင္ျခင္းကြာျခားသကဲ့သို႔၊
လူႏွင့္ေခြးတို႔တြင္၊ နို႔တိုက္နိုင္ျခင္းစြမ္းရည္တူေသာ္လည္း၊ ေျခေထာက္ အေရအတြက္တို႔ ကြဲျပားျခင္းစသည္တို႔ျဖစ္သည္။

သက္ရွိသတၱဝါ နည္းတူ၊ သက္မဲ့အရာဝတၳဳ ဟူသည့္ အတန္းအစားလည္း ရွိအံ့။ ၄င္းေအာက္တြင္၊ သက္မဲ့ျဖစ္ေသာ၊ ခုံ၊ ေပတံ၊ ဖ်ာ၊ ဦးထုပ္၊ စသည္ျဖင့္
မ်ားစြာရွိနိုင္ေသး၏။

Figure 1 ႏွင့္ Figure 2 တြင္ အထက္၌ရွိေသာ အဆင့္အတန္းမ်ား သည္၊ ေအာက္ဖက္တြင္ရွိေသာ အဆင့္အတန္းမ်ား ၏ ဘုံက်ေသာ၊ စြမ္းရည္မ်ားကိုပိုင္ဆိုင္၏။
ဤသို႔ဆိုလွ်င္၊ သက္ရွိသတၱဝါ ႏွင့္ သက္မဲ့ အရာဝတၳဳတို႔ ၏အထက္တြင္၊ ၄င္းတို႔ ဘုံ စြမ္းရည္ ဆက္ခံနိုင္သည့္ အတန္းအစားကားအဘယ္နည္းဟူသည္ကား
စဥ္းစားဖြယ္ျဖစ္ေလသည္။

အထက္ပါ အဆင့္ဆင့္စြမ္းရည္ ဆက္ခံမႈ သီဝရီ အရေတြးလွ်င္၊ ဟိုး….ထိပ္ဆုံး၌၊ အတန္းအစား အားလုံး၏ဘုံစြမ္းရည္ကို ပိုင္ဆိုင္ေသာ အတန္းအစားတစ္ခု
ရွိရမည္ျဖစ္သည္။ သို႔ေသာ္၊ ၄င္း၌မည္သည့္စြမ္းရည္ရွိသည္၊ မည္သို႔ေခၚတြင္မည္ကို လက္ေတြ႕သတ္မွတ္ရန္ခက္ေလသည္။ သီဝရီအရ၊ ယထာဘူတ က်က်
ေတြးေခၚျခင္းျဖင့္သာ၊ ထိုမူလဘူတ အတန္းအစားရွိေၾကာင္းသက္ေသထူနိုင္၏။ ၄င္း အတန္းအစားကို Object ဟုသတ္မွတ္ျခင္းျဖစ္ေလသည္။
Variable Declaration

ငယ္စဥ္က သခ်ၤာတြက္ရာတြင္၊ ေအာက္ပါအတိုင္းေရးၾကသည္ကို မွတ္မိၾကေပမည္။

a = 10
b = 20
c = a + b = 30

ဒီေနရာတြင္ a = 10 ဟုေရးျခင္းမွာ a ၏ တန္ဖိုးကို သတ္မွတ္ ေၾကျငာလိုက္ျခင္းပင္။
၄င္း a ကို variable name ဟုေခၚၿပီး 10 မွာ variable value ျဖစ္ေလသည္။
= ကား assignment operator ဟုေခၚသည္။ “=” ကသာလွ်င္ a သည္ 10 ျဖစ္ေၾကာင္းသတ္မွတ္ေပးျခင္းျဖစ္သည္။

အထက္ပါ ဥပမာကို ခ်ဲ့ထြင္အံ့။

a = 10
b = 20.0
a = 20
c = a + b = 40.0

a ၏ တန္ဖိုး ကို ႏွစ္ႀကိမ္ သတ္မွတ္လိုက္လွ်ွင္ ေနာက္ဆုံး သတ္မွတ္လိုက္သည့္ တန္ဖိုးသာ အက်ဳံးဝင္ေပသည္။
ယခုကဲ့သို႔ တန္ဖိုးကို အခ်ိန္မေ႐ြးေျပာင္းလဲသတ္မွတ္နိုင္ျခင္းေၾကာင့္ ေျပာင္းလဲနိုင္ေသာကိန္း (variable) ဟုေခၚျခင္းျဖစ္သည္။

အထက္ပါဥပမာတြင္ ကြၽန္ုပ္တို႔ ကိန္းဂဏန္းမ်ား ကို ေၾကျငာသတ္မွတ္ၾကသည္။ ေအာက္ပါ ဥပမာတြင္ ကိန္းဂဏန္းမ်ား အစား စာေၾကာင္းမ်ားကို သုံးျပထားပါသည္။

a = my name is
b = ko thar thar
c = a + b = my name is ko thar thar

ယခုလို စာေၾကာင္းမ်ားကို လည္း variable တန္ဖိုးအျဖစ္သုံးနိုင္သည္။

ကိန္းဂဏန္းမ်ားႏွင့္ စာေၾကာင္းမ်ား သည္ အမ်ိဳးအစားကြဲျပားေၾကာင္း အထူးရွင္းစရာမလိုေပ။
ထိုကဲ့သို႔ အမ်ိဳးအစားမ်ားကို variable types သို႔မဟုတ္ data types ေခၚသည္။
ထို variable ၏တန္ဖိုးမ်ားကို ေပါင္း၊ႏႈတ္၊ျမႇောက္၊စား လုပ္နိုင္သည္။ သို႔ေသာ္ အမ်ိဳးအစား မတူေသာ variable မ်ားကို အတူ တကြမည္သို႔ ေပါင္း၊ႏႈတ္၊ျမႇောက္၊စား လုပ္နိုင္အံ့နည္း။
ဥပမာဆိုရေသာ္

a = my name is
b = 10
c = a + b = ?

ဤေနရာတြင္၊ my name is ႏွင့္ 10 တို႔ကို ကိန္းဂဏန္း တန္ဖိုးအျဖစ္ေပါင္းအ့ံ။
my name is ၏ ကိန္းဂဏန္းတန္ဖိုးသတ္မွတ္ခ်က္ကားမရွိ။ ထို႔ေၾကာင့္မျဖစ္နိုင္။

စာေၾကာင္းတန္ဖိုး အျဖစ္ေပါင္းအ့ံ။ 10 ကို စာေၾကာင္းအျဖစ္ယူဆကရ၏၊ ထို႔ေၾကာင့္ my name is 10 ဟု ဆိုေကာင္းဆိုနိုင္၏။

ယခု ဥပမာတြင္ b = 10 ဟုေရးသားပုံကိုၾကည့္႐ုံႏွင့္ 10 သည္ စာေၾကာင္းေလာ၊ ဂဏန္းေလာ မခြဲျခားနိုင္။
ထို႔ေၾကာင့္ စာေၾကာင္းဟုသတ္မွတ္ေရးသားပုံႏွင့္ ဂဏန္းအျဖစ္ ေရးသားပုံကိုေျပာင္းလဲသတ္မွတ္ရန္လိုအပ္လာေပသည္။
ထိုသို႔ေရးသားပုံ ကို မခြဲျခားပါက၊ စာဖတ္သူပင္ နားလည္မႈလြဲနိုင္လွ်င္၊ စဥ္စားဉာဏ္ အလ်င္းကင္းေသာ ကြန္ျပဴတာစက္သည္ကား ဆိုဖြယ္မရွိၿပီ။

ေရးသားပုံကြဲျပားေစရန္၊ စာေၾကာင္းမ်ားကို quote ထဲတြင္ထည့္ေရးရမည္ဟု ကြၽႏု္ပ္တို႔ သတ္မွတ္အံ့။ ေအာက္ပါအတိုင္းရေလသည္။

a = “my name is”
b = “10”
c = a + b = “my name is 10”

သို႔ေသာ္

a = “my name is”
b = 10
c = a + b = ?

ဟုေရးပါက၊ အမ်ိဳးအစား မတူညီေသာ data အေပၚတြင္ ေပါင္း၊ႏႈတ္၊ျမႇောက္၊စား မလုပ္နိုင္၊ ထို႔ေၾကာင့္၊ “+” operation ကို a ႏွင့္ b အေပၚတြင္ လုပ္ျခင္းအမႈကား မွားေလသည္။

ေဖာ္ျပခဲ့ေသာ ဥပမာမ်ားတြင္ ယထာဘူတ က်ေသာစဥ္းစားမႈ စည္းမ်ဥ္းကိုသုံးကာ variable တန္ဖိုး ကို ေၾကျငာျပခဲ့ၿပီ။

သို႔ေသာ္ English ႏွင့္ျဖစ္ေစ၊ ျမန္မာ ဘာသာျဖင့္ျဖစ္ေစ ေရးသား ေဖာ္ျပမည္ဆိုပါက၊ သက္ဆိုင္ရာ ဘာသာ စကား၏ grammer (သဒၵါ) စည္းမ်ဥ္းမ်ားကို လိုက္နာမွသာ အဓိပါယ္ျပည့္စုံမွန္ကန္ေပမည္။

English တြင္ a = 10 ဟုေရးပါ a ၏ တန္ဖိုး သည္ 10 ျဖစ္သည္ဟုမဆိုနိုင္ေပ။
The value of ‘a’ is 10. သို႔မဟုတ္ a is equal to 10 ဟုေရးမွ အဓိပါယ္ ရွိေပသည္။
ထို႔အတူ ျမန္မာစာတြင္ “ေအ ၏တန္ဖိုးသည္ ၁၀ ျဖစ္သည္” ဟုေရးမွအဓိပါယ္ရွိေပသည္။

Ruby ဘာသာစကားျဖင့္ ေရးသားရာတြင္လည္း Ruby ၏ grammer အတိုင္းေရးမွ မွန္ေပမည္။ ဆက္လက္၍ Ruby ဘာသာစကားတြင္ သတ္မွတ္ထားေသာ၊ data အမ်ိဳးအစား မ်ားအေၾကာင္းကို ရွင္းလင္းေဖာ္ျပပါမည္။

သို႔ေသာ္ ကြၽႏု္ပ္သည္ ဆရာတစ္ဆူမဟုတ္သျဖင့္ ျပည့္စုံရန္ ေရးသားျခင္းငွာမစြမ္း၊ ထို႔ေၾကာင့္ အသုံးခ် Ruby သင္တန္းအတြက္၊ လိုအပ္သေလာက္ကိုသာ ေဖာ္ျပ၍ Programming အေတြ႕အႀကံဳမရွိေသးသူမ်ား အတြက္၊ စိမ္းေနမည့္ ယူဆခ်က္၊ သတ္မွတ္ခ်က္ မ်ားကို ျမန္မာလို အသားေပးရွင္းလင္းေရးသားထားပါသည္။

Numbers

ကြန္ျပဴတာသည္ ကိန္းဂဏန္းမ်ားကိုသာ နားလည္၊ ေဆာင္႐ြက္ေသာ စက္ပစၥည္းျဖစ္သျဖင့္၊ မည္သည့္ programming language တြင္မဆို၊
ကိန္းဂဏန္းမ်ားသည္ အေျခခံ Data အမ်ိဳးအစားအျဖစ္ ပါရွိ၏။

အထက္ပိုင္းတြင္ ေဖာ္ျပခဲ့သလို၊ ကိန္းဂဏန္းမ်ား သည္ Ruby ၏ object မ်ားျဖစ္ၾကသည္။ ကိန္းဂဏန္း အတန္းအစားမ်ားကို ေအာက္ပါအတိုင္းသတ္မွတ္ထား၏။


Ruby ေရးရာတြင္ ဖန္တီးသည့္ ကိန္းဂဏန္းတို္င္း သည္ Numeric အမ်ိဳးစားျဖစ္သည္။ Integer မ်ားသည္ ကိန္းျပည့္မ်ားျဖစ္၍၊ Float မ်ားသည္ ဒႆမကိန္းမ်ားျဖစ္ၾကသည္။

Fixnum ဟူသည္ကား ကြန္ျပဴတာ၏ မူလဘူတ binary (ဒြိဂဏန္း) အေျခခံသခ်ၤာနည္းအရ၊ ဒႆမကိန္း၏ ေနရာကို မေ႐ႊ႕ေျပာင္းေစဘဲ၊ သတ္မွတ္ထားျခင္း၊ (fixed decimal position) ရွိျခင္းကို အေျခခံကာ Fixnum ဟုေခၚျခင္းျဖစ္သည္။ Bignum သည္ကား အလြန္ႀကီးမားသည့္ ကုေဋ ကုဍာ သိန္းေပါင္းမ်ားစြာ ပမာဏရွိေသာ ကိန္းဂဏန္းမ်ိဳးကို သိုမွီးရန္ျဖစ္သည္။
Fixnum ႏွင့္ Bignum တို႔သည္ ကြန္ျပဴတာနားလည္သည့္ ပမာဏ ကိုသတ္မွတ္ျခင္းသာျဖစ္၏။ ကိန္းဂဏန္း object တစ္ခု၏ ပမာဏ ကိုမူတည္ကာ Fixnum ႏွင့္ Bignum အမ်ိဳးအစား တစ္ခုမွတစ္ခုသို႔ Ruby သည္အလိုအေလ်ာက္ေျပာင္းလဲေပးရာ၊ စာဖတ္သူအေနျဖင့္ စိုးရိမ္ရန္မလိုေခ်။

Integer ကို ဥပမာျပရေသာ္
0
123
12345678901234567890

Float ကိုဥပမာျပရေသာ္
0.0
-3.14
6.02e23 (ဆိုလိုသည္မွာ 6.02 x 1023 )

Ruby ၏ ဂဏန္းသခ်ၤာ အတြက္အခ်က္ တြင္ +,-,*,/ ဟု ေပါင္း၊ ႏႈတ္ျမႇောက္စားတို႔ကို သတ္မွတ္ထား၏။

x = 5/2 (x ၏ တန္ဖိုး 2 ရ၏၊ ဒႆမကိန္းကို မသိမ္းေလ)
x = 5.0/2 (x ၏ တန္ဖိုး 2.5 ရ၏၊ တည္ကိန္းမွာ ဒႆမျဖစ္ေသာေၾကာင့္)
x = 5/2.0 (x ၏တန္ဖိုး 2.5 ရ၏၊ စားကိန္းမွာ ဒႆမျဖစ္ေသာေၾကာင့္)

modulo (%) ကိုကား အႂကြင္းရွာရာတြင္ သုံး၏။

x = 5%2 (x ၏တန္ဖိုး 1 ရ၏။ 5 ကို 2 ႏွင့္စားရာ၌အႂကြင္းကိုသာ ယူျခင္းျဖစ္၏)
x = 1.5%0.4 (x ၏တန္ဖိုး 0.3 ရ၏)

(**) ကိုကား ထပ္ၫြႊန္း တြက္ရန္သုံး၏။

x**4 ( x*x*x*x ကို ေလးႀကိမ္ျမႇောက္ျခင္း x4 ႏွင့္တူညီ၏။)
x**-1 ( 1/x ႏွင့္ညီ၏။)

ဤမွ်ဆိုလွ်င္ လုံေလာက္ၿပီ။ ေအာက္ပါ လိပ္စာမ်ားကို သြားေရာက္ဖတ္ရႈ ကာမ်ားျပားေသာ Ruby operator မ်ားကိုေလ့လာသင့္ပါသည္။
အားလုံးကိုမွတ္မိရန္မလိုပါ။ အလ်ဥ္းသင့္သလို၊ အသုံးခ်ပဳံမ်ားကို ထည့္သြင္း ေဖာ္ျပမည္ျဖစ္ပါသည္။ အေျခခံအားျဖင့္ ေပါင္းႏႈတ္ျမႇောက္စား
သိလွ်ွင္လုံေလာက္ေပၿပီ။
http://www.techotopia.com/index.php/Ruby_Operators
http://www.meshplex.org/wiki/Ruby/Variables_Datatypes_Operators
http://whytheluckystiff.net/ruby/pickaxe/html/tut_stdtypes.html


0 comments:

Post a Comment