วันอังคารที่ 6 กันยายน พ.ศ. 2559

หลักการแก้ปัญหา

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

ขั้นตอนการแก้ปัญหา

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



ตัวอย่าง
พิจารณาแผนผังแสดงเส้นทางระหว่างจุดเริ่มต้น A ไปยังโรงอาหารของโรงเรียนที่ จุด H ตามรูป ระหว่างจุด A และจุด H มีจุด B C D E F และ G ซึ่งเป็นอาคารเรียนเส้นที่มีลูกศรเป็นทางเชื่อมระหว่างอาคาร และตัวเลขที่กำกับอยู่บนเส้นแสดงเวลา (นาที) ที่ใช้ในการเดินทางระหว่างสองจุด ถ้านักเรียนเดินทางจากอาคาร A ไปโรงอาหารให้หาว่าเส้นทางใดใช้เวลาในการเดินทางน้อยที่สุด และใช้เวลากี่นาที

Picture

- ขั้นตอนการแก้ปัญหา 4 ขั้นตอน

Picture

ขั้นตอนการแก้ปัญหานำเสนอโดย "จอร์จ โพลยา" นักคณิตศาสตร์ ตั้งแต่ พ.ศ. 2488 และยังคงนำมาใช้ต่อจนถึงปัจจุบัน


1. การวิเคราะห์และกำหนดรายละเอียดของปัญหา
    1.1 สิ่งที่ต้องการคืออะไร
    1.2 ข้อมูลที่กำหนดให้คืออะไรบ้าง
พิจารณาข้อมูลและเงื่อนไขที่กำหนดให้เพียงพอที่จะหาคำตอบของปัญหาหรือไม่ ถ้าไม่เพียงพอควรหาข้อมูลเพิ่มเติม

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

3. การดำเนินการแก้ไขปัญหา
  เมื่อวางแผนในขั้นตอนที่ 2 แล้ว จึงดำเนินการเพื่อแก้ปัญหา

4. การตรวจสอบและปรับปรุง
  เมื่อดำเนินการตามขั้นที่ 3 แล้ว จึงนำผลมาตรวจสอบว่าแก้ปัญหาได้หรือไ่ม่ ถ้าแก้ได้ถือว่าสำเร็จ แต่ถ้าแก้ไม่ได้ จะต้องมีวิธีปรับปรุงให้ดีขึ้น

การถ่ายทอดความคิดในการแก้ปัญหา

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

        รหัสลำลองหรือ pseudocode เป็นคำบรรยายที่เขียนแสดงขั้นตอนวิธี(algorithm) ของการเขียนโปรแกรม โดยใช้ภาษาที่กะทัดรัด สื่อสารกับโปรแกรมเมอร์ผู้เขียนโปรแกรม โดยอาจใช้ภาษาที่ใช้ทั่วไปและอาจมีภาษาที่ใช้ในการเขียนโปรแกรมประกอบ แต่ไม่มีมาตรฐานแน่นอนในการเขียน pseudocode  และไม่สามารถนำไปทำงานบนคอมพิวเตอร์โดยตรง(เพราะไม่ใช่คำสั่งในภาษาคอมพิวเตอร์) และไม่ขึ้นกับภาษาคอมพิวเตอร์ภาษาใดภาษาหนึ่ง นิยมใช้ pseudocode แสดง algorithm มากกว่าใช้ผังงาน เพราะผังงานอาจไม่แสดงรายละเอียดมากนักและใช้สัญลักษณ์ซึ่งทำให้ไม่สะดวกในการเขียน เช่นโปรแกรมใหญ่ ๆ มักจะประกอบด้วยคำสั่งต่างๆที่ใกล้เคียงกับภาษาคอมพิวเตอร์ที่ใช้ในการเขียนโปรแกรมจริงๆ เช่น begin…end, if…else, do…while, while, for, read และ print การเขียนรหัสจำลองจะต้องมีการวางแผนสำหรับการอ้างอิงถึงข้อมูลต่างๆที่จะใช้ในโปรแกรมด้วยการสร้างตัวแปร โดยใช้เครื่องหมายเท่ากับ (=) แทนการกำหนดค่าให้กำหนดตัวแปรนั้น

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

        ประเภทของผังงาน
1. ผังงานระบบ (system flowchart) เป็นผังซึ่งแสดงขอบเขต และลำดับขั้นตอนการทำงานของระบบหนึ่ง ๆ
2. ผังงานโปรแกรม (Program flowchart) เป็นผังงานซึ่งแสดงลำดับขั้นตอนการทำงานของโปรแกรมหนึ่ง ๆ
  การใช้สัญลักษณ์
จะใช้สัญลักษณ์ที่เป็นรูปภาพแทนคำสั่งการทำงานโดยจะไม่ใช้คำอธิบายลักษณะการทำงาน มีลูกศรแสดงทิศทางการไหลของข้อมูลตั้งแต่เริ่มต้นไปสิ้นสุดโปรแกรม

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


การกำหนดค่าให้ตัวแปร



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

สัญกรณ์[แก้]

ตัวแทนการนำเสนอแบบข้อความโดยสามัญของการกำหนดค่ามักจะใช้เครื่องหมายเท่ากับ "=" และ ":=" รูปแบบทั้งสองนี้เป็นรูปแบบปกติของภาษาโปรแกรมหลายภาษา (เช่นภาษาซี) ซึ่งจัดจำแนกการกำหนดค่าว่าเป็นตัวดำเนินการเติมกลาง
ตัวแปร = นิพจน์ภาษาเบสิกภาษาฟอร์แทรนภาษาซีภาษาจาวาภาษาพีแอล/วันวินโดวส์ เพาเวอร์เชลล์บอร์นเชลล์, ฯลฯ
ตัวแปร := นิพจน์ภาษาอัลกอลภาษาปาสกาล[1]ภาษาเอดาภาษาดิลัน[2]ภาษาไอเฟล[3][4], ฯลฯ
ความเป็นไปได้อย่างอื่นคือเพิ่มลูกศรชี้ข้างซ้ายหรือคำหลักเข้าไป หรือแม้แต่รูปแบบต่างที่สามารถใช้ได้ซึ่งพบเห็นได้น้อยกว่า
ตัวแปร << นิพจน์ภาษาแมจิก
ตัวแปร <- นิพจน์ภาษาอ็อบเจกทีฟแคมัลภาษาเอสภาษาอาร์, ฯลฯ
ตัวแปร ← นิพจน์ภาษาเอพีแอล[5]
ตัวแปร =: นิพจน์ภาษาเจ
LET ตัวแปร = นิพจน์ภาษาเบสิก
set ตัวแปร to นิพจน์แอปเปิลสคริปต์
set ตัวแปร = นิพจน์ซีเชลล์
Set-Variable ตัวแปร (นิพจน์)วินโดวส์ เพาเวอร์เชลล์
val ตัวแปร = นิพจน์ภาษาเอ็มแอล[6]
ตัวแปร : นิพจน์แมกซิมา
บางแพลตฟอร์มก็วางนิพจน์ไว้ทางซ้ายและวางตัวแปรไว้ทางขวา
MOVE นิพจน์ TO ตัวแปรภาษาโคบอล
นิพจน์ → ตัวแปรภาษาทีไอ-เบสิก, ภาษาเบสิกคาสิโอ (เครื่องคิดเลข)
นิพจน์ -> ตัวแปรภาษาอาร์
ในภาษาโปรแกรมเชิงนิพจน์บางภาษา อย่างเช่นภาษาลิสป์ [7][8] และภาษาทีซีแอล ใช้วากยสัมพันธ์แบบเติมหน้าเพียงอย่างเดียวสำหรับทุกข้อความสั่ง ซึ่งรวมทั้งการกำหนดค่าด้วย
(setq ตัวแปร นิพจน์)ภาษาลิสป์ภาษาสกีม[9][10][11] (set!), ฯลฯ
set ตัวแปร นิพจน์ภาษาทีซีแอล

การดำเนินการ[แก้]

การดำเนินการกำหนดค่าตามความหมายแล้วเป็นการเปลี่ยนแปลงสถานะปัจจุบันของโปรแกรมที่กำลังทำงานอยู่ ดังนั้นการกำหนดค่าจึงขึ้นอยู่กับแนวคิดของตัวแปร ในการกำหนดค่าหนึ่ง ๆ นิพจน์ จะถูกประเมินค่าในสถานะปัจจุบันของโปรแกรม และ ตัวแปรจะถูกกำหนดด้วยค่าที่ประเมินนั้น แทนที่ค่าที่มีอยู่ก่อนหน้าในตัวแปร ตัวอย่างเช่น สมมติให้ a เป็นตัวแปรเชิงตัวเลข การกำหนดค่าa := 2*a หมายถึงการทำให้ข้อมูลของตัวแปร a เพิ่มค่าเป็นสองเท่าหลังจากทำงานข้อความสั่งนี้แล้ว
ต่อไปนี้คือตัวอย่างส่วนหนึ่งของภาษาซี
int x = 10;
float y;
x = 23;
y = 32.4;
จากตัวอย่างนี้ ตัวแปร x ประกาศไว้ว่าเป็นจำนวนเต็ม (int) เมื่อเริ่มแรก จากนั้นจึงกำหนดค่าเป็น 10 สังเกตว่าการประกาศและการกำหนดค่าเกิดขึ้นในข้อความสั่งเดียวกัน บรรทัดที่สอง ตัวแปร y ประกาศเป็นจำนวนจุดลอยตัว (float) โดยไม่กำหนดค่า บรรทัดถัดไป x ถูกกำหนดค่าใหม่ให้เป็น 23 และท้ายสุด y ถูกกำหนดให้มีค่าเท่ากับ 32.4
ในการดำเนินการกำหนดค่านั้น สิ่งสำคัญคือค่าของ นิพจน์ จะต้องนิยามไว้แล้วเป็นอย่างดี (เป็น rvalue ที่ถูกต้อง) และ ตัวแปรจะต้องแทนด้วยเอนทิตีที่สามารถแก้ไขได้ (เป็น lvalue ที่เปลี่ยนแปลงได้ คือไม่เป็นค่าคงตัว) ในบางภาษาอย่างเช่นภาษาเพิร์ล ไม่จำเป็นต้องประกาศตัวแปรก่อนกำหนดค่าก็ได้

การกำหนดค่าแบบขนาน[แก้]

ภาษาโปรแกรมบางภาษาเช่น ภาษาอ็อกแคม 2[12] ภาษาไพทอน[13] ภาษาเพิร์ล[14] ภาษาเรบัล ภาษารูบี[15] วินโดวส์ เพาเวอร์เชลล์ และจาวาสคริปต์ (ตั้งแต่รุ่น 1.7) อนุญาตให้กำหนดค่าตัวแปรหลายตัวแบบขนานได้ (parallel assignment) ด้วยวากยสัมพันธ์คล้ายดังนี้
a,b := 0,1
คำสั่งนี้กำหนดค่า 0 ลงใน a และค่า 1 ลงใน b ในเวลาเดียวกัน ถ้าฝั่งขวามือของการกำหนดค่าเป็นตัวแปรแถวลำดับ คุณลักษณะดังนี้อาจเรียกว่า การขยายลำดับออก (sequence unpacking)
var list := 0,1
a,b := list
รายการแถวลำดับจะถูกขยายออก ทำให้กำหนดค่า 0 ลงใน a และค่า 1 ลงใน b ได้เช่นกัน รหัสต่อไปนี้เป็นตัวอย่างที่น่าสนใจ
a,b := b,a
ข้อความสั่งดังกล่าวจะสลับค่าของ a กับ b ส่วนภาษาที่ไม่มีการกำหนดค่าแบบขนาน การสลับค่าอาจต้องเขียนโดยใช้ตัวแปรชั่วคราว t ดังนี้
var t := a
a := b
b := t
เนื่องจากข้อความสั่ง a:=b ; b:=a จะส่งผลให้ตัวแปรทั้งสองมีค่าเดียวกันคือค่าเริ่มต้นของ b
การกำหนดค่าแบบขนานเริ่มแนะนำในภาษาซีพีแอลเมื่อ พ.ศ. 2506 (ค.ศ. 1963) ในชื่อ การกำหนดค่าพร้อมกัน(simultaneous assignment) [16]

ค่าของการกำหนดค่า[แก้]

ในภาษาโปรแกรมเชิงนิพจน์ส่วนใหญ่ ข้อความสั่งกำหนดค่าจะคืนค่าเป็นค่าที่ถูกกำหนดนั้น ซึ่งทำให้ข้อความสั่งเช่น x = y = a ค่าของ a จะถูกกำหนดให้กับทั้ง x และ y หรืออย่างเช่น while (f = read()) {…} ค่าที่คืนจากฟังก์ชันจะเป็นตัวควบคุมการวนรอบ ในเวลาเดียวกันก็กำหนดค่าที่เหมือนกันให้กับตัวแปรด้วย
ส่วนภาษาโปรแกรมอื่น ค่าที่ส่งคืนจากการกำหนดค่าอาจไม่นิยาม และทำให้ข้อความสั่งเช่นนั้นใช้การไม่ได้ ยกตัวอย่างเช่นภาษาสกีม
ภาษาไพทอนถือว่าการกำหนดค่าไม่ใช่นิพจน์ ดังนั้นมันจึงไม่มีค่าใด ๆ ส่งคืนกลับมา
ในภาษาแฮสเกลล์ [17] ไม่มีการกำหนดค่าให้กับตัวแปร แต่การดำเนินการที่คล้ายกับการกำหนดค่า (เหมือนการกำหนดค่าไปยังเขตข้อมูลของแถวลำดับ หรือเขตข้อมูลของโครงสร้างข้อมูลเปลี่ยนแปลงได้) คือการประเมินค่าเป็นยูนิต ซึ่งเป็นชนิดข้อมูลทั่วไปของนิพจน์ที่ถูกประเมินค่าเพื่อให้เกิดผลข้างเคียงโดยเฉพาะ

การกำหนดค่าปกติกับการกำหนดค่าเชิงเดี่ยว[แก้]

ดูบทความหลักที่: การกำหนดค่าเชิงเดี่ยว
ในการเขียนโปรแกรมเชิงฟังก์ชัน การกำหนดค่าจะลดความสำคัญลงเพื่อประโยชน์ในการกำหนดค่าเชิงเดี่ยว (single assignment) หรืออาจเรียกว่า การยึดเหนี่ยวกับชื่อ หรือ การกำหนดค่าเริ่มต้น การกำหนดค่าเชิงเดี่ยวต่างจากการกำหนดค่าปกติตรงที่สามารถกำหนดค่าได้เพียงครั้งเดียวเท่านั้น โดยเฉพาะเมื่อตัวแปรถูกสร้างขึ้น นั่นคือไม่สามารถกำหนดค่าใหม่ภายหลัง ค่าที่ถูกตั้งชื่อโดยการกำหนดค่าเชิงเดี่ยวจะไม่ถือว่าเป็นตัวแปร แต่จะเป็นวัตถุเปลี่ยนแปลงไม่ได้
การกำหนดค่าเชิงเดี่ยวเป็นรูปแบบเพียงอย่างเดียวที่มีอยู่สำหรับภาษาโปรแกรมเชิงฟังก์ชันอย่างแท้จริง (purely funtional) เช่นภาษาแฮสเกลล์ ซึ่งไม่มีตัวแปรอย่างภาษาโปรแกรมเชิงคำสั่งอื่น ๆ ภาษาโปรแกรมเชิงฟังก์ชันที่ไม่แท้จริงก็อาจมีทั้งการกำหนดค่าเชิงเดี่ยวและการกำหนดค่าปกติ (แม้ว่าการกำหนดค่าปกติมีที่ใช้น้อยกว่าในภาษาโปรแกรมเชิงคำสั่ง) ตัวอย่างเช่น ในภาษาสกีม การกำหนดค่าเชิงเดี่ยวและการกำหนดค่าปกติสามารถใช้ได้กับตัวแปรทุกตัว หรือในภาษาอ็อบเจกทีฟแคมัล การกำหนดค่าเชิงเดี่ยวใช้กับตัวแปรโดยใช้รูปแบบ let ชื่อ = ค่า ส่วนการกำหนดค่าปกติซึ่งใช้ตัวดำเนินการ <- ใช้กับสมาชิกของแถวลำดับและสายอักขระ เช่นเดียวกับเขตข้อมูลของระเบียนและวัตถุที่ถูกประกาศอย่างชัดเจนว่าให้สามารถเปลี่ยนแปลงได้ (หมายความว่าขนาดความจุของมันสามารถเปลี่ยนแปลงได้หลังจากการประกาศตอนเริ่มต้น)

การกำหนดค่าและภาวะเท่ากัน[แก้]

โปรแกรมเมอร์ระดับเริ่มต้นเกิดความสับสนบ่อยครั้งระหว่างการกำหนดค่ากับตัวดำเนินการสัมพันธ์ของภาวะเท่ากัน เนื่องจาก = หมายถึงภาวะเท่ากันในทางคณิตศาสตร์ และถูกใช้เป็นตัวดำเนินการกำหนดค่าในหลายภาษา แต่การกำหนดค่าคือการเปลี่ยนแปลงค่าของตัวแปร ในขณะที่การทดสอบภาวะเท่ากันจะตรวจสอบนิพจน์สองนิพจน์ว่ามีค่าเหมือนกันหรือไม่
หลายภาษาใช้สัญกรณ์ที่แตกต่างกันสำหรับการดำเนินการแต่ละชนิด ตัวอย่างเช่น ตัวดำเนินการกำหนดค่าใช้เครื่องหมายเท่ากับตัวเดียว = ในขณะที่ตัวดำเนินการเทียบเท่าใช้เครื่องหมายเท่ากับสองตัว == ในภาษาซี แต่ในบางภาษาเช่นภาษาเบสิก เครื่องหมายเท่ากับตัวเดียวใช้แทนการดำเนินการทั้งสอง ซึ่งความหมายของมันจะพิจารณาจากบริบท
ความสับสนเช่นนี้อาจนำไปสู่ความผิดพลาด หากโปรแกรมเมอร์หลงลืมว่ารูปแบบใดถูกต้องเหมาะสม (=, ==, :=) หรือลงรหัสผิดพลาด (เช่นพิมพ์ = แทนที่ตั้งใจให้เป็น ==) เป็นปัญหาปกติสามัญของการเขียนโปรแกรม อาทิในภาษาซี ตัวดำเนินการกำหนดค่าจะคืนค่าเป็นค่าที่กำหนดไปนั้น และสามารถใช้ซ้อนภายในนิพจน์ได้ (แบบเดียวกับฟังก์ชันที่คืนค่าออกมา) ถ้าความตั้งใจคือการเปรียบเทียบค่าสองค่าในเงื่อนไข if การกำหนดค่าในเงื่อนไขอาจถูกตีความหมายว่าเป็นค่า TRUE ซึ่งจะทำให้ข้อความสั่งตามเงื่อนไขทำงาน นำไปสู่พฤติกรรมของโปรแกรมที่ไม่คาดหวัง ตัวประมวลผลของบางภาษาสามารถตรวจจับสถานการณ์เช่นนั้น และแจ้งเตือนโปรแกรมเมอร์เกี่ยวกับความผิดพลาดที่อาจเกิดขึ้นได้

ไม่มีความคิดเห็น:

แสดงความคิดเห็น