Data vs Struct
- ruby
- data
- struct
การสร้าง data structure ขึ้นมาเพื่อใช้สำหรับเก็บข้อมูลเป็นสิ่งที่หลีกเลี่ยงไม่ได้ซึ่งการเลือกว่าจะใช้อะไรนั้นก็ขึ้นอยู่กับเหตุการณ์ และความต้องการ
โดยในบทความนี้จะยกตัวอย่างระหว่าง Data
และ Struct
ขึ้นมาเปรียบเทียบให้ดูกัน
ทำความเข้าใจ Data และ Struct
Struct
เป็น class ที่ทำให้เราสามารถสร้าง class อย่างง่ายเพื่อใช้เก็บและดึงค่าของข้อมูลได้ โดย Struct
เองอนุญาตให้เราสามารถแก้ไขข้อมูลได้ด้วย
เราจะเห็นได้ว่า Struct
ได้จัดเตรียม getter
และ setter
ให้กับตัวแปลที่เราส่งผ่านเข้าไปนั้นเอง
User = Struct.new('User', :first_name, :last_name, :age)
# or User = Struct.new(:first_name, :last_name, :age)
User.instance_methods(false)
# [:last_name, :first_name, :first_name=, :last_name=]
Data
เป็น class ที่เพิ่งถูกนำเข้ามาใน Ruby 3.2
ซึ่งเป็น data structure ที่ไม่สามารถแก้ไขข้อมูลได้ (immutable)
แต่สามารถรับ optional block
เพื่อเพิ่มเติมความสามารถให้กับ class ได้
User = Data.define(:first_name, :last_name, :age) do
def fullname
"#{self.first_name} #{self.last_name}"
end
end
User.instance_methods(false)
# [:first_name, :last_name, :age, :fullname]
ถ้าลองสังเกตผลลัพท์ของ instance_methods
ที่ได้ออกมาจะเห็นได้ว่า Struct
จะมี getter ออกมาด้วย ส่วน
ของ Data
จะไม่มี getter
แต่จะมี fullname
ที่เราได้ทำการเพิ่มเข้าไปแสดงออกมา