การศึกษาเรียนรู้ภาษาโปรแกรม basic syntax วากยสัมพันธ์ และหลักไวยกรณ์

nirak's picture

มีไม่กี่เรื่อง ที่ผมชอบนำมาคุยในบทความ คือ เรื่องน่ารู้ออนไลน์ และการเขียนโปรแกรมคอมพิวเตอร์ คิดว่า เรื่องเหล่านี้ เคยนำมาเขียนไว้หลายต่อหลายครั้งแล้ว แต่วันนี้ มองไปเห็นศัพท์คำนี้ในวิกิพีเดีย คือ วากยสัมพันธ์ คำที่ใช้มันแปลกดีครับ เลยจับโยงไปถึงเรื่องของ basic syntax ใน PHP การจะศึกษา ถึงกฎเกณฑ์ของการเขียนภาษา ทุกภาษา อย่างแรกเลย เราต้องเน้นเรื่อง basic ซะก่อนครับ

แล้วค่อยพัฒนาก้าวไปสู่ ของการนำไปใช้ คงไม่มีใคร สื่อสารกันโดยไม่เข้าใจภาษาล่ะครับ คอมพิวเตอร์ก็เหมือนกัน คำว่าภาษาโปรแกรมนั้นแตกรายละเอียดไปหลายด้าน เช่น ลักษณะของคำสัง ลักษณะของภาษา ชนิดของข้อมูล โครงสร้างของข้อมูลนั้นๆ ภาษาคอมพิวเตอร์ที่คนรู้จักมากที่สุด คือภาษาระดับสูง ซึ่งเราสามารถเข้าใจได้ ตามลักษณะของคำสั่ง เช่น

 

$var = 'Bob';
$Var = 'Joe';
echo "$var, $Var"; // outputs "Bob, Joe"

$4site = 'not yet'; // invalid; starts with a number
$_4site = 'not yet'; // valid; starts with an underscore
$täyte = 'mansikka'; // valid; 'ä' is (Extended) ASCII 228.

เราสามารถเข้าใจได้ทันทีว่า ตัวแปร $var เก็บค่าคำว่า Bob ไว้ และเมื่อ echo $var ก็คือ แสดงค่าในตัวแปรนั้นออกหน้าจอ ที่ผมต้องยกตัวอย่างจาก PHP เพราะหลังๆ ผมไม่ค่อยได้จับภาษาอื่นๆ เลย ผมขอยกตัวอย่างจากนี้ล่ะกันนะครับ

นี่ละครับ มันเป็นรูปแบบหลักไวยกรณ์ของภาษา แต่สิ่งที่ทุกๆ ภาษาต้องมีทุกอย่างเหมือนกัน คือ จำพวก การตั้งค่าตัวแปร ดังตัวอย่างแรก

และ type ของตัวแปรต่างๆ เช่น Booleans, Integers,Floating,Numbers,Strings,Arrays,Objects

 

$myAge = 16; // a PHP Integer - always available
$yourAge = 15.5; // a PHP Float - always available
$hasHair = true; // a PHP Boolean - always available
$greeting = "Hello World!" // a PHP String - always available

การตีความภาษาของ PHP ดูเข้าใจง่าย และนำไปใช้ตามรูปแบบตัวแปร ไม่จำเป็นต้องกำหนด รูปแบบ(type) ยกตัวอย่างภาษาซี

เช่น

int i;
char a,b,c;

เราจำเป็นต้องกำหนดชนิดของตัวแปรซะก่อน จึงสามารถนำไปใช้งานได้ ฉะำนั้น คำว่าหลักไวยากรณ์คำสั่งการตั้งค่าตัวแปร ของภาษาซี ก็คือ

ชนิดของตัวแปร ตามด้วย ชื่อตัวแปรที่1,ชื่อตัวแปรที่2,ชื่อตัวแปรที่3 เป็นต้น

สำหรับบทความนี้ ผมพยายาม นำมาพูดทุกภาษา ในเรื่องต่างๆ เหล่านี้ครับ

เขียนต่อดีกว่า รู้สึกว่า เน็ตจะ work ขึ้นแล้วล่ะ โม้ต่อไปแล้วล่ะ

# Variables แปลความหมายง่ายๆ ตรงตัว คือ ตัวแปร นั่นเอง เรื่องนี้ มีกันทุกภาษาครับ การกำหนดรูปแบบ ตายตัว แตกต่างไปแต่ละภาษา ยกตัวอย่าง สัก 3 ภาษาล่ะกันครับ

1.  PHP กำหนดตัวแปรดังนี้

$name = 'Some_text';
$$name = 123;
echo $Some_text;   // outputs: 123

 

2.C# การกำหนดดังนี้ครับ

string text = "Oak";

char word = 'O'; 

const double PI = 3.14159 ;

int xxxxx;
double xxxxx;
char xxxx;
float xxxx;
string xxxxx;

และ Javascript  รูปแบบ var แล้วตามด้วยตัวแปร ซึ่งชนิดของข้อมูล มีไม่เยอะ

1. Integer คือเลขจำนวนเต็ม
2. Floating-point numbers คือเลขจำนวนจริง
3. Logic or boolean values คือตรรก(มีค่าแค่ถูกกับผิด)
4. String คือข้อความ

var employee = new Array(5);
// กำหนดค่าใส่ Array
employee[0] = "Squall";
employee[1] = "Rinoa";
employee[2] = "Zell";
employee[3] = "Seifer";
employee[4] = "Irvine";

ตัวอย่างเพิ่มเติม เช่น

var now = new Date();
var url = result;
var url = 'http://www.google.co.th';

 

ทั้งสามมีรูปแบบคล้ายๆ กันครับ ต้นกำเนิด มาจากภาษาซีครับ จบไว้แค่นี้ก่อนครับ งานเข้า 555

มาต่อครับ

การกำหนดตัวแปรรูปแบบ syntax นอกจากจะเป็นตามกฏเกณฑ์ ภาษานั้นๆ แล้ว สิ่งที่ไม่ควรลืมคือ ทุกภาษา ต้องมีคำสงวน(Keywords)ไว้ คือ ห้ามนำมาใช้ในการกำหนดค่าให้เป็นตัวแปร ยกตัวอย่างจากภาษาซี เช่น union, case, double,goto,short,unsigned,if while,switch,int

เวลาประกาศตัวแปร เราจึงใช้งานไม่ได้ ยกตัวอย่าง

int case=1;

string switch;

ลัำกษณะนี้ เป็นต้น ผมเขียนมาตั้งนาน เอะ ยังไม่จบเรื่องของตัวแปรเลยหรือนี่ ว่ากันต่อไปแล้วกัน เมื่อเราประกาศตัวแปรแล้ว เราต้องเกี่ยวข้องกับ type แน่นอนครับ คือชนิดของข้อมูลน่ะเองครับ

int xxxxx;
double xxxxx;
char xxxx;
float xxxx;
string xxxxx;

จากตัวอย่างนี้ ชนิดของข้อมูลก็คือ int, double, char ,float, string แยกเป็นตัวเลข ทั้งจำนวนเต็ม เป็นทศนิยม เป็นตัวอักษร และ ข้อความครับ เรื่องนี้จึงเกี่ยวข้องกับการถ่ายเทข้อมูล เช่น เรากำหนดว่า

int  abc;

string def="test";

double aaa;

เราจะกำหนดดังนี้ไม่ได้ครับ

abc = def;  หรือ aaa = "ทดสอบตัวแปร";

นั่นเป็นสิ่งกำหนดตายตัวแน่นอน แต่สำหรับ PHP และ Javascript หรือภาษาบางภาษา นั้นการกำหนดข้อมูล สามารถทำได้โดยอิสระ

เช่น เรากำหนด $abc  เป็นตัวแปรตัวหนึ่ง abc นี้สามารถนำไปรับค่าใดๆ ก็ได้ ทั้งตัวเลขและข้อความ แต่จะแตกต่างตรงที่เรานำมาใช้งานนั้นเอง ผมเห็นโดยมากแล้ว จะเป็นแบบนี้ เฉพาะภาษา อะไรที่เป็นภาษา script น่ะครับ ถ้าต้องกำหนดตายตัว แล้วต้องนำไปใช้ตายตัวแล้วล่ะก็ คงใช้งานยากน่าดูล่ะครับ ภาษา script เป็นอะไรที่ศึกษาได้ง่ายที่สุดแล้วครับ ผมเขียนมาถึงนี้ คงจบการคุยเรื่องของตัวแปรไว้แค่นี้ก่อนนะครับ ไว้มาคุยเรื่อง ต่อๆ ไปด้านล่างต่อนะครับ..เรื่องนี้ต้องมีอารมณ์นะครับ จึงเขียนได้ พอได้โม้หน่อยแล้วก็ไม่ค่อยหยุดเลย 555

# Constants หรือ ค่าคงที่ สำหรับเรื่องนี้ในทางโปรแกรมมิ่งนั้น ก็เป็นตัวแปรหนึ่ง ซึ่งกำหนดตายตัวเสมอในการใช้งาน และไม่มีมีการเปลี่ยนแปลง ในขณะที่โปรแกรมทำงาน โดยมากแล้ว ส่วนนี้ ถ้าลักษณะการแปลภาษา ตั้งแต่ หัว จรดเท้า นั้น ส่วนมาก ตัวแปรนี้ จะกำหนดให้ส่วนหัวเสมอ และที่ยกตัวอย่างนี้ เป็นภาษา PHP ครับ

 

 

// Valid constant names
define("FOO",     "something");
define("FOO2",    "something else");
define("FOO_BAR", "something more");

// Invalid constant names
define("2FOO",    "something");

// This is valid, but should be avoided:
// PHP may one day provide a magical constant
// that will break your script
define("__FOO__", "something");

และ อีกตัวอย่างหนึ่งครับ ถ้าเราใช้งาน VB หรือ visual base รูปแบบ จะเป็นดังนี้ครับ

 

[Private| Public] Const <ชื่อค่าคงที่> [As Type] = <ค่าคงที่กำหนดให้>

[Public I Private] Const constname [As type] = expression
Public(Optional) คือ ส่วนที่กำหนดให้ค่าคงที่สามารถใช้ได้ทั้งโปรเจ็ก ทุกโมดูล
Private(Optional) คือ ส่วนที่กำหนดให้ค่าคงที่สามารถใช้ได้เฉพาะโมดูลที่ประกาศเท่านั้น
Const  คือ คำสั่งสร้างค่าคงที่
Constname คือ ชื่อค่าคงที่
Type (Optional) คือ การกำหนดชนิดของค่าคงที่
Expression คือ ค่าที่ต้องการกำหนด

ตัวอย่าง

 

Option Explicit
Const PI As Double = 3.141578

สำหรับเรื่องของค่าคงที่ ในโปรแกรม ๆ หนึ่ง เราควรแยกว่า ในระบบหนึ่งๆ ค่านี้ เวลาจะนำไปใช้งาน จำเป็นต้องกำหนดเป็นค่าคงที่หรือไม่ เพราะตัวแปรแต่ละตัวมีค่า เพราะมันเป็นหนึ่งส่วนที่ทำให้โปรแกรมที่เราเขียนขึ้นมา ช้าหรือเร็ว ถ้าเรากำหนดตัวแปร โดยไม่คำนึงถึงประโยชน์ของการใช้ ก็เท่ากับว่า เราทำให้โปรแกรมกินความจำของเราโดยเปล่าประโยชน์เลย นี่เรายังไม่พูดถึง ขั้นตอนการทำงานเลยครับ ทั้ง loop เอย เงื่อนไข เอย ฉะนั้น การกำหนดโปรแกรม ทั้งคงที่ และแปรผัน จึงมีความสำคัญด้วยลักษณะนี้ครับ ...ไว้มาเขียนต่อนะครับ วันนี้แค่นี้ก่อน

มาเขียนต่อครับ
# Expressions หรือ นิพจน์ปรกติ (regular expression) ถ้าพูดถึงเรื่องนี้ อธิบายถึงรูปแบบของสตริงตามโครงสร้างรูปแบบที่กำหนด สำหรับทุกภาษานั้นการกำหนดสิ่งต่างๆ นี้ รูปแบบไม่เหมือนกัน แต่สุดท้ายแล้ว ค่าที่จะเป็นผลลัพธ์ ย่อมได้เหมือนกันเสมอ ครับ และไม่ต้องมาห่วง เพราะผิดพลาดในการตั้ง นิพจน์เหล่านี้ เมื่อไร รับรองโปรแกรมแปลภาษามิอาจจะทำให้ได้แน่นอน เวลาเราเขียนโปรแกรม ชั่งโมงบินมากขึ้น เรื่องนี้คงไม่ใช่ปัญหาอีกต่อไป เราลองมาดู ใน PHP ล่ะกันครับ เช่น

 

<?php

$a

= 2, $b = 4;

echo

$a."\n";
echo
$b."\n";

?>

Example (works):
<?php

for ($a = 2, $b = 4; $a < 3; $a++)
{
echo
$a."\n";
echo
$b."\n";
}

?>

รูปแบบ นิพจน์การใช้งาน ข้างต้นนี้ เราจะเห็นว่า บางประโยค เราใช้ได้ แต่อีก ประโยคก็เหมือนกันแต่ใช้ไม่ได้ นั้นเพราะเป็นส่วนบังคับของทุกๆ ภาษาครับ การได้ใช้งานมันบ่อยๆ ในภาษาที่ถนัด เราจึงสามารถ พลิกแพลง รูปแบบประโยคเหล่านี้ ให้สั้น และกระทัดรัดได้ และยังสามารถที่ประหยัดส่วนความจำในการใช้งาน และงานที่ต้องทำซ้ำๆ ได้ดีครับ

# Operators คือตัวดำเนินการ หรือ เครื่องหมาย (Operator) เป็นเครื่องหมายที่ให้ข้อมูลหรือตัวแปรมากกว่า 2 ตัวขึ้นไป เกิดการประมวลผล หรือ ทำอย่างใดอย่างหนึ่ง ที่ทำให้เกิดผลลัพธ์ ซึ่ง ในเรื่องนี้ ทางโปรแกรมได้แยกไว้หลายประเภทเลยล่ะ

ยกตัวอย่าง PHP

* Arithmetic Operators  ในการคำนวณคณิตศาสตร์  เช่น + - * / ผมยกตัวอย่างจาก PHP เช่นเดิมนะครับ

Example Name Result
-$a Negation Opposite of $a.
$a + $b Addition Sum of $a and $b.
$a - $b Subtraction Difference of $a and $b.
$a * $b Multiplication Product of $a and $b.
$a / $b Division Quotient of $a and $b.
$a % $b Modulus Remainder of $a divided by $b.

จะเห็นว่า ค่าต่าง ๆ เกิดจากการกระทำ และออกเป็นผลลัพธ์ ยกตัวอย่างมาแค่นี้ ผมว่าพอจะเข้าใจได้แล้วล่ะครับ

* Assignment Operators เครื่องหมายการกำหนดค่า  (Assignment Operation ) เช่น = , -= , += เราจะเห็นในประโยคในการกำหนดค่าตัวแปร ถ่ายค่า เพิ่มลด ค่าตัวแปร ตัวอย่างประโยค ล่างนี้ครับ

<?php

$a

= ($b = 4) + 5; // $a is equal to 9 now, and $b has been set to 4.

?>

* Bitwise Operators เครื่องหมายบิตไวท์ (Bit wise Operation) ตัวกระทำนี้ เราไม่ค่อยได้เห็นมากนัก เช่น <<  คือ การเลื่อนบิต การใช้ AND NOT เป็นต้น ถ้าลองไปดูตัวอย่างล่างนี้ น่าจะเข้าใจได้ง่ายครับ

Example Name Result
$a & $b And Bits that are set in both $a and $b are set.
$a | $b Or (inclusive or) Bits that are set in either $a or $b are set.
$a ^ $b Xor (exclusive or) Bits that are set in $a or $b but not both are set.
~ $a Not Bits that are set in $a are not set, and vice versa.
$a << $b Shift left Shift the bits of $a $b steps to the left (each step means "multiply by two")
$a >> $b Shift right Shift the bits of $a $b steps to the right (each step means "divide by two")

* Incrementing/Decrementing Operators เครื่องหมายการเพิ่มค่าและลดค่า (Increment and Decrement Operation) เช่น ++ , --  ตัวอย่างการ เพิ่มค่า และลดค่าใน PHP

 

Example Name Effect
++$a Pre-increment Increments $a by one, then returns $a.
$a++ Post-increment Returns $a, then increments $a by one.
--$a Pre-decrement Decrements $a by one, then returns $a.
$a-- Post-decrement Returns $a, then decrements $a by one.

* Logical Operators เครื่องหมายในทางตรรกะ (Logical Operators) ตัวกระทำประเภทนี้มีแค่ สองค่า คือ จริง กับเท็จ เมื่อเกิดการกระทำ ผลลัพธ์ ที่ได้ ก็จะเป็น จริง และเท็จเสมอ ครับ ผมว่าสำหรับผมที่ผูกพัน และต้องเขียนโปรแกรมบ่อยๆ Logical นั้น ต้องดีพอสมควร ตรรกะได้ อัลกอริทึมต่างๆ ก็ได้ ความแตกต่างของคนเขียนโปรแกรม ตามนี้ล่ะครับ ครั้งหนึ่งผมเคยสงสัยว่า นักศึกษา 50 คนทำไม ส่งงานโปรแกรม แค่ประมาณ 5 คน ที่แตกต่างกันในส่วนอัลกอริทึม การคิดคำนวณผลทางตรรกะ นั้นเอง ขึ้นตอนของโครงสร้างที่นำมาคำนวณ ไม่เหมือนกัน 5 คน ที่เหลือคือคนที่ คัดลอกไป แล้วไป ดัดแปลงตัวแปร ดัดแปลงเงื่อนไข สรุปแล้ว ขั้นตอนต่างๆ เหมือนเดิม ตรรกะ ในผลลัพธ์ ยังเหมือนเดิม 5 คนทำ อาจจะถูกต้อง ประมาณ 2 คน ไม่มีบัก ไม่มี error ระหว่างโปรแกรมทำงาน ประมาณนั้นครับ เอาล่ะ วันนี้ คุยไว้เท่านี้ก่อนล่ะครับ ไว้ว่างๆ มา update อีกนะครับผม ...ไปล่ะ  

# Control Structures ยังไม่พูดถึง
# Functions ยังไม่พูดถึง

# Classes and Objects ยังไม่พูดถึง

***เขียนโปรแกรมวันละนิด จิตแจ่มใส่***555

ข้อมูลอ้างอิง PHP Munaul,วิกิพีเดีย , http://www.vcharkarn.com/, http://www.lks.ac.th/

 

 

0
No votes yet
Your rating: None