User Tools

Site Tools


tutorial:genericandtemplate

Differences

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

Link to this comparison view

Next revision
Previous revision
tutorial:genericandtemplate [2018/10/02 14:01]
admin created
tutorial:genericandtemplate [2018/12/23 23:16] (current)
admin [2. Generic Class]
Line 2: Line 2:
  
 =====Generic คืออะไร===== =====Generic คืออะไร=====
-คือการเขียนโปรแกรมให้สามารถใช้ได้กับหลากหลาย DataType ​+คือการเขียนโปรแกรมให้สามารถใช้ได้กับหลากหลาย DataType ​โดยทั่วไปเรามักจะใช้ Generic กับการเขียนโปรแกรมดังนี้ 
 +  * Generic Procedure/​Function  
 +  * Generic Class
  
-\\ +=====1. Generic Procedure/​Function===== 
 +คือการสร้าง Procedure/​Function ที่รับค่า(หรือส่งค่า) Argument โดยไม่ได้ระบุ DataType เพื่อให้ Procedure/​Function ดังกล่าว สามารถนำไปใช้ได้กับ DataType ที่หลากหลายนั่นเอง ​\\ 
 + 
 +รูปแบบการประกาศ สรุปได้ดังนี้ 
 + 
 +^  Topic  ^  Format ​ ^  
 +|Generic Procedure|<​sxh delphi;>​ 
 +generic procedure ProcedureName<​T>​(Arg1:​T);​ 
 +begin 
 +  {Do something} 
 +end; 
 +</​sxh>​ | 
 +|Generic Function|<​sxh delphi;>​ 
 +generic function FunctionName<​T>​(Arg1:​T):​T;​ 
 +begin 
 +  {Do something} 
 +end; 
 +</​sxh>​ | 
 + 
 +การเรียกใช้ สมตติว่าเราจะนำมาใช้กับ integer จะเรียกใช้ได้ดังนี้ 
 + 
 +  specialize FunctionName<​integer>​(x):​  
 + 
 + 
 +<hidden Example-1: Generic Function สำหรับหาผลรวมของตัวแปร 2 ค่า>​ 
 +<sxh delphi;>​ 
 +generic function sum<​T>​(x,​y:​T):​T;​ 
 +begin 
 +  result:​=x+y;​ 
 +end; 
 + 
 +var x,​y:​double;​ 
 + 
 +Begin 
 + ​x:​=12.78;​ 
 + ​y:​=9.86;​ 
 + ​writeln('​sum(x,​y) = ',​specialize sum<​double>​(x,​y));​ 
 + 
 +End. 
 +</​sxh> ​     
 +</​hidden>​  
 + 
 +\\ 
 + 
 +**__หมายเหตุ__** - Generic Function ปัจจุบันสามารถใช้ได้เฉพาะ Lazarus เวอร์ชั่น Trunk (สำหรับ Developer) เท่านั้น ยังไม่สามารถใช้ได้กับเวอร์ชั่นทั่วไป 
 + 
 +=====2. Generic Class===== 
 +คือการสร้าง Class ที่ใช้กับ DataType ใดๆก็ได้ ไม่เฉพาะเจาะจง คล้ายกับ Generic Procedure/​Function แค่เปลี่ยนเป็น Class เท่านั้น อย่างไรก็ตาม สำหรับ Generic Class นั้น ก่อนการนำไปใช้ จะต้องมีการสร้าง Class เป้าหมาย ขึ้นมาก่อนเสมอ รูปแบบของการประกาศและการสร้าง Class สรุปได้ดังนี้ 
 + 
 +^  Topic  ^  Format ​ ^  
 +|การประกาศ Generic Class|<​sxh delphi;>​ 
 +type 
 +  generic TList<​T>​ = class 
 +    Items: array of T; 
 +    procedure Add(Value: T); 
 +  end; 
 +</​sxh>​ | 
 +|การสร้าง Class จาก Generic Class|<​sxh delphi;>​ 
 +Type   
 +  TIntegerList = specialize TList<​Integer>;​ 
 +  TPointerList = specialize TList<​Pointer>;​ 
 +  TStringList = specialize TList<​string>;​ 
 +</​sxh>​ |
tutorial/genericandtemplate.1538463674.txt.gz · Last modified: 2018/10/02 14:01 by admin