الأربعاء، 1 يناير 2020

بناء او انشاء الدوال في جافا Java Methods

بناء او انشاء الدوال في جافا 

Java Methods

بناء او انشاء الدوال في جافا Java Methods

دالة Java عبارة عن مجموعة من العبارات التي تم تجميعها معًا لإجراء عملية.  عند استدعاء الدالة System.out.println () ، على سبيل المثال ، ينفذ النظام فعليًا عدة عبارات لعرض رسالة على وحدة التحكم.

 الآن سوف تتعلم كيفية إنشاء دوالك الخاصة مع أو بدون قيم الإرجاع ، واستدعاء طريقة مع أو بدون معلمات ، وتطبيق تجريد الطريقة في تصميم البرنامج.

انشاء دالة Creating Method

النظر في المثال التالي لشرح بناء جملة طريقة -

 بناء الجملة
public static int methodName(int a, int b) {
   // body
}

هنا,
  • محدد الوصول public static − modifier
  • نوع القيم المرجعة int − return type
  • اسم الدالة methodName − name of the method
  • معلمات او وسيطات وهي متغيرات يتم تمريرها خلال الدالة a, معلمات او وسيطات b − formal parameters
  • قائمة من المتغيرات الوسبطات int a, int b − list of parameters
يتكون تعريف الطريقة من رأس الدالة  ونص الدالة.  يظهر الشيء نفسه في بناء الجملة التالي -

 بناء الجملة
modifier returnType nameOfMethod (Parameter List) {
   // method body
}
يتضمن بناء الجملة الموضح أعلاه -

  • modifier −يحدد نوع الوصول للدالة وهو اختياري للاستخدام. 
  • returnType −قد ترجع الطريقة أو الدالة قيمة.
  •  nameOfMethod − هذا هو اسم الطريقة أو الدالة.  يتكون توقيع الطريقة أو الدالة من اسم الطريقة أو الدالة وقائمة المعلمات المتغيرات الوسيطة.
  • Parameter List − قائمة المعلمات ، وهي نوع المعلمات  او المتغيرات الوسيطة وطريقة ترتيبها وعددها.  هذه اختيارية ، قد تحتوي الطريقة على صفر معلمات.

  • method body − يعرّف نص الطريقة أو الدالة  ما تقوم به الطريقة او الدالة بالعبارات.

مثال Example
في ما يلي الكود المصدري للطريقة المحددة أعلاه والتي تسمى min ().  تأخذ هذه الطريقة معلمتين num1 و num2 وتُرجع الحد الأقصى بين المعلمتين -
/** the snippet returns the minimum between two numbers */

public static int minFunction(int n1, int n2) {
   int min;
   if (n1 > n2)
      min = n2;
   else
      min = n1;

   return min; 
}

استدعاء الدالة Method Calling

لاستخدام طريقة ، ينبغي أن يطلق عليه.  هناك طريقتان تُدعى بهما طريقة ، على سبيل المثال ، تُرجع الطريقة قيمة أو لا تُرجع شيئًا (لا توجد قيمة إرجاع).

 عملية استدعاء الأسلوب بسيطة.  عندما يستدعي البرنامج طريقة ما ، يتم نقل عنصر التحكم في البرنامج إلى الطريقة التي يتم استدعاءها.  هذه الطريقة تسمى ثم إرجاع التحكم إلى المتصل في حالتين ، عندما -

 يتم تنفيذ بيان الإرجاع.
 يصل إلى طريقة إنهاء إغلاق قوس.
 تعتبر أساليب إرجاع الفراغ بمثابة استدعاء إلى بيان.  لننظر في مثال -
System.out.println("This is ahmedalmahallawi.com!");

يمكن فهم الدالة التي  تعيد القيمة عن طريق المثال التالي -
int result = sum(6, 9);

فيما يلي مثال لشرح كيفية تحديد طريقة او دالة وكيفية تسميتها -

 مثال

public class ExampleMinNumber {
   
   public static void main(String[] args) {
      int a = 11;
      int b = 6;
      int c = minFunction(a, b);
      System.out.println("Minimum Value = " + c);
   }

   /** returns the minimum of two numbers */
   public static int minFunction(int n1, int n2) {
      int min;
      if (n1 > n2)
         min = n2;
      else
         min = n1;

      return min; 
   }
}
هذا سوف ينتج النتيجة التالية -

 المخرجات

Minimum value = 6

الكلمة المحجوزة الخالي The void Keyword

تتيح لنا الكلمة الأساسية الخالية إنشاء طرق لا تُرجع قيمة.  هنا ، في المثال التالي ، نفكر في methodoid methodRankPoints.  هذه الطريقة هي طريقة او دالة خالية ، والتي لا تُرجع أي قيمة.  يجب أن يكون الاتصال بأسلوب الفراغ عبارةً أي  نقطة طريقة رتبة (255.7)؛  إنه عبارة Java التي تنتهي بفاصلة منقوطة كما هو موضح في المثال التالي.

 مثال

public class ExampleVoid {

   public static void main(String[] args) {
      methodRankPoints(255.7);
   }

   public static void methodRankPoints(double points) {
      if (points >= 202.5) {
         System.out.println("Rank:A1");
      }else if (points >= 122.4) {
         System.out.println("Rank:A2");
      }else {
         System.out.println("Rank:A3");
      }
   }
Rank:A1

القيم الممرة ذات المرجعية Passing Parameters by Value

أثناء العمل في إطار عملية الاستدعاء ، يتم تمرير الحجج.  يجب أن تكون هذه بنفس ترتيب المعلمات الخاصة بها في مواصفات الطريقة.  يمكن تمرير المعلمات حسب القيمة أو حسب المرجع.

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

public class swappingExample {

   public static void main(String[] args) {
      int a = 30;
      int b = 45;
      System.out.println("Before swapping, a = " + a + " and b = " + b);

      // Invoke the swap method
      swapFunction(a, b);
      System.out.println("\n**Now, Before and After swapping values will be same here**:");
      System.out.println("After swapping, a = " + a + " and b is " + b);
   }

   public static void swapFunction(int a, int b) {
      System.out.println("Before swapping(Inside), a = " + a + " b = " + b);
      
      // Swap n1 with n2
      int c = a;
      a = b;
      b = c;
      System.out.println("After swapping(Inside), a = " + a + " b = " + b);
   }
}

المخرجات
Before swapping, a = 30 and b = 45
Before swapping(Inside), a = 30 b = 45
After swapping(Inside), a = 45 b = 30

**Now, Before and After swapping values will be same here**:
After swapping, a = 30 and b is 45

Method Overloading

عندما يكون للفئة دالتين او  طريقتان أو أكثر بنفس الاسم ولكن مع معلمات مختلفة ، يُعرف باسم التحميل الزائد الدالة او للطريقة.  إنه مختلف عن التجاوز.  في التجاوز ، يكون للطريقة نفس اسم الطريقة ، والنوع ، وعدد المعلمات ، إلخ.

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

 المثال التالي يفسر نفسه -
مثال Example

public class ExampleOverloading {

   public static void main(String[] args) {
      int a = 11;
      int b = 6;
      double c = 7.3;
      double d = 9.4;
      int result1 = minFunction(a, b);
      
      // same function name with different parameters
      double result2 = minFunction(c, d);
      System.out.println("Minimum Value = " + result1);
      System.out.println("Minimum Value = " + result2);
   }

   // for integer
   public static int minFunction(int n1, int n2) {
      int min;
      if (n1 > n2)
         min = n2;
      else
         min = n1;

      return min; 
   }
   
   // for double
   public static double minFunction(double n1, double n2) {
     double min;
      if (n1 > n2)
         min = n2;
      else
         min = n1;

      return min; 
   }
}

المخرجات
Minimum Value = 6
Minimum Value = 7.3

تمرير المتغيرات من خلال سطر الأوامر Using Command-Line Arguments

قد ترغب أحيانًا في تمرير بعض المعلومات إلى برنامج عند تشغيله.  يتم تحقيق ذلك عن طريق تمرير وسيطات سطر الأوامر إلى main ().

 وسيطة سطر الأوامر هي المعلومات التي تتبع اسم البرنامج مباشرةً في سطر الأوامر عند تنفيذه.  من السهل جدًا الوصول إلى وسيطات سطر الأوامر داخل برنامج Java.  يتم تخزينها كسلسلة في صفيف سلسلة تمريرها إلى main ().

 مثال

 يعرض البرنامج التالي كل وسيطات سطر الأوامر التي يطلق عليها -
public class CommandLine {

   public static void main(String args[]) { 
      for(int i = 0; i<args.length; i++) {
         System.out.println("args[" + i + "]: " +  args[i]);
      }
   }
}

نفذ 
$java CommandLine this is a command line 200 -100

المخرجات
args[0]: this
args[1]: is
args[2]: a
args[3]: command
args[4]: line
args[5]: 200
args[6]: -100

الكلمة المحجوزة هذه The this keyword

هذه هي الكلمة الأساسية في Java والتي يتم استخدامها كمرجع لكائن الفئة الحالية ، مع طريقة المثيل أو المُنشئ.  باستخدام هذا ، يمكنك الرجوع إلى أعضاء الفصل مثل المنشئات والمتغيرات والأساليب.

 ملاحظة - الكلمة الأساسية التي يتم استخدامها فقط داخل أساليب المثيل أو المُنشئين
This
In general, the keyword this is used to −
  • قم بتمييز متغيرات المثيل عن المتغيرات المحلية إذا كانت لها نفس الأسماء ، داخل مُنشئ أو طريقة.
class Student {
   int age;   
   Student(int age) {
      this.age = age; 
   }
}

  • استدعاء نوع واحد من المنشئ (المنشئ المعلمة أو الافتراضي) من الآخر في فئة.  ومن المعروف باسم استدعاء منشئ صريح.
class Student {
   int age
   Student() {
      this(20);
   }
   
   Student(int age) {
      this.age = age; 
   }
}
مثال Example
فيما يلي مثال يستخدم هذه الكلمة الأساسية للوصول إلى أعضاء الفصل.  انسخ والصق البرنامج التالي في ملف يحمل الاسم ، This_Example.java.

public class This_Example {
   // Instance variable num
   int num = 10;
 
   This_Example() {
      System.out.println("This is an example program on keyword this"); 
   }

   This_Example(int num) {
      // Invoking the default constructor
      this();
      
      // Assigning the local variable num to the instance variable num
      this.num = num;    
   }
   
   public void greet() {
      System.out.println("Hi Welcome to Tutorialspoint");
   }
      
   public void print() {
      // Local variable num
      int num = 20;
      
      // Printing the local variable
      System.out.println("value of local variable num is : "+num);
      
      // Printing the instance variable
      System.out.println("value of instance variable num is : "+this.num);
      
      // Invoking the greet method of a class
      this.greet();     
   }
   
   public static void main(String[] args) {
      // Instantiating the class
      This_Example obj1 = new This_Example();
      
      // Invoking the print method
      obj1.print();
   
      // Passing a new value to the num variable through parametrized constructor
      This_Example obj2 = new This_Example(30);
      
      // Invoking the print method again
      obj2.print(); 
   }
}

المخرجات
This is an example program on keyword this 
value of local variable num is : 20
value of instance variable num is : 10
Hi Welcome to Tutorialspoint
This is an example program on keyword this 
value of local variable num is : 20
value of instance variable num is : 30
Hi Welcome to Tutorialspoint

Variable Arguments(var-args)

يتيح لك JDK 1.5 المرور بعدد متغير من

 الوسائط من نفس النوع إلى طريقة.  يتم الإعلان عن المعلمة في الطريقة كما يلي -

typeName... parameterName

في تعريف الدالة ، يمكنك تحديد النوع الذي يليه علامة القطع (...).  يمكن تحديد معلمة متغيرة الطول واحدة فقط في إحدى الطرق او الدوال ، ويجب أن تكون هذه المعلمة هي المعلمة الأخيرة.  يجب أن تسبق أي معلمات العادية.

 مثال

public class VarargsDemo {

   public static void main(String args[]) {
      // Call method with variable args  
    printMax(34, 3, 3, 2, 56.5);
      printMax(new double[]{1, 2, 3});
   }

   public static void printMax( double... numbers) {
      if (numbers.length == 0) {
         System.out.println("No argument passed");
         return;
      }

      double result = numbers[0];

      for (int i = 1; i <  numbers.length; i++)
      if (numbers[i] >  result)
      result = numbers[i];
      System.out.println("The max value is " + result);
   }
}

المخرجات
The max value is 56.5
The max value is 3.0

دالة الانهاء او تدمير  الكائن  The finalize( ) Method

من الممكن تحديد طريقة سيتم استدعاؤها قبل تدمير الكائن نهائيًا بواسطة جامع البيانات المهملة.  تسمى هذه الطريقة finalize () ، ويمكن استخدامها للتأكد من أن الكائن ينتهي بشكل نظيف.

 على سبيل المثال ، يمكنك استخدام finalize () للتأكد من إغلاق ملف مفتوح يمتلكه هذا الكائن.

 لإضافة finalizer إلى فصل دراسي ، يمكنك ببساطة تحديد طريقة finalize ().  يستدعي وقت تشغيل Java هذه الطريقة كلما كان على وشك إعادة تدوير كائن من هذه الفئة.

 داخل طريقة finalize () ، سوف تحدد تلك الإجراءات التي يجب تنفيذها قبل إتلاف كائن.

 طريقة finalize () لديها هذا النموذج العام -
protected void finalize( ) {
   // finalization code here
}

هنا ، الكلمة المحمية هي محدد يمنع الوصول إلى اللمسات الأخيرة () برمز معرف خارج فئتها.

 هذا يعني أنه لا يمكنك معرفة متى أو حتى إذا كان سيتم تنفيذ () final.  على سبيل المثال ، إذا انتهى البرنامج قبل حدوث تجميع البيانات المهملة ، فلن يتم تنفيذ () إنهاء ().


التسميات: