VB.NET VS. C#

posted on 23 Dec 2007 04:02 by dotnet in VB

ถ้าจะถามผมว่า ผมชอบภาษาอะไรมากที่สุด ผมก็คงจะตอบว่า 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 เลย
 
แหล่งข้อมูล :

edit @ 23 Dec 2007 04:22:14 by teedech

Tags: net, vb 8 Comments

Comment

Comment:

Tweet

I own a presentation that we are presently working on, and I have been getting the appearance out for such information.

#8 By condos in hyde park (175.110.77.49) on 2012-02-17 21:04

สอนพิเศษ ตัวต่อตัว กลุ่ม โดยครูผู้สอนจบปริญญาโทเกียรตินิยมจากประเทศอินเดียรัฐBangalore เป็นมหาลัยที่มีชื่อเสียงติดอันดับ1ใน10 ของอินเดีย มีประสบการณ์ทำงานเป็น IT Manager และมีประสบการณ์การเป็นติวเตอร์จากสถาบันที่มีชื่อเสียง ASP .NET, Oracle Programming Using PL/SQL , Visual Basic 6.0, C, C++, C#, VB.net, Web, & Mobile Application, ASP.NET with C# และอีกหลายวิชา นอกจากนี้ยังมีพวกกราฟฟิค การตกแต่งเว็บ และรับเป็นที่ปรึกษาการทำโปรเจคจบ ตอนนี้อาจารย์ได้มาเปิดสอนเอง และได้ทำห้องสอนที่ซ.รามอินทรา15 เยื้องกะตลาดลาดปลาเค้า ใกล้กะเซ็นทรัลรามอินทรา
ราคาคุยกันได้ไม่แพงอย่างที่คิด ปรึกษาฟรี ที่ โทร. (086)3123828 หรืออีเมล์ฝากเบอร์ไว้เด๋วโทรกลับที่ thegeniuz@windowlives.com

#7 By (58.8.157.45) on 2008-08-09 23:19

สอนพิเศษ ตัวต่อตัว กลุ่ม โดยครูผู้สอนจบปริญญาโทเกียรตินิยมจากประเทศอินเดียรัฐBangalore เป็นมหาลัยที่มีชื่อเสียงติดอันดับ1ใน10 ของอินเดีย มีประสบการณ์ทำงานเป็น IT Manager และมีประสบการณ์การเป็นติวเตอร์จากสถาบันที่มีชื่อเสียง ASP .NET, Oracle Programming Using PL/SQL , Visual Basic 6.0, C, C++, C#, VB.net, Web, & Mobile Application, ASP.NET with C# และอีกหลายวิชา นอกจากนี้ยังมีพวกกราฟฟิค การตกแต่งเว็บ และรับเป็นที่ปรึกษาการทำโปรเจคจบ ตอนนี้อาจารย์ได้มาเปิดสอนเอง และได้ทำห้องสอนที่ซ.รามอินทรา15 เยื้องกะตลาดลาดปลาเค้า ใกล้กะเซ็นทรัลรามอินทรา
ราคาคุยกันได้ไม่แพงอย่างที่คิด ปรึกษาฟรี ที่ โทร. (086)3123828 หรืออีเมล์ฝากเบอร์ไว้เด๋วโทรกลับที่ thegeniuz@windowlives.com

#6 By (58.8.157.45) on 2008-08-09 23:19

ความเห็นส่วนตัว

ผมเลือก VB มากกว่า C# เพราะผมไม่ถูกกับภาษาปีกกาครับ

คือปีกกานี่ทำผมหลงบ่อยมาก แถมใน IDE มันก็ชอบขีดเส้นว่า Error ไว้ก่อนถ้ายังไม่ได้ปิดปีกกา (ทำให้รู้สึกไม่ค่อยดี) แต่ยังไงก็ยอมรับว่าโค้ดของ C# ดูใสสะอาดตา

ยังไงตอนนี้ผมก็อ่านออกทั้ง C# และ VB และยังคงมึนงงกับ C++ เพราะว่า... มันไม่ใช่ภาษาคน!!

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

เท่าที่ได้ยินแว่ว ๆ มา อาจารย์มหาวิทยาลัยหลายคนมักจะดูถูก VB เพราะว่า กลัวนักศึกษาจะสบายเกินไปน่ะสิ sad smile

#5 By NinkungZ on 2007-12-24 00:13

#4 By (222.123.227.206) on 2007-12-23 18:55

ต้องเห็นใจอีกหลายๆ คนครับ ที่หลักสูตรไม่ได้สอน C, C++ หรือ Java มาก่อน เช่น ปวส. หรือสาขาไอที, สาขาคอมฯธุรกิจ ซึ่งเรียน VB มาตั้งแต่แรก ยังไม่นับคนที่เรียนมาด้านอื่น แล้วมาทำงานด้านคอมฯ อีกหลายคนครับ ผมไม่แน่ใจว่า programming background ของแต่ละคนจะส่งผลต่อการเรียนรู้ภาษาใหม่ ขนาดไหนนะครับ เพราะผมก็เขียนภาษา script บน dbase IV และ pascal เป็นภาษาแรกครับ (ฝากน้องๆ วิจัยด้วยแล้วกันนะครับ ไม่รู้อาจารย์จะรับหัวข้อนี้ไหม)

#3 By teedech on 2007-12-23 12:12

เขียน VB ไม่เป็นนะ..
ส่วนตัวก้อน่าจะเลือกที่เราถนัดมากกว่า

แต่ในก้อนะ ..
เป็นเพราะที่โรงเรียนหรือตามมหาลัย
เค้าสอนมาด้วยอะ
ไม่มีวิชา programming language ที่ไหน
เอา VBหรือ VB.NET มาสอนเลย

เห็นก้อมีแต่ c++,c,c#,JAVA

โตมาก้อเลยทำแต่ c#sad smile

#2 By xnanoob on 2007-12-23 07:10

ความเห็นส่วนตัว

สาเหตุนึงที่ผมเลือกตระกูล C มากกว่าตระกูล B เพราะมันเป็นภาษาปีกกาครับ
คือ Block ส่วนใหญ่ในตระกูล C มันจะเป็นสัญญลักษณ์ แยกง่าย เขียนง่าย ดูง่าย

โค้ดในภาษา Basic "ผมอ่านไม่ออก"
ลักษณะมันเหมือนเขียนคำสั่งแบบให้คนมาอ่านแต่ต้นจนจบ เหมือนต้องอ่านรายงานหนึ่งหน้ากระดาษแล้วไปทำ
ในขณะที่ C จะเขียนแบบเป็นบล็อกๆ และในฐานะคนเขียน ผมว่ามันง่ายในการแยกส่วนแล้วจัดการ

ผมว่าเรื่องที่ว่า VB.NET กับ C# ต่างกันยังไง ควรไปดูที่ความเป็น C กับความเป็น B มากกว่า
ในตัว C# กับ VB.NET มันแทบไม่ต่างกันหรอก

ส่วนที่ว่า คนเขียน VB.NET มักมาเขียน C# ได้
น่าจะเป็นเพราะ OOP มักต้องเรียนกับ C++ ทำให้พออ่าน C# ออกได้มากกว่านะครับ