วันพฤหัสบดีที่ 17 กรกฎาคม พ.ศ. 2557

ภาษา JavaScript ฉบับผู้เริ่มต้น part 11

: การจัดการ errors ด้วย try/catch

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

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

- กรณีที่ 2 ลูกเอามอไซค์ไปอย่างที่แม่บอก ทว่ากลับมาพร้อมผงชูรสตราชฎา? ความผิดพลาดนี้คืออัลกอริทึมผิดพลาด หรือที่เรียกว่า logic error กล่าวคือโปรแกรมไม่พัง แต่ผลลัพธ์ไปดาวอังคาร คือไม่ถูกต้องตามที่ต้องการนั่นเอง

- กรณีที่ 3 ขณะที่ลูกขับมอไซค์อยู่นั้น ปรากฏว่าขับไปชนหมา เอ๋ง!!! รถล้มได้รับบาดเจ็บถึงขั้นต้องหามส่งอนามัยหมู่บ้าน (อุ้มหมาไปรักษา เฮ้ยไม่ใช่) ลูกชายไม่สามารถซื้อรสดีกลับมาให้แม่ได้ มิหนำซ้ำกับข้าวแม่ก็ไม่ได้ทำเพราะเป็นห่วงลูก ความผิดพลาดลักษณะนี้คือ runtime error เกิดขึ้นขณะที่โปรแกรมกำลังทำงานอยู่ อาจเป็นที่หน่วยความจำ ระบบเน็ตเวิร์คหรืออะไรก็แล้วแต่ ที่มีผลทำให้สภาพแวดล้อมของโปรแกรมเปลี่ยนไป เป็นไปได้ทั้งหมดครับ ขอยกตัวอย่างง่ายๆ เช่น ตั้งตัวแปร x เก็บค่า 10 ไว้ แล้วหารมันด้วย 10 ด้วย 8 ด้วย 6 (สมมติ) ลดลงทีละสองในแต่ละรอบ สุดท้ายหาร x ด้วย 0 ก็เกิด runtime error ขึ้นจนได้ กรณีอย่างนี้จะต้องคิดให้ดี คิดอย่างหวาดระแวงเข้าไว้

- กรณีที่ 4 แม่บอกลูกว่าซื้อรสดีให้หน่อยสิจ๊ะลูกจ๋า ลูกบอกไม่! แล้วก็นั่งเล่นเกมคอมพิวเตอร์ต่อไป หรือทำอะไรก็แล้วแต่ที่เป็นการขัดขวางความตั้งใจของแม่ที่ต้องการให้ลูกไปซื้อรสดีให้ในเชิงของโครงสร้าง ความผิดพลาดลักษณะนี้มักตรวจเจอตั้งแต่สั่ง compile หรือรันโปรแกรม เขาเรียกกันว่าไวยากรณ์ผิดพลาดหรือก็คือ syntax error นั่นแหละจ้า

>> ภาษาจาวาสคริปต์มี error อยู่สามประเภทหลักๆคือ
1) Syntax Error
2) Runtime Error
3) Logic Error
และต้องเข้าใจร่วมกันว่า จาวาสคริปต์นี้ไม่ครอบคลุมความผิดพลาดที่เกิดจากการเขียน syntax ผิดนะครับ (ไวยากรณ์เล็กๆน้อยๆ ถึงผิดมันก็ยอมให้ผ่านและทำงานได้) ควรระมัดระวังนิดนึง~

>> เราจะใช้คำสั่ง try/catch ห่อและรายงานความผิดพลาดที่เกิดขึ้น โดยเขียนโค้ดตามปกติในบล็อกของ try เมื่อเกิด error ขึ้น บล็อกของ catch จะถูกรันโดยอัตโนมัติ เรียกลักษณะเช่นนี้ว่าการจัดการความผิดพลาดด้วย try/catch

โครงสร้างของ try/catch คือ

try {
...
} catch ( ex ) {
...
}

ตัวอย่างเช่น

var x = 10, y = 20;
try {
var sum = x + y + z;
} catch ( ex ) {
alert ( ex.name );
alert ( ex.message );
}

คำตอบของ ex.name คือ ReferenceError คำตอบของ ex.message คือ z is not defined หรือจะเขียนการรายงานความผิดพลาดสั้นๆเพียง

alert ( ex );

ก็จะได้ผลลัพธ์เป็น ReferenceError: z is not defined หมายความว่าตัวแปร z ไม่ถูกประกาศแล้วจะอ้างอิงได้อย่างไร ประมาณนี้ครับ

>> ใน part ต่อไปเราจะคุยกันเรื่องของ Arrays มันคืออะไร ประกาศอย่างไร ใช้อย่างไร เราจะแหกแหวกมันออกมาชม ให้ขมขื่นน้ำตาไหลรินกันเลยทีเดียวเทียว อิอิอิ

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

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