เทคนิคพื้นฐานในการเขียนโปรแกรม Visual Basic
Friday, September 7, 2012
0
comments
เทคนิคที่ 1 ใช้ Option Explicit อยู่เสมอ
การใช้ Option Explicit อยู่เสมอ
จะช่วยป้องกันการพิมพ์ชื่อตัวแปร หรือ ค่าคงที่ผิดพลาด อันจะช่วยในการกำจัด
Bug บางตัวที่ซ่อนอยู่ในโปรแกรม และ อาจรอวันประทุ
เมื่อโปรแกรมมีขนาดใหญ่ขึ้น เช่น ถ้าเราไม่ใช้ Option Explicit
เราจะไม่ทราบว่า ตัวแปรใดมีการประกาศเอาไว้ หรือ มีข้อมูลเป็นแบบใด
ซึ่งอาจก่อให้เกิดการแปลงข้อมูลที่ผิดพลาดในอนาคต เทคนิคที่ 3 ใช้ฟังค์ชั่น Len เพื่อตรวจสอบว่าข้อความว่างเปล่าหรือไม่ ฟังค์ชั่น Len ทำงานได้เร็วกว่ามาก โดยเฉพาะอย่างยิ่งเมื่อทำงานในลูป ดังตัวอย่างต่อไปนี้ Dim sTemp As String แทนที่จะใช้ If sTemp = "" Then DoSomeThing ' Check if sTemp is empty If sTemp <> "" Then DoSomeThing ' Check if sTemp has a value เราควรใช้ If Len(sTemp) = 0 Then Do SomeThing ' Check if sTemp is empty If Len(sTemp) > 0 Then DoSomeThing ' Check if sTemp has a value. เทคนิคที่ 5 กำหนดชนิดของตัวแปรให้ชัดเจน การกำหนดชนิดของตัวแปรให้ชัดเจน เช่น เป็นตัวแปรชนิด Long หรือ Integer จะช่วยให้โปรแกรมทำงานเร็วขึ้น (ก็เพราะตัวแปลภาษา - Complier ทราบถึงชนิดของตัวแปรเรียบร้อยแล้ว ไม่จำเป็นต้องมาเสียเวลาหาอีก) และ ง่ายต่อการ Debug เพราะเราสามารถคาดเดา ได้ว่าตัวแปรนั้น สามารถรับค่าช่วงใดได้บ้าง Dim sMsg As String Dim iCounter As Integer Dim vTemp As Variant ซึ่งเราอาจประกาศตัวแปรหลายตัวเอาไว้บนบรรทัดเดียวกัน ดังนี้ Dim sMsg As String, iCounter As Integer, vTemp As Variant โดยมีข้อควรระวัง คือ ถ้าเราไม่ได้ระบุชนิดข้อมูล จะเป็นการประกาศให้เป็นชนิด Variant ดังตัวอย่างต่อไปนี้ Dim iCounter ดังนั้นตัวแปร iCounter จะกลายเป็นชนิด Variant โดยทันที เทคนิคที่ 7 จำลองคีย์แท็บ เมื่อกด Enter ปกติเมื่อเราใส่ TextBox หลายอันเข้าไปในฟอร์ม เพื่อรับข้อมูล คงไม่เป็นการสะดวกแน่ ถ้าผู้ใช้ต้องกดคีย์แท็บ เพื่อเลื่อนไปยังฟิลด์ถัดไปทุกครั้งที่คีย์ข้อมูลเสร็จ โค้ดต่อไปนี้จะเลื่อน Cursor ไปยังฟิลด์ถัดไป เมื่อผู้ใช้กดคีย์ Enter ซึ่งจะช่วยให้ใช้โปรแกรมได้ง่ายขึ้น Private Sub Form_KeyPress(KeyAscii As Integer) If KeyAscii = vbKeyReturn Then SendKeys "{TAB}" KeyAscii = 0 End If End Sub |
เทคนิคที่ 2 ใช้ NOT แทน <> เมื่อต้องการตรวจสอบความไม่เท่ากัน การใช้ฟังค์ชั่น NOT จะทำงานได้เร็วกว่า <> เป็นอย่างมาก โดยเฉพาะอย่างยิ่ง เมื่อทำงานในลูป ดังตัวอย่างต่อไปนี้ Dim i As Integer แทนที่จะใช้ If i <> 5000 Then DoSomeThing เราควรใช้ If Not i = 5000 Then DoSomeThing เทคนิคที่ 4 เมื่อประกาศออปเจกต์ อย่าใช้ Dim ... As New ... แทนที่จะประกาศออปเจกต์เป็น Instance ตัวใหม่ เราควรประกาศตัวแปรเป็นชนิดออปเจกต์นั้น แล้วค่อยสร้าง Instance ขึ้นมาใหม่ ทั้งนี้เพื่อให้ทำงานได้เร็วขึ้น และ รับประกันว่าจะมีการล้างหน่วยความจำที่ใช้โดยออปเจกต์ เมื่อเราไม่ต้องการใช้มันอีกต่อไป ด้วยการกำหนดค่า Nothing ให้ ดังตัวอย่างต่อไปนี้ แทนที่จะใช้ Dim MyConnect As New Connection เราควรใช้ Dim MyConnect As Connection Set MyConnect = New Connection จากนั้นเมื่อเราใช้เสร็จแล้ว เราควรล้างหน่วยความจำ ด้วยการกำหนดค่า Nothing ให้กับตัวแปรดังนี้ Set MyConnect = Nothing เทคนิคที่ 6 ระมัดระวังในการใช้ฟังค์ชั่น String และ Variant ที่อาจให้ผลลัพธ์ต่างกัน ใน Visual Basic เราจะมีฟังค์ชั่นที่ลงท้ายด้วยเครื่องหมาย Dollar Sign "$" อยู่กลุ่มหนึ่ง คู่กับฟังค์ชั่นชื่อเดียวกันที่ไม่ได้ลงท้ายด้วย $ เช่น MID กับ MID$ Left กับ Left$ Date กับ Date$ ซึ่งฟังค์ชั่น Date นี้เป็นตัวอย่างที่ดี โดยฟังค์ชั่น Date จะส่งค่าคืนกลับเป็นชนิด Variant ในรูปแบบของ mm/dd/yy ในขณะที่ฟังค์ชั่น Date$ ส่งค่ากลับคืนเป็นชนิด String ในรูปแบบ mm/dd/yyyy ซึ่งถ้าใช้ไม่ระมัดระวัง ความแตกต่างนี้ จะก่อให้เกิด Bug ที่ต้องใช้เวลาพอสมควรในการค้นหา เทคนิคที่ 8 ระวังความแตกต่างของค่าคงที่ vbNullXXX VB มีค่าคงที่ ที่ใช้ระบุถึงค่า Null หลายตัวดังนี้ vbNull เป็นข้อมูลชนิด Long มีค่าเท่ากับ 1 vbNullChar เป็นข้อมูลชนิด String มีค่าเท่ากับ Chr$(0) ซึ่งตรงกับข้อความว่าง ในภาษา C และค่าที่ส่งกลับคืนมาจากฟังค์ชั่น DLL ส่วนใหญ่ อย่างไรก็ตาม vbNullChar จะไม่ใช่ข้อความว่างใน VB vbNullString เป็นข้อมูลชนิด String ใีค่าเท่ากับข้อความว่างใน VB ซึ่งแต่ละตัวใช้ในสถานการณ์ต่างกันดังนี้ vbNull ใช้เพื่อตรวจสอบผลลัพธ์ของฟังค์ชั่น VarType() ซึ่งหมายความว่า ไม่มีข้อมูลที่ถูกต้อง vbNullChar ใช้แทน Chr$(0) ซึ่งปกติใช้เพื่อเรียกใช้ Procedure ภายนอก vbNullString ใช้เพื่อเคลียร์ String โดย vbNullChar มีค่าไม่เท่ากับ vbNullString ดังนั้น vbNullChar = vbNullString จะได้ค่าเป็น False เสมอ |
0 comments:
Post a Comment