ไม่ได้เขียนเกี่ยวกับ Visual Basic ซะนานเลย วันนี้เลยเอาเรื่องของ If มาเขียนบ้าง ส่วนพาดหัวยอดนิยม จะล่อเพจ #จบข่าว ไม๊นะ
บทความนี้ ไม่ใช่จะสอนใช้คำสั่ง If นะ มันก็พื้นฐานเกิ๊น แต่จะมาพูดถึงการเขียนคำสั่ง If ในรูปแบบต่าง ๆ ให้ดู พร้อมกับ Benchmark ในเรื่องของความรวดเร็วในการทำงาน ให้ดูกันจะ ๆ ว่าแบบไหนมันดีกว่ากัน เริ่มน่าสนใจกันไม๊ครับ
ก่อนอื่น… ขอให้เครดิตกับบทความเรื่อง เปรียบเทียบความเร็วในการตรวจหาตัวแปรว่าง ของเว็บพี่กรกฎ เป็นแรงบันดาลใจ ทำให้เกิดเป็นบทความนี้ขึ้นมา อันที่จริงเรื่องนี้ ผมตั้งใจจะเขียนมานานมาก เกิน 1 ปีแน่ ๆ แล้วก็ลืมทุกที แห่ะ ๆ
สมมติเงื่อนไขง่าย ๆ เลยแล้วกัน ว่า มีตัวแปรที่จะเก็บค่าได้ตั้งแต่ 1-100 แล้วมีเงื่อนไขว่า ถ้าค่าในตัวแปรมีค่า 1-50 จะ Return False
แต่ถ้าเป็น 51-100 จะ Return True
เอาง่าย ๆ แบบนี้ล่ะ คงไม่มีใครไม่เข้าใจเน๊อะ~!!
If-Else
พื้นฐานสุด ๆ เลย ก็เขียนคำสั่งโดยใช้ If-Else แบบนี้
1 2 3 4 5 6 |
Dim result As Boolean If bmInput >= 51 Then result = True Else result = False End If |
Default-If
หรือเราอาจจะกำหนด Default ด้วยการ Initial ค่าให้ตอนประกาศตัวแปร แล้วค่อย If อย่างเดียว ก็จะเป็น…
1 2 |
Dim result As Boolean = False If bmInput >= 51 Then result = True |
สั้นดีเน๊อะ ส่วนตัวชอบเขียนสไตล์นี้บ่อย ๆ
If Operator
ใน VB.NET ยังมี If Operator ให้ใช้งานด้วย ซึ่งก็จะเหมือนกับ Ternary operator ของภาษาอื่น ๆ ที่ใช้ตัว ?
และ :
นั่นเอง โดยสามารถเขียนได้แบบนี้
1 |
Dim result As Boolean = If(bmInput >= 51, True, False) |
สั้นเข้าไปอีก แบบนี้ก็ชอบเขียนเหมือนกัน
Benchmark
แล้วแบบไหนดีกว่ากันล่ะ~!!
ก็นั่นนะซิ… ผมก็เลยเขียนคำสั่งทดสอบซะเลย โดยเอา Loop ครอบซะ เพื่อวัดเวลาที่ใช้ในการทำงานออกมาเป็นหน่วย Millisecond ดังนี้…
1 2 3 4 5 6 7 8 9 |
Dim startTime As Date = Now For Each Item As Byte In randomList ' Statement Next Dim endTime As Date = Now Dim diffTime As Double = (endTime - startTime).TotalMilliseconds |
โดยที่ randomList
นั้น เป็นชนิด List(Of Byte)
ซึ่งได้ทำการ Generate ค่า Random ระหว่าง 1-100 ใส่เข้าไป
แล้วทดสอบโดยการสร้าง randomList
ขึ้นมา 100,000,000 ตัว เพื่อทดสอบคำสั่งทั้ง 3 รูปแบบ โดยทำการทดสอบทั้งหมด 10 รอบ แล้วนำไปรันบน Windows XP 32 bit กับ Windows 8.1 64 bit ได้ผลดังนี้


จะเห็นว่า การใช้คำสั่ง If Operator ใช้เวลาน้อยที่สุด ส่วน If-Else และ Default-If นั้น ให้ผลการทำงานแทบจะไม่ต่างกัน
จึงสรุปผลการ Benchmark ได้ว่า…
การใช้ If Operator ประมวลผลได้เร็วที่สุด #จบข่าว
ในตอนหน้า ผมจะ Benchmark เทียบคำสั่ง If-ElseIf-Else กับ Select-Case ให้ดู ว่าแบบไหนเร็วกว่ากัน
ส่วนใครสนใจอยากดู Code เต็ม ๆ ไปดูได้ที่ GitHub นะครับ หรืออยาก Benchmark คำสั่งอื่น ๆ ก็ Fork ไปทำได้เลยนะ อย่าลืม Pull Request มาด้วยนะครับ จะได้เอามารวบรวมไว้ที่เดียวกัน
ส่วนใครอยากลองรันโปรแกรมดูบ้าง สามารถ Download If.exe ไปรันดูได้ครับ (Require .NET Framework 3.5) แล้วอย่าลืมรายงานผลบ้างนะ…