User Tools

Site Tools


tutorial:record

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
tutorial:record [2019/01/28 09:19]
admin
tutorial:record [2019/01/28 10:14] (current)
admin
Line 55: Line 55:
 ปกติแล้ว Record จะมีแค่ Field Variable อยู่ภายใน แต่ยังมี Record อีกประเภทหนึ่งที่มี Method และ Property ได้ เรียกว่า Advanced Record \\ ปกติแล้ว Record จะมีแค่ Field Variable อยู่ภายใน แต่ยังมี Record อีกประเภทหนึ่งที่มี Method และ Property ได้ เรียกว่า Advanced Record \\
  
-Advanced Record ถูกสร้างขึ้นเพื่อให้มีความสามารถทางด้าน Object Oriented Programming ​เช่นเดียวกับ Object จะเรียกได้ว่า Advanced Record กับ Object นั้นเหมือนกันแทบทั้งหมดก็ว่าได้ ​\\+Advanced Record ถูกสร้างขึ้นเพื่อให้มีความสามารถทางด้าน Object Oriented Programming \\
  
 การประกาศ Advanced Record จำเป็นต้องมี Compiler Directive ต่อไปนี้ การประกาศ Advanced Record จำเป็นต้องมี Compiler Directive ต่อไปนี้
Line 61: Line 61:
   {$modeSwitch advancedRecords}   {$modeSwitch advancedRecords}
   ​   ​
-จากนั้น เราก็สามารถประกาศ Record ​ให้มีหน้าตาคล้ายกับ Object ​ได้แบบนี้+จากนั้น เราก็สามารถประกาศ ​Procedure/​Function บน ​Record ได้ดังนี้
  
   Type   Type
Line 136: Line 136:
 ---- ----
 =====Object===== =====Object=====
-ถูกสร้างขึ้นมาตั้งแต่สมัยที่ยังใช้ Turbo Pascal โดยออกแบบให้เป็นไปตามหลักการ Object Oriented Programming (OOP) ลักษณะการใช้งานโดยทั่วไปจะคล้ายกับ Advanced Record \\ \\+ถูกสร้างขึ้นมาตั้งแต่สมัยที่ยังใช้ 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 และ Advanced Record นั้น เพราะว่าภายหลังจากที่ Delphi เปิดตัว ได้มีการนำ Class มาใช้แทน Object และผลักดันให้ เรียก Object ว่าเป็น Advanced Record แทน (อันนี้ผมเข้าใจว่า เพราะคำว่าว่า Object ในภาษาทั่วไป คือ instance ซึ่งแปลว่าผลิตภัณท์ที่เกิดจากต้นแบบ (Class) ซึ่งอาจสร้างความสับสนให้ผู้ใช้ได้) ทีนี้ทางฝั่งของ FPC ซึ่งมีการออกแบบให้โค๊ดทั้งหลายคล้ายคลึงกับทั้งทาง Turbo Pascal และ Delphi อยู่แล้วนั้น ได้ตัดสินใจเก็บ Object ไว้ เพื่อให้ยัง Compatible กับ Turbo Pascal อยู่นั่นเอง แต่ถึงอย่างไรทั้งสอง ก็ถูกใช้งานเหมือนกัน
  
Line 190: Line 190:
  
 ====Properties==== ​ ====Properties==== ​
-คือ คุณสมบัติของ Object ​ะกอบไปด้วย Getter (คำสั่งหลัง read) และ ​Setter (คำสั่งหลัง write)\\ \\ +คือ คุณสมบัติของ Object ​โดยยละเอจะขอกล่าวในหัวข้อ Class อีกที\\ \\
-พื่เป็นการอธิบาให้เห็นภาพ ​จะขอัวอย่าง+
  
-  property ValueX:​integer read GetValueX write SetValueX; 
- 
-จากตัวอย่างดังกล่าว Getter คือ GetValueX ส่วน Setter คือ SetValueX \\ 
-Getter จะถูกเรียกใช้งาน เมื่อมีการเรียกใช้ค่าของ Property ดังเช่น 
- 
-  writeln(ValueX);​ 
-  ​ 
-Setter จะถูกเรียกใช้งาน เมื่อมีการใส่ค่าให้ Property เช่น 
- 
-  ValueX:=12; 
-  ​ 
-ทำไมต้องมี Getter Setter ให้ยุ่งยาก แทนที่จะใช้ var หรือ Field อย่างเดียว?​ ประโยชน์ของการใช้งาน Property มีดังนี้ครับ 
-  *ใช้คัดกรองตัวแปร บางครั้งเรารับค่าเพื่อการคำนวณในช่วง 0-100 เท่านั้น หากผู้ใช้ใส่ค่าเกินกว่าค่าดังกล่าวมา จะสามารถคัดกรองให้เป็นค่าที่อยู่ในช่วง 0-100 แทนได้ 
-  *เพื่อให้ค่าของ Property ได้มีการ update ตลอดเวลา โดยเฉพาะหาก property ของเรา ขึ้นอยู่กับค่าอื่น เมื่อใดที่มีการเปลี่ยนค่า ก็จะมีการ update ค่า property เราด้วยเสมอ 
- 
- 
-รูปแบบการเขียน Property มีหลักๆดังนี้ 
-  *Property ที่มี Getter, Setter เป็น Field 
- 
-  property Value:​integer read FValue write FValue; 
- 
-  *property ที่มี Getter, Setter เป็น Procedure/​Function ซึ่งโดยปกติ Getter จะเป็น Function ส่วน Setter จะเป็น Procedure 
- 
-  property ValueX:​integer read GetValueX write SetValueX; 
-  function GetValueX:​integer;​ 
-  procedure SetValueX(Value:​integer);​ 
- 
-  *Property ที่แสดงค่าได้อย่างเดียว (ReadOnly) 
- 
-  property IsOK:​boolean read GetIsOK; 
  
  
tutorial/record.1548641950.txt.gz · Last modified: 2019/01/28 09:19 by admin