วันพุธที่ ๔ กรกฎาคม พ.ศ. ๒๕๕๐

VB.NET VS. C#

ถ้าจะถามผมว่า ผมชอบภาษาอะไรมากที่สุด ผมก็คงจะตอบว่า Python ครับ เพราะผมเป็นพวกชอบความสะอาด มีระเบียบ(แต่ไม่ชอบมีวินัยนะครับ) และชอบศาสตร์ทางด้าน Software Engineering ซึ่งภาษา Python ก็สนับสนุนคุณสมบัติอย่างที่ผมว่ามา และยังมีคุณสมบัติอื่นๆ อีกมากมายที่น่าสนใจ แต่ผมคงพูดถึงภาษานี้โดยละเอียดอีกทีในเรื่องที่เกี่ยวกับ IronPython

แต่ถ้าจะถามใหม่ว่า ภาษาบน .NET Framework ที่ผมชอบมากที่สุด คือ ภาษาอะไร คำตอบที่แน่นอนอยู่แล้ว ก็คือ VB.NET แต่ผู้อ่านหลายท่านก็เลือก C# เป็นคำตอบ เอาเป็นว่าเรื่องที่ว่า VB.NET กับ C# ภาษาไหนดีกว่ากันนั้น ตอบยากครับ เพราะมันมีหลายปัจจัยให้พิจารณา เช่น พื้นฐานภาษาของผู้พัฒนา, ประเภทของซอฟต์แวร์ที่จะพัฒนา, ข้อจำกัดเวลาในการพัฒนา เป็นต้น ซึ่งเรื่องนี้ผมจะพยายามนำมาเสนอบ่อยๆ ตามแต่จะมีโอกาสครับ

สำหรับวันนี้ผมขอนำเสนอข้อมูล ของอาจารย์สุเทพ ที่เขียนตอบเรื่อง เปรียบเทียบ C#.net กับ vb.net ไว้ใน Software Development Discussion Board อย่างน่าสนใจ จึงขอนำข้อมูลนั้นมาเสนอไว้ให้อ่านกัน และผมจะเสริมข้อมูลเพิ่มในภายหลัง

"... เปรียบเทียบ C#.net กับ vb.net
การเลือกระหว่างภาษา C#.Net และ VB.Net มักเป็นข้อที่หลายคนคิดในช่วงวางแผนก่อนที่จะเริ่ม ลงทุนลงแรงเพื่อศึกษาและนำมาใช้ในการพัฒนาระบบขึ้นมา


ข้อเสนอแนะอย่างง่ายที่สุดของไมโครซอฟต์ ก็คือว่าเรามีความชำนาญ มีความคุ้นเคย ชอบพอกับภาษาใดมาก่อน ก็ให้เลือกภาษาที่เป็นแนวเดียวกันนั้น เนื่องจากทุกภาษาใน .Net จะถูกแปลเป็นภาษา Microsoft Intermediate Language (MSIL) โดยเฉพาะสองภาษา ที่จะเปรียบเทียบกันนี้ ถ้าเขียนโค้ด VB.Net อย่างถูกต้องดี รหัส MSIL ที่ได้ ก็แทบจะเหมือนกันเลย ดังนั้น performance ของงานที่ได้ ก็จะไม่แตกต่างกัน นี่เป็นการยกระดับงาน Visual Basic เป็นอย่างมาก แล้วการที่ VB.Net ใช้
Base Class Library ของ .Net framework ร่วมกันกับ C# ก็ทำให้ VB.Net programmer ถือเป็น first-class citizen ไปแล้ว


การเขียนโค้ด VB.Net อย่างถูกต้องดี เช่นมีการใช้ Option Strict On
หรือมีการใช้ DirectCast แทนที่จะใช้ CType เป็นต้น.


รายละเอียดการเปรียบเทียบสองภาษา ในข้อความนี้ รวบรวมประมวลมาจากแหล่งข้อมูลต่างๆ หลายแห่ง
ซึ่งอาจจะต้องมีการพูดถึงศัพท์หรือเทคนิคลึกๆ บ้างเพื่อให้ได้ความสมบูรณ์นะครับ


ดูข้อดีของ Visual Basic .Net
- รองรับ Optional argument ซึ่งสำคัญมากที่คุณต้องการใช้งานร่วมกับ ActiveX component หรือการเขียนโค้ดชนกับพวก Office
- ทำตัวไม่ซีเรียสได้ คือยอมรับการทำ late-binding ได้ ถ้าไม่กำหนด Option Strict On การเขียนโค้ดพวกนี้ใช้กับพวก ActiveX อีกนั่นเอง (ผมแนะนำให้หลีกเลี่ยงการเขียนโค้ดแบบ late-binding ใน .Net)
- รองรับการทำ named indexer (การสร้าง property ที่มี argument)
- มีคำสั่ง VB แบบเดิมๆ เช่น Left, Mid, UCase, ... ให้ใช้ง่ายๆ สำหรับผู้ใช้ VB6 มาก่อน (การเรียกใช้ฟังก์ชันแบบเดิมๆ นี้จะมีผลต่อประสิทธิภาพของโปรแกรม)
- มีประโยค With..End With ให้ใช้
- ความเรียบง่าย เช่นการสร้างประโยค Event
- สามารถกำหนดชื่อเมธอดของการ implements interface ที่ต่างจากที่กำหนดไว้ใน interface ได้ (ผมว่าไม่ค่อยได้ประโยชน์เลย ทำให้ยุ่งยากในการค้นหาเสียมากกว่า)
- มีประโยค Catch...When... ทำให้สามารถทำการ filter exception ด้วยเงื่อนไขได้ นอกเหนือจากการ filter ด้วยชนิดของ exception เท่านั้น
- Visual Studio .Net จะทำการ compile โค้ดในลักษณะ background ซึ่งช่วยเป็นข้อดีในโปรเจ็กต์ขนาดเล็ก แต่ถ้าโปรเจ็กต์ขนาดใหญ่มหึมา จะกลับเป็นข้อเสียอย่างมาก (มีฝรั่งหลายคนบ่นว่าต้องถึงกับต้องยอมเปลี่ยนจาก VB.Net มาเป็น C# เลย ในโปรเจ็กต์ที่มีไฟล์มีคลาสเป็นพันๆ)


ข้อดีของ C# .Net
- รองรับ XML documentation คล้ายๆ javadoc คือเอาคอมเม้นต์ในโค้ดมาแปลงเป็นเอกสาร technical manual ได้เลย แต่ใน VB.Net เวอร์ชั่น 2005 (Whidbey) ก็จะรองรับในคุณสมบัตินี้ด้วย
- สามารถทำ operator overloading ได้ (VB.Net 2005 ก็จะทำได้เช่นกัน)
- รองรับ unsigned datatype (VB.Net 2005 ก็จะทำได้เช่นกัน)
- มีประโยค using เพื่อใช้จัดการกับ resource ที่เป็นแบบ unmanaged
- รองรับ unsafe code


สังเกตได้ว่า อะไรที่ใน C# มี ซึ่งเป็นสิ่งที่ซับซ้อน ใน VB.Net เวอร์ชันถัดไป ก็จะมีด้วย แต่มักจะถูกนำมาแสดงในรูปแบบที่ง่ายต่อความเข้าใจ แต่อะไรที่ VB.Net มี มักจะไม่ถูกนำไปเพิ่มให้กับ C# เช่นรูปแบบการสร้าง event ที่เรียบง่าย อย่างประโยค Handles หรือคีย์เวิร์ด My ที่จะมีใน VB.Net Whidbey (คิดว่าใน C# อาจจะไม่มี) หรือ Optional argument (ใน C# แก้ปัญหานี้ด้วยการทำ overloading แต่ก็จะไม่สามารถใช้งานร่วมกับ ActiveX component แบบเดิมได้อยู่ดี)


ถ้าขนาดของโปรเจ็กต์ที่คุณคิดว่าจะต้องทำในอนาคตใหญ่มากๆ ก็ควรจะเลือก C# ไปเสียแต่แรกเลย เว้นแต่จะมีวิธีแก้ปัญหา IDE ที่ช้ามากๆ เมื่อมีไฟล์จำนวนมากของ VB.Net ได้


เขาว่าภาษา VB.Net เป็น 4GL (ภาษา Generation ที่สี่) แต่ภาษา C# ถูกวางเป็น 3GL กว่าๆ คือสูงกว่า 3GL เช่น C++ แต่ไม่ถึง 4GL


ถ้าเอาความอย่างที่ Microsoft วาง position ไว้
ภาษา VB .Net เป็น task-oriented
ภาษา C# .Net เป็น code-focused


ถ้าเอามาสร้าง application ทางธุรกิจ ภาษา VB.Net จะเป็นตัวเลือกที่ยอดเยี่ยมอย่างปฏิเสธไม่ได้ เนื่องจากแทนที่โปรแกรมเมอร์จะไม่ต้องคำนึงถึงเรื่องลึกๆ ที่เรียนกันในวิชาของพวก computer science กันบ่อยๆจึงเรียกว่ามี productivity ดี เพราะเอาเวลามาสร้างงานเลย


แต่นั่นก็เป็นอีกเหตุผลหนึ่งว่า ถ้าใช้ C# ศัพท์แสงในเนื้อภาษาจะเป็นศัพท์แบบที่ใช้ในวงการ computer science เช่น abstract, static เป็นต้น ซึ่งจะจำเป็นถ้าต้องมีการใช้เครื่องมืออย่างพวก Rational Rose หรือ Modeling tools อื่นๆ


สิ่งที่รวบรวมมารวมกับความคิดเห็นเพิ่มเติมบางอย่างนี้เข้าไปมีทั้งด้าน รูปแบบภาษา การใช้งานจริง และแฟกเตอร์อื่นๆ อาจจะมีข้อผิดพลาดบ้าง ถ้ามีก็ช่วยบอกเพื่อปรับปรุงเพิ่มเติมต่อไปนะครับ..."


และมีข้อมูลอย่างหนึ่งที่น่าสนใจ คือ ถ้านำนักพัฒนาที่ถนัดภาษา VB.NET มาจับเขียนภาษา C# (แบบไม่ให้เตรียมตัวนะครับ) จะพบว่าสามารถเขียนได้จำนวนมาก แต่ถ้านำนักพัฒนาที่ถนัดภาษา C# มาจับเขียนภาษา VB.NET กลับพบว่ามีจำนวนน้อยที่เขียนได้ ผมสันนิษฐานว่า ไม่ใช่เพราะกลุ่ใไหนฉลาดกว่ากัน แต่เป็นเพราะความสนใจมากกว่า ผมว่านักพัฒนาที่ถนัด C# จะไม่เปิดใจรับภาษา VB.NET ว่าเป็นพี่น้องกันใน .NET Framework เลย


แหล่งข้อมูล :
เปรียบเทียบ C#.net กับ vb.net
Why C# Is Not a "Better" Language Than VB.NET
Top 10 reasons VB.NET is better than C#
Top 10 reasons C# is better than VB.NET
Complete Comparison for VB.NET and C#

Related Post