GagorAcadmey

تعلم برمجة تطبيقات الاندرويد من الصفر حتي الاحتراف

آخر المواضيع

الاثنين، 20 أغسطس 2018

الدوال في جافا


الدوال : تسمي التوابع او الطرق او المناهج وهي عبارة عن مجموعة من التعليمات المجمعة تحت أسم واحد
خصائص الدوال
  1. يمكن إستدعائها في اي نقطة في البرنامج فقط بكتابة إسمها

  2. بعد تنفيذها يتم الرجوع الي نقطة الاستدعاء في الدالة الرئيسية

  3. تساعد الدوال في تنظيم وتنسيق البرنامج

  4. تقسيم البرنامج الي مجموعة برامج فرعية بحيث يكون لكل منها وظيفة محددة

  5. تساعد في إختصار الكود وعدم تكراريته

  6. تساعد في عملية متابعة الكود وتتبعه لتسهيل تصحيح الكود وتحديثه

أنواع الدوال في لغة الجافا Type Of Method In Java

تنقسم الدوال في الجافا الي نوعان رئيسيان وهما :

الدوال الجاهزة Build-In :

وهي مجموعة الدوال المبرمجة مسبقا ضمن حزمة المترجم الخاص بلغة الجافا(الدوال الرياضية , دوال تتعامل مع النصوص , دوال عامة)

دوال مكتوبة بواسطة المبرمج User-Definde :

هي مجموعة الدوال المعرفة من قبل المبرمج لتنفيذ وظيفة معينة وهي تتكون من جزئين رئيسيان :
Method-Header() //  رأس الدالة 
{
   
Method-Body //   جسم الدالة 
}

معاير تصنيف الدوال المعرفة من قبل المبرمج :

قابلية الوصول Access Modifier :

  1. عامة Public : يمكن الوصول اليها من اي مكان في المشروع

  2. خاصة Private : لا يمكن الوصول اليها الا من نفس الفئة المعرفة فيها (من نفس class)

  3. محمية Proteced : لا يمكن الوصول اليها الا من خلال الفئة نفسها او الفئات الوارثة من الفئة

المشاركة بين الكائنات ( Static and Non-Static ):-

  1. بما أن الدوال يتم تعريفها داخل الفئات class إذا يمكن ان نشتق منها مجموعة كائنات opjects وفي هذه الحالة يوجد نوعان من الدوال :

  2. دوال مشتركة Static :
    هذه الدالة مشتركة بين كافة الكائنات المشتقة من الفئة المحتويه علي الدالة وعند الاستدعاء لا تحتاج كائن جديد من الفئة المحتويه علي الدالة
    دوال غير مشتركة None-Static :
    كل كائن مشتق من الفئة له قيمة خاصة لكل متغيرات الدالة ولاستدعاء هذه الدوال يجب إشتقاق كائن جديد من الفئة المحتويه علي الدالة

تصنيف الدوال من حيث القيمة الراجعة Returned value to calling code :-

  1. دوال ترجع قيمة return vlaue :-

  2. تسمي (Getter) هذا النوع من الدوال يقوم بتنفيذ تعليمات محددة ثم تقوم بارجاع القيمة حسب نوع بيانات الدالة الي سطر الاستدعاء بعد إنتهاء التنفيذ ويجب ان تحتوي الدالة علي الكلمة المحجوزة return
    int sum(4,5)
        {
         int z=4+5;
        return z;
        }
    
    //عند إستدعاء هذه الدالة فأنها ترجع قيمة الجمع  
    

  3. دوال لا ترجع قيمة return no value :-


  4. تسمي (setter) وهي دوال من النوع الخالي void هذا النوع يقوم بتنفيذ تعليمات محددة دون إرجاع قيمة الي سطر الاستدعاء بعد إنتهاء التنفيذ
    public class Test {
    public static void printName(){
     System.out.println("gagacadmey.blogspot.com");
    }
     public static void main(String[] args) {
    // تم إستدعاء الدالة  ولاحظ أ أنه لم تمرر اليها اي قيمة 
    printName();
     }
    
    }
    
    نتيجة التنفيذ
    gagacadmey.blogspot.com

  5. سطر الاستدعاء calling code:-

  6. هو السطر الذي تم عنده إستدعاء الدالة في الدالة الرئيسية Main Method

تصنيف الدوال من حيث المعاملات With or Without Parameters :-

  1. دوال تحتاج الي معاملات Have Parameter :

  2. وهي دوال تحتاج الي تمرير معاملات اليها عند إستدعائها
    return_type fun_name(param1 , param2)
        {
         fun_body
        }
    
    //عند الاستدعاء فان القيمة الراجعة ستكون نتيجة تنفيذ ما بداخل الدالة

    حيث أن :

    return_type : نوع القيمة الراجعة (int , float , double , char , string)
    fun_name : أسم الدالة
    parameters : هي المعاملات
    fun_body : هو محتوي الدالة
  3. دوال لا تحتاج الي معاملات Have No Parameter :

  4. هي دوال لا تحتاج الي تمرير قيم عن الاستدعاء حيث لا تكتب اي قيم بين قوسين الدالة

    void printmessage()
        {
         System.out.print("I Am Function Without Any Parameter");
        }
    
    //عند الاستدعاء تطبع هذه الدالة ما بداخل جملة الطباعة فقط 
    
    لاحظ أن هذه الدالة لا تحتوي علي الكلمة المحجوزة return لانها دالة من النوع الخالي أي لا ترجع اي شئ
    عند إستدعاء الدوال يجب كتابة أسمها وإرفاق المعاملات بين الاقواس , واذا كانت لا تحتوي علي معاملات تكتب الاقواس فارغة
    printmessage();
    
    فائدة وجود الاقواس هو لاخبار المترجم أن هذه دالة وليست متغير عادي

طرق تمرير المعاملات الي الدالة

المعاملات هي قيم متغيرات او ثوابت يتم تمريرها الي الدالة أثناء الاستدعاء

  1. تسمي المعاملات الموجودة في الدالة الرئيسية (المكتوبة امام جملة الاستدعاء) بالمعاملات الفعلية

  2. تسمي المعاملات المناظرة لها (المكتوبة في رأس الدالة ) في الدالة التي تم إستدعائها بالمعاملات الشكلية او المنسوخة او الصورية

تمرير المعاملات بالقيمة Pass By Value :-

  1. في هذه الطريقة يتم إرسال صورة من المعامل الفعلي الي المعامل الصوري او المنسوخ

  2. المعاملين الفعلي والصوري لا يشتركان في نفس موقع الذاكرة

  3. المعامل الفعلي لا يتأثر بالتغيرات في المعامل الصوري

  4. هذا النوع من التمرير يتم تطبيقه تلقائيا عندما يكون نوع المعاملات الفعلية من انواع البيانات البدائية (int double float)

تمرير المعاملات بالمرجع Pass By Reference :-

  1. فيه يتم إرسال عنوان المعامل الفعلي في الذاكرة الي المعامل الصوري المناظر له في الدالة المستدعيه

  2. المعاملين الفعلي والصوري يشيران الي نفس عنوان الذاكرة

  3. كل تغير في المعامل الصوري سيتم تطبيقه في المعامل الفعلي

  4. هذا النوع يتم تطبيقه عندما تكون المعاملات الفعلية من نوع كائن Opject مثل المصفوفات

الشكل العام لدالة تستقبل مصفوفة كمعامل ولا ترجع قيمة
Access_Modifier return_type fun_name (Array_type Array_name[]) {}

مثال

package arrays;
public class Test {
public static void main(String[] args) {
//  هنا قمنا بتعريف مصفوفة
int[] numbers = { 10, 20, 30, 40, 50 };
// هنا قمنا باستدعاء الدالة و مررنا لها المصفوفة
printArray(numbers);
System.out.println();
// هنا قمنا باستدعاء الدالة و أنشأنا مصفوفة بداخله
printArray(new int[] {23, 43, 54, 34, 90});
    }
//  argument هنا قمنا بتعريف دالة تطبع محتوى أي مصفوفة نمررها لها كـ
public static void printArray(int[] array) {
for (int i=0; i<array.length; i++) {
System.out.print(array[i] + " ");
       }
    }
}
نتيجة التنفيذ
10 20 30 40 50
23 43 54 34 90
الشكل العام لدالة تستقبل مصفوفة كمعامل وترجع مصفوفة من القيم
Access_Modifier  return_type[] fun_name (Array_type  Array_name[]) {}

مثال

public class arrayExample {
   
 static int MaxNum_Arr(int Arr[]){ // تم تعريف دالة تستقبل مصفوفة بيانات من النوع الصحيح
  int max = Arr[0];
  for (int i=0; i < 3; i++) {// هنا يتم المرور علي كل رقم ومقارنته مع القيمة السابقة
  if(Arr[i] > max);
  max = Arr[i];// الان يتم تبديل الرقم اذا كانت نتيجة المقارنة صحيحة
      }
  return max;// اخيرا يقوم بارجاع القيمة المخزنة وهي قيمة اكبر رقم
      }
  public static void main(String[] args) {
  int arry1[] = {10,20,30}; // هنا يتم إنشاء المصفوفة
  int arry2[] = {15,25,35}; // هنا يتم إنشاء المصفوفة ثانية بقيم جديدة
  // الان يتم إستدعاء الدالة وتمرير المصفوفات اليها
  System.out.println("the max number in array1 : " + MaxNum_Arr(arry1));
  System.out.println("the max number in array2 : " + MaxNum_Arr(arry2));
  }
}
نتيجة التنفيذ
the max number in array1 : 30
the max number in array2 : 35

التحميل الزائد للدوال Method Overloading

التحميل الزائد هو كتابة اكثر من دالة وتحمل نفس الاسم في نفس الفئة ولكن تختلف في المعاملات

لتعريف اكثر من دالة بنفس الاسم لابد من أن تختلف في ثلاث أشياء :

  1. عدد المعاملات Number Of Parameters

  2. نوع المعاملات Data Type Of Parameters

  3. ترتيب نوع المعاملات Sequence Of Data Type Of Parameters

دالتين مختلفتين في عدد المعاملات

public static int max(int x , int y) {
// method body 
}
public static int max(int x , int y , int z) {
// method body 
}

دالتين مختلفتين في ترتيب نوع المعاملات

public static int max(int x , double y) {
// method body 
}
public static int max(double x , int y) {
// method body 
}

دالتين مختلفتين في نوع المعاملات

public static int max(double x , double y) {
// method body 
}
public static int max(int x , int y) {
// method body 
 }

ليست هناك تعليقات:

إرسال تعليق

ملحوظة: يمكن لأعضاء المدونة فقط إرسال تعليق.

صفحتنا علي الفيسبوك

التسميات

المتواجدين حاليا