User Tools

Site Tools


tutorial:procedureandfunction

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:procedureandfunction [2019/01/04 16:03]
admin [By Reference]
tutorial:procedureandfunction [2019/01/06 16:54] (current)
admin
Line 84: Line 84:
 \\ \\ \\ \\
  
-=====การประกาศ Procedure/​Function===== +=====การประกาศและการเรียกใช้ ​Procedure/​Function===== 
-หลังจากการประกาศ uses แล้ว Procedure/​Function ที่เป็น Global Scope สามารถประกาศไว้ ณ ส่วนไหนของโปรแกรมก็ได้ แต่โดยปกติแล้ว ผมขอแนะนำให้ประกาศทีหลังสุด (หลังจากประกาศ var) แต่ถ้าหากเป็น Function/​Procedure ที่มาจาก Shared Library ผมขอแนะนำให้วางไว้แรกสุด (ต่อจากการประกาศ uses)+หลังจากการประกาศ uses แล้ว Procedure/​Function ที่เป็น Global Scope สามารถประกาศไว้ ณ ส่วนไหนของโปรแกรมก็ได้ แต่โดยปกติแล้ว ผมขอแนะนำให้ประกาศทีหลังสุด (หลังจากประกาศ var) แต่ถ้าหากเป็น Function/​Procedure ที่มาจาก Shared Library ผมขอแนะนำให้วางไว้แรกสุด (ต่อจากการประกาศ uses) \\ 
 + 
 +การเรียกใช้ Procedure นั้นง่ายมาก เพียงแค่ใส่ชื่อ Procedure นั้นๆ (พร้อมกับ Input Parameters ถ้ามี) ได้เลย ยกตัวอย่างเช่น 
 + 
 +<hidden Example-5: Calling Procedures>​ 
 +<sxh delphi>​ 
 +Program SayHellow;​ 
 + 
 +procedure HelloWorld;​ 
 +begin 
 +  writeln('​HelloWorld'​);​ 
 +end; 
 + 
 +procedure SayHello(sName:​string);​ 
 +begin 
 +  writeln('​Hello'​+ sName); 
 +end; 
 + 
 +Begin 
 +  HelloWorld; //Calling HelloWorld 
 +  SayHello('​Mr. Smith'​);​ //Calling Procedure 
 +End. 
 +</​sxh>​ 
 +</​hidden>​
 \\ \\
 +
 +สำหรับการเรียกใช้ Function นั้นก็คล้ายกับการเรียกใช้ Procedure แต่มีข้อแตกต่างอีกอย่างหนึ่ง คือ Function ให้ค่า Output ด้วย ​
 +\\ \\
 +
 =====Nested Function/​Procedure===== =====Nested Function/​Procedure=====
 คือ Function/​Procedure ที่เป็น Local Scope ซ้อนอยู่ใน Function/​Procedure อื่น\\ คือ Function/​Procedure ที่เป็น Local Scope ซ้อนอยู่ใน Function/​Procedure อื่น\\
-<hidden Example-5: Nested Function>​+<hidden Example-6: Nested Function>​
 <sxh delphi;​highlight:​ [4-10]> <sxh delphi;​highlight:​ [4-10]>
 procedure SolvePolynomial(A,​B,​C:​real);​ procedure SolvePolynomial(A,​B,​C:​real);​
Line 135: Line 162:
     writeln('​X = ',X);     writeln('​X = ',X);
   end;   end;
-</​sxh> ​\\+</​sxh>​
  
 ====By Reference==== ====By Reference====
Line 149: Line 176:
  
  
-<hidden Example-6: Passing Parameters (By Value, By Reference)>​+<hidden Example-7: Passing Parameters (By Value, By Reference)>​
 <sxh delphi;> <sxh delphi;>
 program Passing_Param;​ program Passing_Param;​
Line 194: Line 221:
     ​     ​
 </​hidden>​ </​hidden>​
 +\\
 +
 +=====Forward Declaration=====
 +คือ การประกาศ Procedure/​Function ล่วงหน้าเพื่อให้ทุก Procedure/​Function สามารถเรียกใช้งานกันและกันได้หมด สาเหตุที่ต้องทำแบบนี้เพราะว่า โดยปกตินั้น Compiler จะอ่าน source code จาก บนลงล่าง ดังนั้น หากมี Procedure/​Function ตัวใดตัวหนึ่งเรียกใช้งาน Procedure/​Function ตัวอื่นที่ยังไม่ได้ประกาศ จะทำให้เกิด Error \\
 +
 +รูปแบบการประกาศสำหรับ Program จะมีคำว่า forward ต่อท้ายดังนี้
 +
 +  Procedure DoSomething;​ forward;
 +
 +สำหรับ Unit นั้น FPC บังคับให้ต้องมีการทำ forward declaration ทุกครั้งก่อนเสมอ เพราะ unit อื่นหรือ program ที่มีการ uses unit ดังกล่าวนั้น จะเข้าถึง Procedure/​Function ได้เฉพาะส่วนที่เป็น interface เท่านั้น ไม่สามารถเข้าถึงส่วน implementation โดยตรงได้ ดังนั้นจึงต้องประกาศล่วงหน้าในตำแหน่งใต้คำว่า interface เสมอ โดยการประกาศจะไม่มีคำว่า forward ต่อท้ายเหมือนของ program อีก ดังตัวอย่างต่อไปนี้
 +
 +<sxh delphi;>
 +unit Unit1;
 +
 +interface
 +//Forward declaration
 +procedure First;
 +procedure Second;
 +
 +implementation
 +
 +procedure First;
 +begin
 +  writeln('​Hello First'​);​
 +  Second;
 +end;
 +
 +procedure Second;
 +begin
 +  writeln('​Hello Second'​);​
 +end;
 +end. 
 +</​sxh>​ \\
 +
 +
 +<hidden Example-8: Forward Declarations on Simple Program>
 +__**อธิบาย**__ - ตัวอย่างนี้ มีการประกาศโปรแกรมย่อย ชื่อ Second ล่วงหน้าในบรรทัดที่ 4 เพื่อให้โปรแกรมย่อยที่ชื่อ First ได้รู้จัก Second ก่อน แน่นอนว่าหากตัด code ในบรรทัดที่ 4 ออกไปแล้ว สิ่งที่จะตามมาคือ เมื่อ compiler อ่านจนมาถึง First ก็จะฟ้องทันทีว่าไม่สามารถหา Second เจอ ​
 +
 +<sxh delphi;​highlight:​ [4]>
 +program FWD_Declaration;​
 +
 +//Forward declarations
 +procedure Second; ​ forward;
 +
 +//​Implementations
 +procedure First;
 +begin
 +  writeln('​Hello First'​);​
 +  Second;
 +end;
 +
 +procedure Second;
 +begin
 +  writeln('​Hello Second'​);​
 +end;
 +
 +begin
 +  First;
 +  readln();
 +end.  ​
 +</​sxh> ​
 +
 +Compiled Results:
 +
 +  Hello First
 +  Hello Second
 +    ​
 +</​hidden>​
 +\\
tutorial/procedureandfunction.1546592601.txt.gz · Last modified: 2019/01/04 16:03 by admin