เก่งโค้ดงาน Business Intelligence ตอนที่ 5

เก่งโค้ดงาน Business Intelligence ตอนที่ 5
คุณสมบัติการปิด
ฟังก์ชันกับสภาพแวดล้อม
การประกาศแบบลดรูป
บรรทัด 3 คือการเขียนลดรูปของโค้ดบรรทัดที่ 4 ซึ่งมีการทำงานเหมือนกันทุกประการ และบรรทัด 6 คือการเขียนลดรูปของ 7 และ 9 คือการลดรูปของ 10
การส่งเออเรอร์
บรรทัดที่ 10 คือใช้วิธีสร้างเรคคอร์ดด้วยฟังก์ชัน Error.Record ที่เขียนเขียนเต็มรูปแบบจะเป็นอย่างบรรทัด 12-17 เมื่อส่งเออเรอร์แล้วการทำงานจะหยุดที่นิพจน์นั้น
การจัดการกับเออเรอร์
บรรทัดที่ 4-11 จะเห็นว่ามีนิพจน์ต่าง ๆ อยู่สี่แบบให้เลือกใช้งาน ยกตัวอย่างวิธีใช้งานคือถ้าการทำงานของนิพจน์ไม่มีเออเรอร์และได้ค่าเป็น x หากเกิดเออเรอร์จะได้เรคคอรด์หน้าตาอย่างที่เห็นในบรรทัดที่ 16 หรือถ้าการทำงานของนิพจน์ทำให้เกิดเออเรอร์ e ผลลัพธ์ของนิพจน์ y การเออเรอร์จะได้เป็นเรคคอร์อย่างที่เห็นในบรรทัดที่ 17
บรรทัด 4-8 แสดงตัวอย่างนิพจน์จัดการเออเรอร์ในกรณีที่ไม่เกิดเออเรอร์
บรรทัด 10-14 คือกรณีที่เกิดเออเรอร์ เราสามารถใช้คำสั่ง otherwise เพื่อแทนที่การดักเออเรอร์ให้ไปทำงานนิพนจ์อื่นแทน
บรรทัด 16,17 แต่ถ้านิพจน์ของ otherwise เกิดเออร์ด้วยเหมือนกันก็จะมีผลเหมือนนิพจน์ try ทั้งก้อนเกิดเออเรอร์อย่างบรรทัดที่ 19,20
บรรทัด 4-12 ตัวกำหนดค่าเริ่มต้นให้แก่เรคคอร์ดที่มีฟิลด์ A ซึ่งมีค่าการส่งเออเรอร์และมีผู้เรียกหาสองตัวคือฟิลด์ B และ C โดยฟิลด์ B ไม่มีตัวจัดการเออเรอร์ที่ A ส่งมาแต่ฟิลด์ C มี ส่วนฟิลด์ D ไม่ได้อ้างถึง A จึงไม่มีผลต่อการส่งเออเรอร์ของ A เมื่อเรคคอร์ถูกประเมินค่าจะได้ผลลัพธ์อย่างที่เป็นในบรรทัด 14-19 เนื่องจากในภาษาเอ็มการกำหนดค่าเริ่มต้นให้แก่ฟิลด์ และการทำงานของคุณสมบัติการปิด มีการทำงานเป็นแบบ “ประวิง” (lazy field initialization) ดังนั้นจึงควรให้โค้ดซึ่งทำหน้าที่จัดการเออเรอร์อยู่ใกล้ตำแหน่งที่จะเกิดเออเรอร์เอาไว้
บรรทัด 21-25 แสดงตัวอย่างการพยายามจัดการกับเออเรอร์ที่ทำได้ได้ถูกต้อง โดยเป็นการทำงานที่อาศัยนิพจน์ try
บ่อยครั้งที่ระหว่างการพัฒนาโปรแกรมเราอาจต้องการใส่ภาคส่วนของโค้ดไว้ก่อน แต่ยังไม่ต้องการใส่ตัวนิพจน์ที่เป็นไส้ในตอนนั้น ในกรณีนี้เราควรจะใส่โค้ดการทำเออเรอร์เพื่อใช้ระบุว่ายังไม่ได้ใส่โค้ดไว้
บรรทัดที่ 4-8 คือตัวอย่างโค้ดการทำเออเรอร์เพื่อใช้ระบุว่ายังไม่ได้ใส่โค้ด ภาษาเอ็มมีซินแท็กซ์ที่ช่วยให้เราสามารถเขียนย่อโค้ดนี้ลงได้
บรรทัดที่ 10 คือโค้ดที่เราสามารถใส่จุดสามจุดเขียนติดกันแทนที่ได้ นั่นคือเราจะเขียนแบบเต็มอย่างบรรทัดที่ 4-8 ก็ได้ หรือจะเขียนย่ออย่างบรรทัดที่ 13 ก็ได้ ทั้งสองแบบให้ผลลัพธ์การทำงานเหมือนกัน
การแบ่งกลุ่มโค้ด
บรรทัด 17 กระกาศฟิลด์ A โดยมีคำสั่ง shared นำหน้า มีผลให้นิพจน์ในเซคชันอื่น ๆ จะสามารถอ้างถึงสมาชิกตัวนี้ได้โดยไม่ต้องเขียนแบบ SAE
บรรทัด 20 ฟิลด์ B ซึ่งเป็นสมาชิกของเซคชัน Section2 สามารถอ้างถึง A ได้โดยไม่ต้องเขียนแบบ SAE
บรรทัด 25 ฟิลด์ C ซึ่งเป็นสมาชิกของเซคชัน Section3 ไม่สามารถอ้างถึง A ได้โดยตรง แต่ต้องเขียนแบบ SAE เพราะใน Section3 เองก็มีฟิลด์ที่ชื่อ A เป็นสมาชิกอยู่ด้วยเหมือนกัน หากไม่เขียนแบบ SAE จะเกิดความกำกวมว่าเป็นการอ้างถึง A ตัวในบรรทัดที่ 23 หรือ 17
บรรทัด 5 เซคชัน Section1 มีสมาชิกแบบแชร์ชื่อ A และบรรทัด 8 เซคชัน Section2 ก็มีสมาชิกแบบแชร์ชื่อ A ด้วย
บรรทัด 11 สมาชิก B ของเซคชัน Section3 พยายามอ้างถึงสมาชิกแบบแชร์จึงมีผลให้เกิดความกำกวมว่าเป็นการอ้างถึง A ในบรรทัดที่ 5 หรือ 8
ตัวอย่างโค้ดที่ทำงานกับตาราง
แสดงโค้ดการนับจำนวนแถวข้อมูลในตารางโดยใช้ฟังก์ชัน TableRow.Count() เมื่อคิวรีนี้ทำงานจะได้ตัวเลขจำนวนเต็มหนึ่งตัว แสดงจำนวนแถวข้อมูล โดย CountRowsInTable เป็นตารางที่มีแถวข้อมูลเพียงแถวเดียวและมีคอลัมน์อยู่เพียงคอลัมน์เดียว