از وقتی که روی زبان سی شارپ و قابلیت های آن دقیق شده ام ، خیلی کنجکاوی می کنم ببینم نظر مردم (برنامه نویسان و کارشناسان شرکت ها) درباره دو زبان اصلی دات نت فریم ورک چیست. نکته بسیار مهمی که اخیرا متوجه شدم اینست که هنوز بسیاری از افراد به اشتباه تصور می کنند زبان سی شارپ خیلی بهتر از زبان VB.NET است. حتی بعضی از برنامه نویسان آماتور که به تازگی با Framework دات نت آشنا شده اند به من گفتند که (( میگن VB.NET ضعیفه ، فقط سی شارپ! )) متاسفانه بسیاری از مدیران شرکت های نرم افزاری نیز دچار این توهم جدی هستند که سی شارپ نسبت به VB.NET مزیت قابل توجهی دارد و حتی قابل مقایسه نیست ! در این یادداشت می خواهم تفاوتهای اصلی این دو زبان را دقیقا ادرس بدهم و نسبت به این برداشت به شدت غلط هشدار بدهم. ابتدا یک پاراگراف از مقاله ای که اخیرا درباره معرفی زبان سی شارپ برای ماهنامه شبکه نوشتم را اینجا (با اضافه کردن چند جمله تکمیلی بیشتر) تکرار می کنم:
واقعیت اینست که این دو زبان از نظر قابلیتها و تواناییها هیچ تفاوت عمدهای ندارند ، جز اینکه زبان سیشارپ به دلیل ارث بردن پاره ای خصوصیات از زبان پیشکسوت خود ، ++C ، هنوز به برنامه نویس اجازه میدهد که مستقیما حافظه را دستکاری و مدیریت کند. با این وجود هنوز هم بسیاری از برنامهنویسان و کارشناسان چه در ایران و چه در سایر نقاط دنیا بر این تصور اشتباه هستند که #C از VB.NET قویتر است. چنین نیست. دلیل این ادعا بسیار ساده است : هر دو زبان چیزی نیستند جز یک پوشش ظاهری برای زبان MSIL که هنگام کامپایل شدن سورس کد برنامه ای که با یک زبان دات نتی نوشته شده است تولید می شود. تمام برنامه هایی که برای پلاتفرم دات نت نوشته می شوند پیش از اینکه به کد زبان ماشین (Native Code) تبدیل شود به یک زبان میانی به نام Microsoft Intermediate Language تبدیل می شوند. زبانهای پلاترم دات نت به طور یکسان از این زبان میانی پشتیبانی می کنند. در واقع این زبانها مجبورند که از استاندارد MSIL تبعیت کنند نه اینکه هر مقداری از آن که دلشان بخواهد را پشتیبانی کنند. بنابراین وقتی قرار باشد نتیجه کار هر دو زبان ویژوال بیسیک دات نت و سی شارپ نهایتا به کد MSIL تبدیل شود ، دیگر چندان مهم نیست که مبدا این کد به چه زبانی نوشته شده است. بنابراین هر دو زبان به یک ترتیب از قابلیتهای کلیدی چارچوب دات نت پشتیبانی می کنند. مثلا مدیریت حافظه در VB.NET دقیقا به همان ترتیبی اتفاق میافتد که در سی شارپ. در گذشته چنین نبود و یکی از دلایل گزینش زبان ++C به جای ویژال بیسیک ، برتری محسوس ++C نسبت به ویژوال بیسیک در زمینه مدیریت حافظه و راندمان برنامه بود. این تفاوت دیگر از بین رفته است. مدیریت حافظه مستقیما توسط چارچوب داتنت انجام میشود و نوع زبان برنامهنویسی تاثیری ندارد. حتی برتری ویژوال بیسیک در زمینه Rapid Application Development و معماری Windows forms نیز در پلاتفرم داتنت از بین رفته است. برنامه سازی در سی شارپ دقیقا به همان سادگی ویژوال بیسیک داتنت است.
تفاوتهای اصلی میان دو زبان بیشتر در گرامر و Syntax زبان است. در مقاله مفصلی که از اینجا قابل دریافت است ، مایکروسافت تمام کلیدواژهها و syntax دو زبان را نظیر به نظیر بررسی کرده است و شما پس از مطالعه دقیقا این مقاله ۱۸ صفحه متوجه خواهید شد که این دو زبان تفاوت اندکی از نظر قابلیت ها و مزیتها دارند و هیچ کدام از نظر راندمان برنامه تولید شده و مدیریت حافظه به دیگری رجحان ندارند.
تنها چیزی که می توانم بگویم اینست که زبان سی شارپ زبان خلاصهتر و موجزتری است. این شاید بهترین توصیف برای سی شارپ باشد. به عبارت دیگر برای پیاده سازی یک قطعه کد در زبان سی شارپ به حجم برنامهنویسی کمتری نیاز است. این مشابه تفاوت برخی زبانهای تکلم در دنیاست. مثلا خیلی از جملات در زبان ژاپنی ممکن است تنها به دو کلمه احتیاج داشته باشند در حالی که در برخی زبانها مثل فارسی شاید نتوان اغلب جملات را با تنها دو کلمه بیان کرد.
یکی از تفاوتهای شناخته شده میان دو زبان ، امکان تعریف سندهای مربوط به سورس برنامه است. در زبان سی شارپ میتوانید سندهایی از نوع XML ایجاد کنید که با سورس کد برنامه شما پیوند خورده است. به این ترتیب به موازات پیشرفت پروژه برنامه نویسی میتوانید خیلی راحت Documentation آن را نیز آماده کنید. چنین قابلیتی در VB.NET وجود ندارد اما خبر خوب اینست که در نسخه بعدی پلاتفرم داتنت (موسوم به Whidbey) این قابلیت به VB.NET افزوده شده است.
یک تفاوت دیگر بین دو زبان آن است که در سیشارپ میتوانید عملگرها یا Operator های سفارشی بسازید. مثلا علامت > را طوری تعریف کنید که عبارت Today > Yesterday معنا پیدا کند و عملگرهای ریاضی بزرگتر و کوچکتر تنها محدود به اعداد نباشد. البته این قابلیت نیز در نسخه بعدی VB.NET افزوده شده است. در حقیقت همین چند درصد تفاوت فعلی میان قابلیتهای گرامر دو زبان ویژوال بیسیک داتنت و سیشارپ ، در نسخه شماره دو چارچوب داتنت ناپدید شده است. مقایسهای میان قابلیت های سی شارپ و ویژوال بیسیک داتنت را میتوانید .
بنابراین دقت کنید که برتر بودن زبان سی شارپ نسبت به VB.NET چیزی جز یک شایعه و افسانه نیست. این دو زبان حدود فقط ۵ درصد با یکدیگر اختلاف دارند. حتی پیشرفته ترین مفاهیم برنامه نویسی OOP نیز در VB.NET وجود دارند (مثل مفهوم Delegates). کسانی که چنین اظهار نظرهایی می کنند یا هنوز فکر می کنند که همان تفاوت میان ++C و VB کماکان در مورد VB.NET و #C نیز وجود دارد یا اینکه شناخت صحیحی از پلاتفرم دات نت ندارند. در واقع خیلی رک بگویم : کسانی که (بخصوص مدیران و کارشناسان ارشد شرکت های نرم افزاری) به این توهم دچارند کمترین آشنایی فنی با چارچوب دات نت ندارند. من به این افراد و نیز به نوآموزان فناوری دات نت اکیدا توصیه می کنم پیش از انتخاب یک زبان مبتنی بر دات نت ، حتما با اصول و مبانی NET Framework آشنا شوند.
تکمیل ۱: یک سوال ، اگر سی شارپ و VB.NET از نظر قدرت و توانایی با هم فرقی ندارند پس مایکروسافت چرا این دوتا را درست کرد؟ دلیلش اینست که مایکروسافت نمی توانست برنامه نویسان هریک از این دو گروه را وادار به پذیرش syntax زبان دیگر کند. بهتر بود که آنهایی که به syntax زبان سی عادت دارند با همان روش ادامه بدهند و آنهایی که به ویژوال بیسیک علاقه دارند به همان منوال ادامه دهند. البته کار کسانی که از VB6 به VB.NET می آیند خیلی مشکل است زیرا VB.NET یک زبان OOP پیشرفته است و این موضوع کار برنامه نویسان ویژوال بیسیک را که به راحت طلبی عادت کرده بودند سخت می کند. ولی برنامه نویسان ++C کار چندان مشکلی ندارند و می توانند از دانش خود در زمینه برنامه نویسی شیء گرا کماکان بهره بگیرند.
تکمیل ۲: صادقانه بگویم که زبان سی شارپ در اصل برای رقابت و چشم و همچشمی با جاوا خلق شده است و مزیت خاص دیگری نسبت به VB.NEّT ندارند. در واقع چون syntax سی شارپ خیلی شبیه جاوا و ++C است ، این ویژگی می تواند برخی از برنامه نویسان جبهه رقیب – جاوا – را قانع کند که ((بابا ! این سی شارپ و فناوری دات نت واقعا یک رقیب جدی برای جاوا است…)) همین ! واقعا زبان سی شارپ هیچ مزیت استراتژیک دیگری نسبت به ویژوال بیسیک دات نت ندارد. من خود با هر دو زبان کار کرده ام و از هر دو زبان خوشم میآید و هیچ تفاوت خاصی بین این دو نمی بینم.
تکمیل ۳: لطفا مدیران و کارشناسان شرکت های برنامه نویسی چشم و گوششان را باز کنند : نباید بین برنامه نویسان این دو زبان تبعیض قائل شد. نباید حقوق و دستمزد این دو گروه متفاوت باشد. اگر شرکت شما هنوز یک دسیپلین مشخص درباره زبان سورس کد برنامه هایی که در شرکت می نویسید ندارد ، انتخاب زبان برنامه نویسی را به برنامه نویسان دات نت تحمیل نکنید. اصلا فرقی نمی کند که یک پروژه را با کدام یک از این دو زبان اجرا کنید