mcse
مرحباا بك في منتدى mcse
تشكرك الادارة على هده الزيارة


انضم إلى المنتدى ، فالأمر سريع وسهل

mcse
مرحباا بك في منتدى mcse
تشكرك الادارة على هده الزيارة
mcse
هل تريد التفاعل مع هذه المساهمة؟ كل ما عليك هو إنشاء حساب جديد ببضع خطوات أو تسجيل الدخول للمتابعة.

(19) الوظائف

اذهب الى الأسفل

(19) الوظائف Empty (19) الوظائف

مُساهمة من طرف Ebisu الأربعاء يونيو 16, 2010 11:52 am

السلام
عليكم
و رحمة الله و بركاته


درسنا اليوم من
الدروس
المهمّة جداً. و أظن أنّه من المناسب الحديث عنه الآن بعد أن تحدثنا في
الدروس
السابقة عن عدد من المواضيع التي تمهّد له. فقد

تحدّثنا
كثيراً
عن الوظائف حين تحدّثنا عن الفئات (classes)
و
الكائنات (objects) خاصة في الدرس
الثاني عشر
. و اليوم سنتحدّث عن الوظائف بشكل مفصّل إن شاء
الله.





إنشاء الوظائف:
لكتابة أي
فئة نحتاج أن نقوم بالتالي:

<blockquote>
(19) الوظائف Syntax
</blockquote>
و في الشكل التالي تشرح السطر الأول من الشكل
السابق، و
الذي يطلق عليه
method
signature:

<blockquote>
(19) الوظائف ExplainHead
</blockquote>
فأول كلمة هي public هذه
عبارة عن Access modifier و يمكن أن يحل
محلها أي من
الكلمات باللون البنفسجي، أو كما هو موجود في البداية
[none]
أي أنه من الممكن ألا تكون موجودة أبداً.

الكلمة الثانية هي void و هي
تعني نوع القيمة التي ترجعها الوظيفة. فإذا كانت void
فهذا يعني أن الوظيفة لا تعيد قيمة، و إنما تقوم بعمل محدد فقط، أما
إذا كانت
غير ذلك، فإن هذا يعني أن الوظيفة تعيد قيمة محددة، و لابد من استخدام
كلمة
return داخل الوظيفة في هذه الحالة. و من
الممكن أن
يكون نوع القيمة التي ترجعها الوظيفة أي واحدة من الكلمات باللون
الأخضر. و
نلاحظ أنها قد تكون أيضاً عبارة عن فئة من الفئات.

نصل بعدها لكلمة methodName و
هي هنا الاسم الذي نعطيه للوظيفة، و يفضّل أن يكون فعلاً، يبدأ بحرف
صغير.

بعد ذلك نجد أننا فتحنا قوساً دائرياً، و في داخله
وضعنا
سلسلة المتغيرات المدخلة للوظيفة (
parameters list).
و التي يتم تحديد نوعها، و اعطائها اسماً لاستخدامه داخل الوظيفة، و
يفصل بينها
باستخدام الفاصلة. و من الممكن أن لا تكون هناك أي متغيرات مدخلة
للوظيفة، و
يكون القوس فارغاً.


<blockquote>



نقطة توقّف..

المتغيرات الموجودة في سلسلة المتغيرات
المدخلة (parameters
list) تكون صالحة للاستخدام داخل الوظيفة
فقط، و لا
يمكن استخدامها خارج الوظيفة أبداً.


</blockquote>



Method
Overloading
:
يمكن في الجافا كتابة وظيفة بنفس
الاسم مرتين (!!!!) نعم تستطيع ذلك. و لكن يجب أن يكون توقيع الوظيفة
مختلفاً
في كل مرة. أي أن نوع الإرجاع، أو قائمة المتغيرات المدخلة تكون مختلفة
إما في
النوع أو في العدد. و هذا يسمّى في الجافا
Method Overloading.
لنأخذ مثالاً على ذلك.

لنفرض أننا نريد كتابة وظيفة
تقوم بجمع
رقمين، و إعادة الناتج. و لكن الأرقام موجودة بأنواع عدة. منها الـ int
و منها float و منها double.
و كلها مختلفة عن بعضها البعض. يمكننا في هذه الحالة كتابة عدة وظائف
كلها بنفس
الإسم، و لكن نوعية المتغيرات في سلسلة المتغيرات المدخلة تختلف في كل
مرة، و
معها يختلف نوع القيمة المرجعة.

سنكتب وظائف الجمع في فئة اسمها AddTwo
هكذا:
<blockquote>
(19) الوظائف AddTwo
</blockquote>
نلاحظ أننا كتبنا فئتين بنفس الاسم، و لكن بنوع
المدخلات
مختلف، و نوع إرجاع مختلف، فمرة تاخذ متغيرين من نوع int
و تعيد جمعهما في صورة int، و مرة تأخذ
متغيرين من
نوع float و تعيد ناتج جمعهما في صورة float
أيضاً.
الآن سنكتب فئة رئيسية، نقوم من خلالها إستخراج
عضو من
فئة AddTwo و نستخدم الوظيفتين sum
مرة لجمع متغيرين من نوع int و مرة متغيرين
من نوع
float، هكذا:
<blockquote>
(19) الوظائف AddMain
</blockquote>
لاحظ معي لقد استخدمنا نفس الاسم
في كل
مرة للوظيفة في السطرين 10 و 11. و هذا يسهّل استخدام الوظيفة كثيراً.


و أبسط مثال على method
overloading هي وظيفة الطباعة التي استخدمناها منذ
اليوم
الأول. فنحن نستخدمها أحياناً لطباعة نصوص، و أحياناً لطباعة أرقام. و
أحياناً
لطباعة أرقام كسرية. و هذا يدل على أنه تم تعريف الوظيفة بأكثر من
تعريف في
داخل الفئة، و كل تعريف يختص بطباعة نوع من أنواع المتغيرات. و نحن لم
نشغل
بالنا كثيراً، فنحن نكتب نفس اسم الوظيفة في كل مرة، و لا ندري أنه يتم
استدعاء
وظائف مختلفة حسب نوع المدخلات.



أنواع الوظائف:
نستطيع تقسيم الوظائف إلى نوعين
حسب
الإعادة. فبعض الوظائف التي يتم تحديد نوع القيمة المرجعة، تقوم بإرجاع
قيمة عن
طريق استخدام الكلمة return. بينما لا ترجع
الوظائف
من نوع void شيئاً.



(19) الوظائف Void (19) الوظائف Return


كما يمكننا تقسيم الوظائف حسب
وضعية
الوظيفة في الفئة إلى نوعين،

وظائف خاصة بالفئة، ووظائف خاصة بالعضو. و يتم في النوع الأول كتابة
كلمة (static)
في توقيع الوظيفة (method signature). و
هكذا نكون
قد جعلنا هذه الوظيفة هي خاصة بالفئة بشكل عام و ليست خاصة لعضو من
الأعضاء. و
بإمكان أي عضو استخدامها من الفئة مباشرة دون الحاجة لانشاء عضو من
الفئة. و
كمثال على ذلك وظيفة random في فئة Math.
فنحن نستطيع استخدامها بالإشارة لاسم الفئة مباشرة دون الحاجة لإنشاء
عضو في
الفئة، و استخدامها عبره.

تماماً كما في المثال السابق،
يمكننا أن
نجعل وظائف الجمع static و نستخدمها مباشرة
دون
الحاجة لإنشاء عضو من فئة AddTwo، هكذا:


<blockquote>
(19) الوظائف StaticAddTwo
</blockquote>
نلاحظ أننا عرفنا الفئات لتكون
static في السطر الثالث و الثامن، و هكذا نكون قد
جعلناها
خاصة بالفئة بشكل عام لا بعضو من الأعضاء. و الآن فقط نستطيع أن
نستخجمها بهذا
الشكل:

<blockquote>
(19) الوظائف StaticAddmain
</blockquote>
نلاحظ أننا في السطرين الثامن و
التاسع
استخدمنا وظيفة sum مسبوقة باسم الفئة AddTwo

مباشرة، دون الحاجة لاستخراج عضو من الفئة AddTwo،
لأنه تم تعريف الوظيفة على أنها static.

سيتم التفصيل عن الـ access

modifiers في الدرس القادم إن شاء الله.


أرجو
أن
يكون الدرس واضحاً :-)
Ebisu
Ebisu
مبرمج جيد
مبرمج جيد

عدد المساهمات : 45
السٌّمعَة : 50
تاريخ التسجيل : 11/06/2010
العمر : 43

الرجوع الى أعلى الصفحة اذهب الى الأسفل

الرجوع الى أعلى الصفحة


 
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى