الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

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

بدأه Xhack في 2 مايو 2010 · 3 رد · 1,364 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

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

ملاحظة : الجزء الثاني من الموضوع حاليا موجود في مدونتي مستكشف الدوت نت وسوف أقوم باذن الله بوضعه هنا غدا او بعد غد

قبل ان ابدأ في شرح الوظيفة التي تقدمها هذه الكلمة يجب عليك معرفة ان لغات البرمجة نوعان

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

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

1.png

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

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

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

3.png

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

4.png

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

5.png

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

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

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

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

71.png

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

1. قمنا بتعريف متغير اسمه (arg) من نوع dynamic

2. قمنا بتعريف متغير اخر اسمه (result) من نوع dynamic

3. قمنا باسناد رقم 5 الى المتغير arg

4. قمنا بارسال المتغير الى الدالة (method) اسمها (Plus) تقوم بعملية جمع بعد ذلك ارجاع القيمة واسنادها الى المتغير result

5. قمنا بارسال النتيجة الى الدالة (M)

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

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

8.png

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

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

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

9.png

الخلاصة

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

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

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

والله أعلم

تم تعديل هذه المشاركة بواسطة Xhack في 2 مايو 2010 في 22:11

3
#2

الفرق واضح وضوح الشمس بسبب هذا الشرح الرائع الله يجزاك بالخير وننتظر القادم ..

#3

جزاك الله خيراً أخي Xhack

موضوع أرائع و شرح جميل ... لكن هل يوجد شيء مشابه

في الـ VB.net ؟

مواضيع و دروس
الكتابة بعدة ألوان داخل الــ TetxBoxمكتبة الأكوادتحميل الــ Visual Basic Express 2005
تحميل فيجوال بسيك 6أكواد × أكواددروس في الخوارزميات
لتحميل عدة إصدارات من كريستال ريبورتتحميل برنامج Activ Skin 4.3جمل الــ Sql من الألف إلى الياء
معظم المواقع المختصة بالفيجوال بيسيكموقع كويس للأيقوناتمرجع شامل لأدوات ActivX
كيفية نطق الحرف المكتوب شرح عن كيفية إقامة علاقة مع Data Reprot باستخدام الــ DataEnvironment علاقة مع الـ Datareport بدون استخدام DataEnvironment (( شرح ))
كتاب Migrating From DAO to ADOإضافة لـ VB6 بريمج IndenterVB, إضافة لبيئة تطوير فيجوال بيسك 6حوار بينى و بين عضو حول ال winsock , اتمنى ان يعجبكم
Smart Indenter 3.5 لتنسيق الأكواد, هديه لكل الأعضاء السلسلة الدهبية في المواضيع العلمية ، إستغلال الـ Balloons في الـ Windows XP مصفوفات الأدوات Control Arrays افكار وتلميحات ! , لمن افتقدها من أيام الـ VB6.0
جعل خلفية الـ Mid Form تظهر بالكامل خواص الاداة Winsock لربط الاجهزة عن طريق الانترنتكيف يتم عمل تقارير بإستخدام HTML

7.gif
#4

شكرا لمروركم الكريم

أما بخصوص سؤال الأستاذ COMFORT فأنا متأكد من ان لغة الفيجوال بيسك تدعم الديناميك ولكن كيف الى الان لم أعرف لاني لم أرى بعد المميزات الجديدة للغة فيجوال بيسك

بالتوفيق إن شاء الله

مواضيع مشابهة