0Pricing
Java Academy · درس

التمرير بالقيمة في Java

افهم التمرير بالقيمة في Java: الأنواع البدائية مقابل المراجع، وإعادة الإسناد مقابل التغيير، ومشكلات المصفوفات وعدم القابلية للتغيير.

التمرير بالقيمة في Java درس مجاني في Java Academy على CoddyKit. هذا هو الدرس 1 من أصل 3. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Java Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Java Academy 3 دروس في المجموع.

نظرة عامة على التمرير بالقيمة

الهدف: تعلّم كيفية تمرير Java للمعاملات. قارنوا بين الأنواع البدائية والمراجع، وإعادة الإسناد والتعديل، والمصفوفات، وعدم القابلية للتغيير.

نسخ الأنواع البدائية

تُمرَّر الأنواع البدائية بالقيمة، فتحصل الدالة المستدعاة على نسخة. ولا تغيّر إعادة إسناد المعامل متغير المستدعي.

public class Main {
  static void inc(int x) {
    x = x + 1; // modifies the local copy only
  }
  public static void main(String[] args) {
    int a = 5;
    inc(a);
    System.out.println("a after inc(a) = " + a); // still 5
  }
}

المراجع: التعديل مقابل إعادة الإسناد

بالنسبة إلى الكائنات، تُنسخ المرجعية. ويؤثر التعديل من خلالها في كائن المستدعي، بينما لا تؤثر إعادة إسناد المعامل.

public class Main {
  static class Box { int n; }
  static void setTo999(Box b) { b.n = 999; } // mutate via copied reference
  static void reassign(Box b) { b = new Box(); b.n = 123; } // reassign local copy only
  public static void main(String[] args) {
    Box bx = new Box();
    bx.n = 10;
    setTo999(bx);
    System.out.println("after setTo999: bx.n = " + bx.n); // 999
    reassign(bx);
    System.out.println("after reassign: bx.n = " + bx.n); // still 999
  }
}

المصفوفات: التعديل مقابل إعادة الإسناد

المصفوفات كائنات. عدّلوا المصفوفة للتأثير في كائن المستدعي، أما إعادة إسناد المعامل فلا تستبدل مصفوفة المستدعي.

public class Main {
  static void fillZero(int[] a) {
    for (int i = 0; i < a.length; i = i + 1) a[i] = 0; // mutate caller array
  }
  static void replace(int[] a) {
    a = new int[] {9, 9, 9}; // reassign local copy of the reference
  }
  public static void main(String[] args) {
    int[] arr = {1, 2, 3};
    fillZero(arr);
    System.out.println("after fillZero: " + arr[0] + "," + arr[1] + "," + arr[2]); // 0,0,0
    replace(arr);
    System.out.println("after replace:  " + arr[0] + "," + arr[1] + "," + arr[2]); // still 0,0,0
  }
}

غير قابل للتغيير مقابل قابل للتغيير

إن String غير قابل للتغيير، إذ يعيد كائنات جديدة، بينما إن StringBuilder قابل للتغيير، إذ يعدّل المثيل نفسه.

public class Main {
  static void tryChangeString(String s) {
    s = s + "!"; // new String; original unchanged
  }
  static void changeBuilder(StringBuilder sb) {
    sb.append("!"); // mutates same object
  }
  public static void main(String[] args) {
    String s = "hi";
    tryChangeString(s);
    System.out.println("after tryChangeString: " + s); // "hi"

    StringBuilder sb = new StringBuilder("hi");
    changeBuilder(sb);
    System.out.println("after changeBuilder:  " + sb.toString()); // "hi!"
  }
}

التبديل بطريقة صحيحة

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

public class Main {
  static void trySwap(int a, int b) {
    int t = a; a = b; b = t; // swaps local copies only
  }
  static int[] swap(int a, int b) {
    return new int[] { b, a }; // return results to the caller
  }
  public static void main(String[] args) {
    int x = 1, y = 2;
    trySwap(x, y);
    System.out.println("after trySwap: x=" + x + ", y=" + y); // 1,2
    int[] res = swap(x, y);
    x = res[0]; y = res[1];
    System.out.println("after swap:    x=" + x + ", y=" + y); // 2,1
  }
}

التحقق من التمرير بالقيمة

تحقق سريع: أي عبارة عن تمرير Java للمعاملات صحيحة؟

مراجعة والخطوة التالية

مراجعة: رأيتم الفرق بين الأنواع البدائية والمراجع، والتعديل وإعادة الإسناد، والمصفوفات بوصفها كائنات، وعدم القابلية للتغيير، ونمط التبديل الآمن. الخطوة التالية: الدوال static مقابل دوال instance.

الأسئلة الشائعة

هل درس «التمرير بالقيمة في Java» مجاني؟

نعم — نص درس «التمرير بالقيمة في Java» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Java Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Java Academy 3 دروس في المجموع.

ماذا ستتعلم في «التمرير بالقيمة في Java»؟

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

هل أحتاج إلى خبرة سابقة لأبدأ Java Academy؟

لا تُشترط خبرة سابقة. Java Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 3.

كم من الوقت يستغرق درس «التمرير بالقيمة في Java»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Java Academy هذا؟

نعم. كل درس في Java Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. التمرير بالقيمة في Java
  2. الدوال static مقابل دوال الكائن
  3. تفكيك الدوال والشفرة النظيفة
← العودة إلى Java Academy