คือ Data Type ชนิดหนึ่ง เรียกว่า Structural Type เป็นตัวแปรที่เก็บข้อมูลได้หลายประเภท ซึ่งแตกต่างจาก Array ที่สามารถเก็บข้อมูลได้แค่ประเภทเดียวกัน รูปแบบการประกาศ Record มีดังนี้
Type TMyRec = record Name:string; Value: integer; end;
จากการประกาศข้างบน เราได้สร้าง Data Type ที่ชื่อว่า TMyRec ขึ้นมา ซึ่งเป็น Record
ปกติแล้ว Record จะมีแค่ Field Variable อยู่ภายใน แต่ยังมี Record อีกประเภทหนึ่งที่มี Method และ Property ได้ เรียกว่า Advanced Record
Advanced Record ถูกสร้างขึ้นเพื่อให้มีความสามารถทางด้าน Object Oriented Programming
การประกาศ Advanced Record จำเป็นต้องมี Compiler Directive ต่อไปนี้
{$modeSwitch advancedRecords}
จากนั้น เราก็สามารถประกาศ Procedure/Function บน Record ได้ดังนี้
Type TMyRec = record FName:string; FValue: integer; Procedure DoSomething; Function GetSomething:integer; end;
ถูกสร้างขึ้นมาตั้งแต่สมัยที่ยังใช้ Turbo Pascal โดยออกแบบให้เป็นไปตามหลักการ Object Oriented Programming (OOP) ลักษณะการใช้งานโดยทั่วไปจะเหมือนกันกับ Advanced Record
สาเหตุที่มีให้ใช้ทั้ง Object และ Advanced Record นั้น เพราะว่าภายหลังจากที่ Delphi เปิดตัว ได้มีการนำ Class มาใช้แทน Object และผลักดันให้ เรียก Object ว่าเป็น Advanced Record แทน (อันนี้ผมเข้าใจว่า เพราะคำว่าว่า Object ในภาษาทั่วไป คือ instance ซึ่งแปลว่าผลิตภัณท์ที่เกิดจากต้นแบบ (Class) ซึ่งอาจสร้างความสับสนให้ผู้ใช้ได้) ทีนี้ทางฝั่งของ FPC ซึ่งมีการออกแบบให้โค๊ดทั้งหลายคล้ายคลึงกับทั้งทาง Turbo Pascal และ Delphi อยู่แล้วนั้น ได้ตัดสินใจเก็บ Object ไว้ เพื่อให้ยัง Compatible กับ Turbo Pascal อยู่นั่นเอง แต่ถึงอย่างไรทั้งสอง ก็ถูกใช้งานเหมือนกัน
การประกาศ Object อย่างง่าย ทำได้ดังนี้
Type TMyRec = object FName:string; FValue: integer; Procedure DoSomething; Function GetSomething:integer; end;
อย่างไรก็ตาม ในการนำ Object ใช้งานจริงนั้น ไม่ได้มีเพียงแค่ Field กับ Method ดังที่เห็นในตัวอย่าง แต่ยังมีส่วนประกอบอื่นๆอีกมากมาย อาทิเช่น Property, Access Specifiers เป็นต้น นอกจากนี้ Object ยังสามารถถ่ายทอดความสามารถ (Inheritance) ไปสู่ Object อื่นได้ ซึ่งรายละเอียดเหล่านี้จะขอนำไปกล่าวในเนื้อหาของ Class ต่อไป เพราะ Class กับ Object ต่างมีหลักการคล้ายคลึงกัน
ตัวอย่างการสร้าง Object แบบละเอียด
Type TMyItem = object private FName:string; FValue:integer; function GetIsOK:boolean; public procedure DoSomeThing; property Name:string read FName write FName; property Value:integer read FValue write FValue default 0; property IsOK:boolean read GetIsOK; end;
จากตัวอย่างโค๊ดข้างบน จะอธิบายส่วนประกอบต่างๆทีละส่วนดังนี้
type TObj = object private { private declarations } public { public declarations } end;
คือ private และ public โดยแต่ละตัวกำหนดความสามรถในการเข้าถึง Field, Procedure, Function หรือ Property ที่อยู่ภายใต้ สรุปได้ดังนี้
Access Modifier | Descriptions |
---|---|
private | มองเห็นได้เฉพาะที่อยู่ใน Unit เดียวกันกับ Object นี้เท่านั้น |
public | มองเห็นได้จากทุกที่ที่มีการ uses Unit นี้ |
ไม่ระบุ | หมายถึง Public |
คือ ส่วนที่ถูกประกาศเป็นตัวแปรคล้ายกับการประกาศ var จากตัวอย่างข้างบน คือ FName และ FValue ตัวแปรเหล่านี้มักถูกประกาศเพื่อใช้เก็บค่าสำหรับ Property
จากตัวอย่างข้างบน จะเห็นว่า Field ถูกประกาศภายใต้คำว่า Private เพราะเราใช้ Field เหล่านี้ไว้เก็บค่า Property ที่ชื่อว่า Name และ Value จึงไม่ต้องการให้ Field เหล่านี้ถูกแก้ใขได้จากภายนอก
คือ คุณสมบัติของ Object โดยรายละเอียดจะขอกล่าวในหัวข้อ Class อีกที