۱۳۸۸ اردیبهشت ۳۰, چهارشنبه

The C# Programming Language Version 4.0


نسخه بتاي Visual Studio 2010 و .Net Framework 4.0 از تاريخ 20 May به همراه قابليت هاي جديد و بسيار عالي که ميتواند تمام علاقه مندان خود را هيجان زده کند براي دانلود آماده شده است.(Download)
اما شايد براي علاقه مندان به #C خبر جالب تر اين باشد که به همراه اين دو نرم افزار نسخه جديدي از #C که نسخه 4.0 اين زبان برنامه نويسي است نيز وجود دارد.در اين پست قصد داريم که با هم يک نگاه کلي به گذشته #C داشته باشيم و بعد به اين موضوع بپردازيم که آقاي Anders Hejlsberg و تيم #C در نسخه جديد براي ما چه چيزهايي رو آماده کرده اند:

در سال 1998 پرژه #C با هدف رسيدن به زبان برنامه نويسي آسان ، مدرن ،شيع گرا و Type-Safety که تحت پلت فرم Net. عمل کند شروع به کار کرد. شرکت مایکروسافت پلت فرم Net. را به همراه زبان برنامه نويسي #C در تابستان سال 2000 در اختيار عموم برنامه نويسان قرار داد و روز بعد از آن #C داراي محبوبيت و معروفيت بسياري در بين برنامه نويسان شد.با وجود استقبال بسيار عالي و چشمگيري که از اين زبان برنامه نويسي جديد صورت گرفت ، تا رسيدن به هدف اصلي که شرکت مایکروسافت براي خود مشخص کرده بود راه طولاني در پيش داشت.بعد از مدت کوتاهي نسخه 2.0 تعدادي از نواقص و کمبودها را برطرف کرد که تعدادي از آنها عبارتد از :
  • Generics.
  • Anonymous Methods.
  • Iterators.
  • Partial Types.
  • Nullable Types.
    در هنگام طراحي ورژن سوم زبان برنامه نويسي #C تاکيد اصلي برروي فعال کردن (LINQ(Language Integrated Query بود که براي اين کار احتياج به موارد زير بود :
  • Implictly Typed Local Variables.
  • Extension Methods.
  • Lambda Expressions.
  • Object and Collection Initializers.
  • Annonymous types.
  • Implicitly Typed Arrays.
  • Query Expressions and Expression Trees.
    براي طراحي نسخه 4.0 زبان برنامه نويسي #C تيم #C از الحام گرفتن از زبان هاي برنامه نويسي Dynamic مانند Perl, Python, and Ruby استفاده کردند.واقعيت اين
    است که زبان هاي برنامه نويسي Dynamic و Static داراي مزايا و معايب به خصوص خود هستند و مهم اين
    است که بتوان تواناييهاي هر دو را در يکجا جمع کرد.البته قابل به ذکر است که تغييرات و نو آوري هايي که در الگوهاي جديد #C انجام شده به صورت همزمان برروي الگوهاي Net FrameWork. نيز تاثير گذار بوده و باعث تغييراتي بر روي آن بوده است که به اين تغييرات در پست هاي بعدي خواهيم پرداخت.
    تعدادي از مهمترين نو آوري ها و ابداعات نسخه جديد #C به همراه مثال در پايين آورده شده است :
    -------------------------------
    Dynamically Typed Objects.

    زمانيکه نوع کلاس Calculator از نوع Static باشد و ما بخواهيم از متد Add اين کلاس استفاده کنيم که مشخص است پارامتر هاي ورودي و مقدار خروجي آن از چه نوعي است اکنون به صورت زير است :




  • Calculator calc = GetCalculator();
    int sum = calc.Add(10, 20);



    اما زمانيکه نوع کلاس Calculator از نوع Dynamic باشد و ما بخواهيم از متد Add اين کلاس استفاده کنيم که نوع آن را نميدانيم کد ما به شکل زير ميشود :



    object calc = GetCalculator();
    Type type = calc.GetType();
    object result = type.InvokeMember("Add", BindingFlags.InvokeMethod, null, new object[] { 10, 20 });
    int sum = Convert.ToInt32(result);



    حالا در نسخه 4.0 #C کد بالا به اين شکل مي شود :



    dynamic calc = GetCalculator();
    int result = calc.Add(10, 20);


    -----------------------------
    Optional and Named Parameters.

    زمانيکه شما قصد داشته باشيد در نسخه های موجد متدي داشته باشيد که در موقيت هاي خاصي پارامترهاي ورودي متفاوتي داشته باشه مجبور هستيد به گونه زير عمل کنيد :



    public StreamReader OpenTextFile( string path, Encoding encoding, bool detectEncoding, int bufferSize) { }
    public StreamReader OpenTextFile( string path, Encoding encoding, bool detectEncoding) { }
    public StreamReader OpenTextFile( string path, Encoding encoding) { }
    public StreamReader OpenTextFile( string path) { }



    اما در نسخه 4.0 زبان #C کد بالا به صورت زير مي شود :



    public StreamReader OpenTextFile( string path, Encoding encoding = null, bool detectEncoding = false, int bufferSize = 1024) { }



    به زبان بهتر شما مجاز شده ايد که براي پارامترهاي ورودي متد هاي خود مقادير پيش فرض قرار دهيد.
    -------------------------------
    Improved COM Interoperability.

    اگر شما بخواهید که کدی بنویسید که در آن از قبلیت های COM استفاده کنید احتمالاً کد شما چیزی شبیه به کد زیر خواهد بود :



    object filename = "test.docx";
    object missing = System.Reflection.Missing.Value;
    doc.SaveAs(ref filename,
    ref missing, ref missing, ref missing,
    ref missing, ref missing, ref missing,
    ref missing, ref missing, ref missing,
    ref missing, ref missing, ref missing,
    ref missing, ref missing, ref missing);


    اما حال با استفاده از نسخه 4.0 ، #C تمامی خطوط بالا به یک خط به شکل زیر تغییر می کند :



    doc.SaveAs("foo.txt");
    ------------------------------------------------------

    Silverlight

    در اواخر سال 2006 مایکروسافت با معرفی Silverlight وارد رقابتی جالب با شرکت Adobe شد. رقابتی بر سر نرم افزاری شبیه Flash. توسعه دهندگان چند رسانه ای که از Flash استفاده میکردند معمولا گرافیست بودند یا در کارهای گرافیکی تبحر داشتند و اکثرا برنامه نویس حرفه ای نبودند. با اینکه Flash مجهز به زبان برنامه نویسی کاملی است ولی برنامه نویسان حرفه ای علاقه چندانی به این زبان ندارند و همین باعث شد که برنامه های کاربری زیادی با Flash ایجاد نشود.


    و اکنون مایکروسافت گام در این عرصه هم نهاد. Silverlight در یک جمله یک پلتفرم جهت نمایش انیمیشن، تصاویر بُرداری (Vector Graphics) و پخش کلیپ های صوتی و تصویری ست. از نظر من که یک برنامه نویس هستم، پشتیبانی کامل از dotNet Framework ، بزرگترین تفاوت آن با Flash است. تصور کنید امکانات گرافیکی کافی در کنار زبان #C یا VB یا هر زبان dotNet ی دیگر در اختیار شماست. مطمئنا کارهای جالبی خلق خواهید کرد.

    در مورد مقایسه Silverligh و Flash و شاید بقیه، آنقدر مقایسه وجود دارد که لازم نیست حتی به آن فکر کنم! مثلا این شخص مقایسه کامل و واقعی را بین Silverligh، Flash، Java و دیگران برگزار کرده که البته بیشتر Performance مد نظر بوده.

    باید اضافه کنم که Moonlight نسخه متن باز این محصول است که توسط Novell و در کنار Mono رهبری میشود. بازی ها و برنامه های جالبی برای Silverlight خلق شده، مثلا این بازی فوق العاده که حتی متن کامل کد آن هم در دسترس می باشد. البته مشخص است که این بازی جهت معرفی بیشتر Silverlight ارائه شده. شما می توانید با ساختن مراحلی برای این بازی در صورت برنده شدن به عنوان بهترین تفويض ماه، برنده 500 دلار شوید. و یا اگر خیلی حرفه ای هستید، با دریافت کد برنامه و توسعه بازی به سلیقه خود و ارائه یک بازی کامل Silverlight ی، برنده 9 هزار دلار شوید.


    اکنون ویرایش دوم Silverlight کاملا جا افتاده و از March 18, 2009 نسخه 3Beta نیز عرضه شده.