VB.NET(ระดับฝึกหัด) Compile Options (ตอนที่ 4)(Option Infer)
แล้วก็มาถึง ตอนสุดท้ายในหัวข้อ Compile Options กับเจ้า Option Infer จะว่ามันเก่งมันก็เก่งนะ หรือบางคนจะว่ามัน กาก มันก็กากเหมือนกัน มันเก่งมันกากยังไงมาดูกัน
เจ้า Option Infer มีหน้าที่ในการช่วยผู้เขียนโปรแกรม กำหนดชนิดของตัวแปร โดยที่ผู้เขียนเองไม่ต้องกำหนดเองก็ได้
อ่านดูแล้วอาจจะงงๆ อยู่ ยกตัวอย่างเลยดีกว่า ปกติแล้วหากเป็นผู้เขียนโปรแกรมที่เพิ่งจะเริ่มต้นเขียนจะคุ้นเคยกับการประกาศตัวแปรแบบนี้
Dim MyInt As Integer
บางท่านอาจจะไม่ทราบด้วยซ้ำว่าประกาศแบบนี้ก็ได้
Dim MyInt
ปัญหามันอยู่ตรงนี้แหละครับ และเจ้า Option Infer จะแสดงความสามารถขั้นสุดยอดได้ก็ตรงนี้เหมือนกัน คือในกรณีที่เราไม่ได้มีการกำหนด Option Infer On ไว้ ตัวแปร MyInt จะมีชนิดของข้อมูลเป็น Object แม้ท่านจะแทนค่าอะไรลงไปก็แล้วแต่ ตัวแปร MyInt ก็ยังเป็น Object อยู่ดี แต่ถ้าเรากำหนด Option Infer On ไว้ ชนิดของตัวแปร MyInt จะขึ้นอยู่กับค่าที่เราแทนค่าให้ตอนเริ่มต้น และนี้ก็เป็นจุดเริ่มต้นของความกากของมันเช่นเดียวกันไปดูตัวอย่างกัน
Dim MyInt = 2
อย่างที่กล่าวไว้หากไม่มีการกำหนด Option Infer On ไว้ จะทำยังไง MyInt ก็เป็น Object อยู่ดี
แต่ถ้ากำหนด Option Infer On ไว้ MyInt จะกลายเป็น Integer ทันที
หรือหากกำหนด Dim MyInt = ?ทดสอบ?
อย่างที่กล่าวไว้หากไม่มีการกำหนด Option Infer On ไว้ จะทำยังไง MyInt ก็เป็น Object อยู่ดี
แต่ถ้ากำหนด Option Infer On ไว้ MyInt จะกลายเป็น String ทันทีเหมือนกัน
ดังนั้น MyInt จะเป็นตัวแปรชนิดใดจะขึ้นอยู่กับค่าเริ่มต้นที่เรากำหนดไว้ตอนเริ่มต้น มาดูกันต่อว่ามันกากยังไงมาดูตัวอย่างกัน
Dim MyInt
MyInt = 2
ถึงแม้ว่าเราจะกำหนด Option Infer On ไว้แต่โปรแกรมกับเห็นว่า MyInt เป็น Object เพราะมันสนใจแค่ค่าเริ่มต้น ทั้งๆที่ จขกท คิดว่ามันน่าจะเก่งพอที่จะรู้ว่ามันเป็น Integer นี้คือความกากลำดับที่ 1 ไปดูความกาก ลำดับที่ 2
Dim MyInt = 2
MyInt = 1.1
การเขียน Code รูปแบบนี้ หากเรามีการเรียกใช้งานตัวแปร MyInt ค่าที่ส่งกลับมาแทนที่ จะเป็น 1.1 แต่มันกลับกลายเป็น 1 เนื่องจาก Code ถูกกำหนดไปแล้วว่าเป็น Integer ทั้งๆที่ จขกท คิดว่ามันน่าจะเก่งพอที่จะรู้ว่ามันแปลงเป็น Double แล้ว
อ่านมาตั้งนานผู้อ่านหลายท่านคงจะงงว่าเป็น Object แล้วไงอ่ะแทนค่าได้เหมือนกัน อันนี้ จขกท ต้องออกตัวก่อนเพราะไม่ค่อยมั้นใจตัวเลขอาจจะคลาดเคลื่อนไปบ้าง เนื่องจากทุกครั้งที่มีการกำหนด ตัวแปรออกมาตัวแปรทุกตัวจะกินทรัพยากรของระบบขนาดตามชนิดของตัวแปรเอง อย่าง Integer เองจะกินหน่วยความจำ 2 ไบต์ ส่วน Object นั้นน่าจะกินหน่วยความจำถึง 16 ไบต์ (อันนี้ จขกท ไม่แน่ใจ) หากเป็นโปรแกรมขนาดเล็กอาจไม่ส่งผลมากนักแต่ถ้าเป็นโปรแกรมขนาดใหญ่มาก ๆ จะมีผลแน่นอน ดังนั้นการเขียนที่ถูกต้องควรกำหนดชนิดของตัวแปรที่เหมาะสมกับข้อมูล เพื่อไม่ให้โปรแกรมกินทรัพยากรของเครื่องมากเกินความจำเป็น