This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
tutorial:syntax [2019/01/06 11:04] admin |
tutorial:syntax [2019/01/06 16:38] (current) admin |
||
---|---|---|---|
Line 205: | Line 205: | ||
=====Unit Structure===== | =====Unit Structure===== | ||
บางครั้งการแยกโค๊ดออกเป็นโมดูลย่อยแล้วค่อยเรียกใช้เข้ามาในโปรแกรมหลัก จะทำให้เราสะดวกในการค้นหาและแก้ไข อีกทั้งโค๊ดส่วนนี้ยังสามารถเอาไปใช้ในหลายๆโปรแกรมในภายหน้าได้อีก เราเรียกโมดูลที่เก็บโค๊ดเหล่านี้ว่า Unit \\ | บางครั้งการแยกโค๊ดออกเป็นโมดูลย่อยแล้วค่อยเรียกใช้เข้ามาในโปรแกรมหลัก จะทำให้เราสะดวกในการค้นหาและแก้ไข อีกทั้งโค๊ดส่วนนี้ยังสามารถเอาไปใช้ในหลายๆโปรแกรมในภายหน้าได้อีก เราเรียกโมดูลที่เก็บโค๊ดเหล่านี้ว่า Unit \\ | ||
- | Unit คือไฟล์ .pas ที่มีส่วนประกาศหรือตัวแปรต่างๆ (uses, const, type, var) หรือโปรแกรมย่อย (functions/procedures) อยู่ภายใน ประกอบไปด้วยส่วนที่เป็น Public และ Private โดยโครงสร้าง Unit ของ Pascal จะมีรูปแบบดังนี้ | + | Unit คือไฟล์ .pas ที่มีส่วนประกาศหรือตัวแปรต่างๆ (uses, const, type, var) หรือโปรแกรมย่อย (functions/procedures) อยู่ภายใน ประกอบไปด้วยส่วนที่เป็น Public Scope และ Private Scope โดยโครงสร้าง Unit ของ Pascal จะมีรูปแบบดังนี้ |
<sxh delphi;> | <sxh delphi;> | ||
unit unitname; | unit unitname; | ||
- | //public scope ----- | + | |
- | + | //public scope ----- | |
interface | interface | ||
{uses, const, type, var, function, procedure ... declaration} | {uses, const, type, var, function, procedure ... declaration} | ||
Line 220: | Line 220: | ||
end. | end. | ||
</sxh> | </sxh> | ||
- | \\ \\ | + | \\ |
+ | *__**Public Scope**__ คือ ส่วนที่อยู่ใต้คำว่า interface ลงมา แต่อยู่เหนือคำว่า implementation ทุกครั้งที่มี Program อื่น หรือ Unit อื่น เรียกใช้ Unit ดังกล่าวนี้ (ใช้ใน uses) จะเห็น Variables หรือ Sub-program หรืออะไรก็ตามที่ประกาศไว้ในเฉพาะส่วนนี้เท่านั้น \\ | ||
+ | *__**Private Scope**__ คือ ส่วนที่อยู่ใต้คำว่า implementation เป็นส่วนที่ Program อื่น หรือ Unit อื่น ที่เรียกใช้ Unit ดังกล่าวนี้ ไม่สามารถเข้าถึงโดยตรงได้ จะเรียกใช้งานได้ก็ต่อเมื่อเรียกผ่านการ Declaration ในส่วนของ Public Scope เท่านั้น | ||
+ | |||
+ | ที่เป็นแบบนี้เพราะ ส่วนของ implementation นั้นมักจะประกอบไปด้วย source code หลายบรรทัด แถมยังมีการเรียกใช้ Variables หรือ Sub-program ซ้ำกันเต็มไปหมด จะเป็นการยากที่จะให้ Compiler มาหา Variables หรือ Sub-program หรืออะไรก็ตาม ในสถานที่นี้ | ||
+ | |||
+ | \\ \\ | ||
=====ความรู้พื้นฐานก่อนเริ่มเขียน Pascal===== | =====ความรู้พื้นฐานก่อนเริ่มเขียน Pascal===== | ||
====Declaration and Implementation==== | ====Declaration and Implementation==== | ||
การเขียนโปรแกรมนอกเหนือจากต้องรู้จักโครงสร้างของโปรแกรมแล้ว ยังต้องทำความเข้าใจกับสองคำนี้ คือ Declaration กับ Implementation ซึ่งนอกจากจะเกี่ยวข้องกับการเขียน Main Program แล้ว ยังเกี่ยวข้องกับ Sub-program ด้วย (Sub-program คือ Procedure/Function หรือเรียกอีกอย่างว่า Method นั่นเอง เพื่อไม่ให้ดูซับซ้อนมากเกินไป ในหัวข้อนี้ จะขอเรียกพวกนี้สั้นๆว่า Sub-program แทน)\\ | การเขียนโปรแกรมนอกเหนือจากต้องรู้จักโครงสร้างของโปรแกรมแล้ว ยังต้องทำความเข้าใจกับสองคำนี้ คือ Declaration กับ Implementation ซึ่งนอกจากจะเกี่ยวข้องกับการเขียน Main Program แล้ว ยังเกี่ยวข้องกับ Sub-program ด้วย (Sub-program คือ Procedure/Function หรือเรียกอีกอย่างว่า Method นั่นเอง เพื่อไม่ให้ดูซับซ้อนมากเกินไป ในหัวข้อนี้ จะขอเรียกพวกนี้สั้นๆว่า Sub-program แทน)\\ | ||
- | |||
__**Declaration**__ คือ การประกาศ เป็นส่วนที่ใช้บอก Compiler ว่า Program หรือ Sub-program ดังกล่าว ชื่ออะไร รับ Input หรือส่ง Output อะไรบ้าง เป็นต้น แต่ยังไม่ได้บอกถึงรายละเอียดว่าทำอะไรได้บ้าง | __**Declaration**__ คือ การประกาศ เป็นส่วนที่ใช้บอก Compiler ว่า Program หรือ Sub-program ดังกล่าว ชื่ออะไร รับ Input หรือส่ง Output อะไรบ้าง เป็นต้น แต่ยังไม่ได้บอกถึงรายละเอียดว่าทำอะไรได้บ้าง | ||
Line 231: | Line 236: | ||
__**Implementation**__ คือ ส่วนที่บ่งบอกว่า Program หรือ Sub-program นั้นทำอะไรบ้าง มีขั้นตอนอะไรบ้าง | __**Implementation**__ คือ ส่วนที่บ่งบอกว่า Program หรือ Sub-program นั้นทำอะไรบ้าง มีขั้นตอนอะไรบ้าง | ||
+ | <hidden อธิบายเพิ่มเติมเกี่ยวกับ Declaration/Implementation> | ||
ย้อนกลับไปดูที่โครงสร้างของ Main Program จะแบ่งแยกพื้นที่ได้ดังนี้ | ย้อนกลับไปดูที่โครงสร้างของ Main Program จะแบ่งแยกพื้นที่ได้ดังนี้ | ||
- | * Declaration Scope คือ ส่วนแรก คือ บรรทัดที่ 1-16 | + | * Declaration คือ ส่วนแรก คือ บรรทัดที่ 1-16 |
- | * Implementation Scope คือ ระหว่างคำว่า BEGIN ... END. หรือ บรรทัดที่ 18-20 | + | * Implementation คือ ระหว่างคำว่า BEGIN ... END. หรือ บรรทัดที่ 18-20 |
<sxh delphi;highlight: [1-16,18-20]> | <sxh delphi;highlight: [1-16,18-20]> | ||
Line 261: | Line 267: | ||
\\ | \\ | ||
ทีนี้ลองมาดูที่โครงสร้างของ Sub-Program ที่อยู่ภายใน Main Program กันบ้าง ขอยกตัวอย่าง Procedure SubProg และ Function SubFunc ข้างล่างนี้ เราจะแบ่งพื้นที่ของ Sub-Program Declaration กับ Implementation ได้ดังนี้ | ทีนี้ลองมาดูที่โครงสร้างของ Sub-Program ที่อยู่ภายใน Main Program กันบ้าง ขอยกตัวอย่าง Procedure SubProg และ Function SubFunc ข้างล่างนี้ เราจะแบ่งพื้นที่ของ Sub-Program Declaration กับ Implementation ได้ดังนี้ | ||
- | * Declaration Scope คือ ส่วนแรก ในบรรทัดที่ 6-7 (เป็นการประกาศแบบล่วงหน้า หรือ Forward Declaration ซึ่งจากตัวอย่างนี้ จะมีหรือไม่มีก็ได้) | + | * Declaration คือ ส่วนแรก ในบรรทัดที่ 6-7 (เป็นการประกาศแบบล่วงหน้า หรือ Forward Declaration ซึ่งจากตัวอย่างนี้ จะมีหรือไม่มีก็ได้) |
- | * Implementation Scope คือ บรรทัดที่ 9-17 บ่งบอกว่า Sub Program พวกนี้ ทำอะไรได้บ้าง | + | * Implementation คือ บรรทัดที่ 9-17 บ่งบอกว่า Sub Program พวกนี้ ทำอะไรได้บ้าง |
<sxh delphi;highlight: [6-7,9-17]> | <sxh delphi;highlight: [6-7,9-17]> | ||
Line 292: | Line 298: | ||
สำหรับ Unit เราสามารถแบ่งพื้นที่ได้แบบนี้ | สำหรับ Unit เราสามารถแบ่งพื้นที่ได้แบบนี้ | ||
- | * Declaration Scope คือ ส่วนแรก คือ บรรทัดที่ 1-5 | + | * Declaration คือ ส่วนแรก คือ บรรทัดที่ 1-5 |
- | * Implementation Scope คือ ระหว่างคำว่า implementation ... end. หรือ บรรทัดที่ 7-9 (สังเกตว่ามันจะคล้ายกับ BEGIN...END. ของ Main Program แค่เปลี่ยนคำแรกเป็น implementation แค่นั้นเอง) | + | * Implementation คือ ระหว่างคำว่า implementation ... end. หรือ บรรทัดที่ 7-9 (สังเกตว่ามันจะคล้ายกับ BEGIN...END. ของ Main Program แค่เปลี่ยนคำแรกเป็น implementation แค่นั้นเอง) |
<sxh delphi;highlight: [1-5,7-9]> | <sxh delphi;highlight: [1-5,7-9]> | ||
unit unitname; | unit unitname; | ||
Line 309: | Line 315: | ||
\\ | \\ | ||
สำหรับ Sub-Program ที่อยู่ภายใต้ Unit จะแบ่งพื้นที่ได้ดังนี้ | สำหรับ Sub-Program ที่อยู่ภายใต้ Unit จะแบ่งพื้นที่ได้ดังนี้ | ||
- | * Declaration Scope คือ ส่วนแรก ในบรรทัดที่ 6-7 (ส่วนนี้บังคับว่าต้องมี และถือเป็นการ Forward Declaration เหมือนกัน แต่ไม่ต้องใส่คำว่า forward;) | + | * Declaration คือ ส่วนแรก ในบรรทัดที่ 6-7 (ส่วนนี้บังคับว่าต้องมี และถือเป็นการ Forward Declaration เหมือนกัน แต่ไม่ต้องใส่คำว่า forward;) |
- | * Implementation Scope คือ บรรทัดที่ 10-19 บ่งบอกว่า Sub Program พวกนี้ ทำอะไรบ้าง | + | * Implementation คือ บรรทัดที่ 10-18 บ่งบอกว่า Sub Program พวกนี้ ทำอะไรบ้าง |
- | <sxh delphi;highlight: [6-7,10-19]> | + | <sxh delphi;highlight: [6-7,10-18]> |
unit unitname; | unit unitname; | ||
Line 322: | Line 328: | ||
| | ||
implementation | implementation | ||
- | | ||
program SubProg; | program SubProg; | ||
begin | begin | ||
Line 331: | Line 336: | ||
begin | begin | ||
result:= inp; | result:= inp; | ||
- | end; | + | end; |
- | + | ||
end. | end. | ||
</sxh> | </sxh> | ||
+ | |||
+ | </hidden> | ||
\\ | \\ | ||
Line 348: | Line 354: | ||
<hidden Example-3: การใช้งาน write, writeln และ readln> | <hidden Example-3: การใช้งาน write, writeln และ readln> | ||
**ตัวอย่าง** โปรแกรมคำนวณ Body Mass Index (BMI)\\ | **ตัวอย่าง** โปรแกรมคำนวณ Body Mass Index (BMI)\\ | ||
+ | __**ข้อสังเกต**__ - readln() (หรือ readln) ในบรรทัดที่ 20 นั้น ถูกใช้เพื่อเบรคหน้าจอไม่ให้ปิดตัวเองลง และผู้ใช้สามารถกด Enter เพื่อผ่านคำสั่งนี้ได้ (จบโปรแกรม) | ||
<sxh delphi;> | <sxh delphi;> | ||
program BMI_Calculation; | program BMI_Calculation; | ||
Line 368: | Line 375: | ||
writeln('Your BMI is = ',Format('%.2f',[BMI])); | writeln('Your BMI is = ',Format('%.2f',[BMI])); | ||
- | readln(); | + | readln(); // or readln; |
end. | end. | ||
</sxh> | </sxh> |