A Class of You Own

Class เป็นเหมือนแบบแปลนของ Object มาลองสร้าง Class แรกกันดู

Class BankAccount
    def initialize(account_owner)
      @owner = account_owner
      @balance = 0
    end
 
    def deposit(amount)
      @balance = @balance + amount
    end
 
    def withdraw(amount)
      @balance = @balance - amount
    end
end

เราลองไล่โปรแกรมที่ละชุดนะครับ

Class BankAccount
  ...
end

เป็นการกำหนดชื่อของ Class เพื่อเรียกใช้ในภายหลัง เรานิยมสร้างชื่อของ Class ให้ตัวหน้าเป็นตัวใหญ่และคำที่ตามมาไม่มี “_” แต่ใช้ตัวอักษรใหญ่เพื่อแยกระหว่างคำ ไม่เหมือนการตั้งชื่อตัวแปร

        ...
    def initialize(account_owner)
      @owner = account_owner
      @balance = 0
    end
        ...

ใน ruby เราสร้าง method ด้วยคำสั่ง def ตามด้วยชื่อของ method นั้นๆ ตามด้วย argument ที่ต้องการส่งให้กับ method นั้นๆ สิ่งที่พิเศษสำหรับ method นี้คือ initialize ซึ่งทำให้ method นี้เป็น method แรกที่ถูกเรียกใช้เมื่อเราแปลง Class เป็น object

@owner = account_owner

ตัวแปรที่ขึ้นต้นด้วย @ จะหมายถึง instance variable ซึ่งทำเราสามารถเรียกใช้ตัวแปรที่ชื่อ owner ได้จากที่ใดก็ได้ใน class ในบรรทัดนี้เรากำหนดให้ owner มีค่าเท่ากับ account_owner ซึ่งเป็นตัวแปรที่มีคนส่งมาให้ผ่าน argument ของ method

เมื่อเรานำ @owner และ @balance มาไว้ที่ initialize จะเป็นเหมือนเรากำหนดค่าเริ่มต้นให้กับตัวแปรทั้งสองตัวนี้ หากเราไม่เขียน initialize ภาษา ruby จะสร้าง Object โดยมองว่า method initialize ไม่มีอะไรอยู่ข้างใน

การสร้าง Object จาก class เราสามารถทำได้ดังนี้

my_account = BankAccount.new('Russ')

เราจะได้ Object BankAccont ที่มีตัวแปร @owner เท่ากับ ‘Russ’ และ @balance มีค่าเริ่มต้นเท่ากับ 0

        ...
    def deposit(amount)
      @balance = @balance + amount
    end
 
    def withdraw(amount)
      @balance = @balance - amount
    end
        ...

deposit และ withdraw ใช้สำหรับการกำหนดค่าให้กับ @balance จากนั้น method จะ return ค่าสุดท้้ายให้กับคนที่เรียกมัน จะเห็นว่าสิ่งสุดท้ายที่ method นี้ทำคือกำหนดค่าให้ @balance ดังนั้นสิ่งที่ return คือ @balance

my_balance = my_account.deposit(100,000)

ค่าของ my_balance จะเท่ากับ 100,000 แต่ถ้าเราต้องการค่าของ balance โดยไม่ต้อง deposit หรือ withdraw ล่ะ

ย้าย Codenone

ประกาศย้าย Codenone ไปใช้ Forum ของ Blognone แทนครับ ตามไปตั้งกระทู้ต่อได้ที่ Codenone Forum (รายละเอียดอ่านจากกระทู้ ย้าย Codenone ไปรวมกับ Blognone)

กระทู้เก่าๆ จะย้ายตามไปในภายหลัง ตอนนี้ปิดการโพสต์กระทู้ไว้ เหลือไว้เฉพาะอ้างอิงเท่านั้น