2011/08/27

Object Pascal - ตัวแปรและตัวดำเนินการ

สวัสดีเพื่อน ๆ พี่ ๆ น้อง ๆ ทุกคนครับ
เมื่อวานผมไม่ได้มาเขียนเพิ่ม หวังว่าจะยังไม่ลืมนะครับ ;)

   วันนี้ผมจะมาทบทวนเรื่องตัวแปรสักหน่อย เรื่องนี้เป็นพื้นฐานที่สำคัญมาก ๆ รวมถึงการดำเนินการกับตัวแปรด้วย

   ยังจำกันได้ไหมครับว่ากฎการตั้งชื่อตัวแปรมีอะไรบ้าง ถ้าจำไม่ได้ให้กลับไปอ่านะครับ :)
ผมจะมาเพิ่มกฎพิเศษอีกข้อนึง แต่คงเรียกว่ากฎพิเศษไม่ได้หรอก เพราะมันไม่เหมือนกับกฎการตั้งชื่อตัวแปรในภาษาอื่น
   นั้นก็คือ การตั้งชื่อตัวแปรที่ซ้ำกับคำสงวน เราสามารถใช้อักขระพิเศษ & นำหน้าได้ ไม่ใช่แค่ใช้กับชื่อที่ซ้ำกับคำสงวนเท่านั้น ยังใช้กับชื่อตัวแปรธรรมดาได้อีกด้วย ไม่ใช่แค่ใช้กับ Delphi ได้นะครับ ยังใช้กับ Free Pascal (Lazarus) ได้อีกด้วย เพราะว่าภาษา Object Pascal จะถือว่าตัวพิมพ์เล็ก และตัวพิมพ์ใหญ่เป็นตัวเดียวกัน การที่จะตั้งชื่อตัวแปรให้ไม่ซ้ำกันคงจะยาก
    เช่นในภาษา C ถ้าจะใช้ตัวแปรเก็บค่าที่เหมือนกัน 2 ค่า บางคนอาจจะประกาศชื่อเป็น a, A ซึ่งถือเป็นคนละตัวกันในภาษา C แต่ใน Object Pascal จะถือเป็นตัวแปรตัวเดียวกัน

ผมขอเอาตารางคำสงวนจาก help ของ Delphi XE มาให้ดูนะครับ

(ms-help://embarcadero.rs_xe/rad/Fundamental_Syntactic_Elements.html)

   ลองใช้ & มาสร้างตัวแปรที่ใช้ชื่อในคำสงวนพวกนั้นดูครับ ;)



มาดูเรื่องการดำเนินการ (Expression) กันดีกว่าครับ
    ลองดูรูปแบบการดำเนินการแบบต่าง ๆ ดูกัน ~

X - ตัวแปร
@X - ค่าตำแหน่งในหน่วยความจำของตัวแปร X
10 - ค่าคงที่ตัวเลข
Write(X) - เรียกฟังก์ชัน
X * Y - X คูณ Y
X / (X - 1) - เอา X - 1 มาหาร X พูดแบบนี้อาจจะงง เปลี่ยนใหม่เป็น หาร X ด้วย X - 1 ดีกว่า
X := 5 - การกำหนดค่า
X = 5 - ตรวจสอบว่า X = 5
อย่างสับสนเครื่องหมาย := กับ = นะครับ
:= คือการนำค่าทางขวาไปกำหนดให้ตัวแปรทางซ้าย ส่วน = คือการตรวจสอบว่า ค่าทั้งสองค่า เท่ากันหรือไม่
X in SetA - ตรวจสอบว่า X อยู่ใน เซ็ต ที่ชื่อ SetA หรือไม่
not B - ค่าตรงข้ามทางตรรกศาสตร์ของตัวแปร B
หมายถึง
  not True = False (ไม่จริง = เท็จ)
  not False = True (ไม่เท็จ = จริง)
['a', 'b', 'c'] - เซ็ต
Char(50) - การเปลี่ยนชนิด

เรื่องที่เขียนมาเมื่อกี้อาจจะงง ๆ ไม่ต้องไปสนใจครับ เดี๋ยวได้ใช้แล้วจะเข้าใจเอง :)

ลองมาดูตัวดำเนินการกันดีกว่าครับ

Arithmetic Operators (ตัวดำเนินการทางคณิตศาสตร์)
คิดว่าคงไม่ต้องบอกมากนะครับ ว่าแต่ละเครื่องหมาย หมายถึงอะไร
+ - * / div mod
ขอบอกแค่ 2 ตัวนะครับ คือ div กับ mod
   div คือการหาร แล้วตัดเศษทิ้ง ตัดทิ้งนะครับ ไม่ปัดขึ้น ค่าที่ได้จะเป็นจำนวนจริง
เช่น
3 div 2 = 1
10 div 3 = 2
   mod คือการหารเอาเศษ หรือก็คือ x mod y = x - (x div y) * y
เช่น
3 mod 2 = 1
10 mod 3 = 1
10 mod 4 = 2
ควรระวังเวลาใช้ x / y , x div y , x mod y เมื่อ y = 0 จะทำให้เกิด Runtime Error

Boolean Operators (ตัวดำเนินการทางตรรกศาสตร์)
not (negation)
and (conjunction)
or (disjunction)
xor (exclusive disjunction)
สามารถอ่านเพิ่มเติมได้ในหนังสือคณิต ม. 4 นะครับ

Relational Operators
=     เท่ากับ
<>   ไม่เท่ากับ
<     น้อยกว่า
>     มากกว่า
<=   น้อยกว่าหรือเท่ากับ
>=   มากกว่าหรือเท่ากับ

ที่ยกมาเป็นแค่บางส่วนที่สำคัญ ยังมีตัวดำเนินการอีกแต่อาจจะยังไม่จำเป็นต้องใช้ตอนนี้เลยขอไม่กล่าวถึง


ลำดับความสำคัญของตัวดำเนินการ
  การดำเนินการจะเรียงลำดับความสำคัญไว้ตามนี้ครับ

(ms-help://embarcadero.rs_xe/rad/Expressions_(Delphi).html)

ตัวอย่างเช่น 1 + 3 * 2 จะบวก หรือคูณก่อน ?
  คำตอบคือ 1 + 3 * 2 = 1 + (3 * 2) = 1 + 6 = 7
ซึ่งก็คือ คูณมีลำดับความสำคัญก่อนบวก
สำหรับตัวดำเนินการที่มีความสำคัญเท่ากัน เช่น * / div mod จะทำจากซ้ายไปขวา เช่น
  3 * 2 / 6 * 5 mod 2 ซึงก็คือ ((3 * 2) / 6) * 5 = (6 / 6) * 5 = 1 * 5 = 5

วันนี้ขอจบลงเท่านี้นะครับ ยังไม่มีการบ้านเช่นเคย แต่ขอให้ไปฝึกใช้เครื่องหมายกันดูนะครับ
สวัสดีครับผม ^-^




No comments:

Post a Comment