RSS

المميزات الجديدة في لغة dynamic keyword – C# 4.0 الجزء الاول

12 Apr

بسم الله الرحمن الرحيم

سوف اتحدث في هذا الموضوع عن الميزة والإضافة  الجديدة القادمة مع لغة C# 4.0  وهي Dynamic keyword ولكن قبل ان ابدأ في شرح الوظيفة التي تقدمها هذه الكلمة يجب عليك معرفة ان لغات البرمجة نوعان

  • لغات ديناميكية (dynamic programming language) مثل ( Python ,Ruby, JavaScript)

في هذا النوع من اللغات يمكن كتابة المتغيرات بدون  الحاجة الى تعريف نوع المتغير هل هو متغير رقمي نصي او كائن ما والسبب في ذلك ان ربط المتغير بنوعه يتم وقت التنفيذ (Runtime ) لنأخذ مثال مكتوب بلغة (IronPython) كما هو موضح في  الصورة التالية

كما ترى في المثال السابق قمت بتعريف متغير اسمه (i) بدون ان اعرف نوعه هل متغير رقمي (int) نصي (string) او أي من الانواع الأخرى وقمت بإسناد عدد له (1+1) وطباعة هذا الرقم .بعد ذلك قمت بإسناد قيمة نصية (“a”+”b”) وايضا بدون ان اقوم بتعريف نوع المتغير وتمت طباعة النص .

  • لغات ذات انواع  ثابتة (Statically-Typed programming language) مثل (C++,C# ,Java , Vb)

في هذا النوع من اللغات مثل لغة (#C) من غير الممكن ان تقوم بتعريف متغير بدون ان تعرف نوع (Type) هذا المتغير هل هو رقمي او نصي او احد من الانواع الاخرى كما هو موضح في الصورة التالية

كما ترى في المثال السابق يجب تعريف نوع المتغير لان المترجم (Compiler)في هذه الحالة سوف يقوم بإصدار خطاء وهو ان الاسم (i) غير موجود ولايمكن التعرف عليه لذلك يجب ان تحدد نوع هذا المتغير وهو في الحالة السابقة من نوع  (int) كما هو موضح في الصورة التالية

طبعا ترى من المثال السابق انه يجب تحديد نوع المتغير وليس فقط نوع المتغير بل يجب ان يكون النوع صحيح فلا يقبل المترجم (Compiler) ان تقوم باسناد قيمة عددية الى متغير من نوع نصي


يتضح لنا من الامثلة السابقة الخاصة باللغات المسبقة التعريف الاهمية الحقيقة لهذه اللغات حيث انها اسرع (لان الانواع تم تعريفها مسبقا ولا حاجة لمعرفة النوع اثناء التنفيذ(Runtime) مما يستلزم وقتا اطول ) وايضا ان معظم الاخطاء التي يقوم بها المبرمج يتم إكتشافها مبكرا من قبل المترجم مثل الاسناد الخاطيء وغيرها من الاخطاء الشائعة التي قد يقع فيها المبرمج على عكس اللغات الديناميكية ولهذا السبب تعتبر لغة (#C) من الانواع الامنة (type safety).

لقد أردت في الأسطر القليلة الماضية أن أمهد لكم الطريق لكي  أطرح عليكم السؤال التالي

هل يمكن للغة مسبقة التعريف مثل لغة (#C) أن تكون لغة ديناميكية

الاجابة ببساطة نعم مع الكلمة الجديدة التي تقدمها لغة (#C) وهي (dynamic)  انظر الى المثال التالي ولاحظ معي كيف يمكن ان تكون لغة (#C ) لغة ديناميكية



حسنا سوف اقوم بشرح ماحدث بالاعلى كالتالي

  1. قمنا بتعريف متغير اسمه (arg) من نوع (dynamic)
  2. قمنا بتعريف متغير اخر  اسمه (result) من نوع (dynamic)
  3. قمنا باسناد رقم 5 الى المتغير (arg)
  4. قمنا بارسال المتغير الى الدالة (method) اسمها (Plus) تقوم بعملية جمع بعد ذلك ارجاع القيمة واسنادها الى المتغير (result)
  5. قمنا بارسال النتيجة الى الدالة (M)

حسنا حسنا تمهل قليلا هنالك نوعان من الدالة (M)  النوع الاول يقبل باراميتر (parameter ) من نوع رقمي(int) والاخر من نوع نصي (string)  فكيف سوف يتم التعرف على أي من هاتين الدالتين سوف يتم ارسال المتغير(result) .

سؤال جميل جدا والان انظر الى الصور  التالية التي تحتوي على نتيجة البرنامج الذي قمنا بكتابته بالاعلى


مذهل صحيح لقد قام البرنامج باختيار الدوال المناسبة وطبع النتيجة بناء على محتوى المتغير (arg) في المرة الاولى كان رقم وفي المرة الثانية اصبح نص.

يرجع السبب في ذلك انه عند وقت التنفيذ (runtime ) سوف يتم التعرف على النوع الحقيقي (Actual Type) وربطه (Bind)  بالمتغير (arg)  الذي تم ارساله وتحديد نوع المتغير هل هو رقم ام نص وبعد ذلك يتم اختيار الدالة الصحيحة وطباعة محتوى المتغير .

وهنا مثال أخر يقوم بجمع قيمة رقمية أو عديدية مع قيمة نصية ثم يقوم بعد ذلك بطباعة محتوى المتغير

الخلاصة

قمت في هذه المقالة بالتعريف بين اللغات الديناميكية (dynamic language) واللغات المسبقة التعريف( statically typed) وكان غرضي من هذا التعريف ان أوضح لك الصورة وهو ان لغة (#C) في إصدارها الجديد (4.0) أصبح بإمكانها ان تسلك سلوك اللغات الديناميكية فقط كل ماعليك فعله هو تعريف المتغير مسبوق بكلمة (dynamic)

وان الربط بالنوع الصحيح سوف يكون وقت التنفيذ وليس اثناء ترجمة الكود. وفي الجزء الثاني سوف اقوم بالشرح اكثر واعطاء تفاصيل وامثلة اكثر واريك الصورة الكبيرة من وراء طرح هذه الميزة والرؤية المستقبلية لشركة مايكروسوفت

وفي النهاية اتمنى ان اكون قد وفقت في الطرح

والله أعلم

 
2 Comments

Posted by on April 12, 2010 in C#

 

2 responses to “المميزات الجديدة في لغة dynamic keyword – C# 4.0 الجزء الاول

  1. Ismail Siam

    April 12, 2010 at 4:46 pm

    خطوة مباركة

    بالتوفيق إن شاء الله عسى أن ينفعنا والمسلمين أجمعين

    المهم الاستمرارية .. شد الهمة

     
  2. تامر برج

    May 8, 2010 at 2:07 pm

    الله ينور عليك
    اخيرا فهمت انت اكثر من رائع
    ليت الدوام في الاستفاضه يدووووووووم

     

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

 
%d bloggers like this: