الكلمة المفتاحية yield
أنشئوا قيمًا من كتل switch
الكلمة المفتاحية yield درس مجاني في Java Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Java Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Java Academy 4 دروس في المجموع.
عندما لا يكفي سطر واحد
يعيد فرع سهم مثل case 1 -> 42; قيمةً مباشرةً. ولكن ماذا لو احتاج الفرع إلى عدة عبارات قبل إنتاج قيمته؟ هنا يأتي دور yield.
الكلمة المفتاحية yield
داخل فرع كتلة { }، توفّر الكلمة المفتاحية yield القيمة التي ينتجها تعبير switch. فكّر فيها على أنها return، لكنها خاصة بفرع switch.
public class Main {
public static void main(String[] args) {
int n = 3;
int result = switch (n) {
case 3 -> {
int squared = n * n;
yield squared;
}
default -> 0;
};
System.out.println(result);
}
}استخدام yield داخل كتلة
يمكنك تنفيذ أي منطق داخل الكتلة قبل استدعاء yield. وينبغي أن تكون آخر عملية تنفذها الكتلة هي استخدام yield لإرجاع قيمة.
public class Main {
public static void main(String[] args) {
int amount = 250;
String label = switch (amount / 100) {
case 0 -> "small";
default -> {
System.out.println("Computing label...");
yield "large";
}
};
System.out.println(label);
}
}الخلط بين فروع السهم والكتل
يمكن لتعبير switch واحد أن يجمع بين فروع السهم البسيطة وفروع الكتل التي تستخدم yield. استخدم الصيغة الأنسب لكل حالة.
public class Main {
public static void main(String[] args) {
int code = 2;
String msg = switch (code) {
case 1 -> "One";
case 2 -> {
String s = "T" + "wo";
yield s;
}
default -> "Other";
};
System.out.println(msg);
}
}إجراء الحساب قبل yield
تكون فروع الكتل مناسبة عندما تحتاج القيمة إلى حساب. نجمع الأرقام هنا قبل استخدام yield لإرجاع المجموع.
public class Main {
public static void main(String[] args) {
int category = 1;
int value = switch (category) {
case 1 -> {
int sum = 0;
for (int i = 1; i <= 5; i++) {
sum += i;
}
yield sum;
}
default -> 0;
};
System.out.println(value);
}
}yield مقابل return
يخرج yield من فرع switch فقط ويعيد قيمة. أما return فيخرج من الدالة بأكملها. لذلك استخدم yield داخل كتلة تعبير switch.
public class Main {
static int classify(int n) {
int rank = switch (n) {
case 0 -> 0;
default -> {
yield (n > 0) ? 1 : -1;
}
};
return rank;
}
public static void main(String[] args) {
System.out.println(classify(-7));
}
}استخدام yield في صيغة النقطتين القديمة
يمكن أيضًا أن تكون صيغة switch ذات النقطتين تعبيرًا باستخدام yield بدلًا من break. ويعيد كل قسم ذي تسمية قيمته.
public class Main {
public static void main(String[] args) {
int day = 2;
String name = switch (day) {
case 1: yield "Mon";
case 2: yield "Tue";
default: yield "Other";
};
System.out.println(name);
}
}استخدام yield بشكل مشروط
يمكن أن يحتوي فرع الكتلة على منطق if وأن يعيد قيمًا مختلفة في المسارات المختلفة باستخدام yield. ويجب أن يعيد كل مسار قيمة.
public class Main {
public static void main(String[] args) {
int temp = 30;
String advice = switch (temp / 10) {
case 3 -> {
if (temp > 35) {
yield "Very hot";
}
yield "Warm";
}
default -> "Mild";
};
System.out.println(advice);
}
}إرجاع الكائنات
يعمل yield مع أي نوع، بما في ذلك الكائنات. تبني الكتلة هنا نتيجة StringBuilder وتعيدها على هيئة String.
public class Main {
public static void main(String[] args) {
int count = 3;
String stars = switch (count) {
case 0 -> "";
default -> {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < count; i++) {
sb.append("*");
}
yield sb.toString();
}
};
System.out.println(stars);
}
}نصيحة لتحسين قابلية القراءة
فضّل فروع السهم البسيطة عندما تكفي قيمة واحدة. ولا تستخدم الكتلة وyield إلا عندما يحتاج الفرع فعلًا إلى عبارات إضافية. فهذا يحافظ على ترتيب switch ووضوحه.
public class Main {
public static void main(String[] args) {
int level = 2;
int xp = switch (level) {
case 1 -> 100;
case 2 -> {
int base = 100;
yield base * 2;
}
default -> 0;
};
System.out.println(xp);
}
}مثال كامل
لنجمع كل ذلك في مثال واحد: محوّل لحالات بأسلوب HTTP يستخدم فروع السهم وفروع الكتل معًا.
public class Main {
public static void main(String[] args) {
int status = 404;
String message = switch (status / 100) {
case 2 -> "Success";
case 4 -> {
String base = "Client error ";
yield base + status;
}
case 5 -> "Server error";
default -> "Unknown";
};
System.out.println(message);
}
}تحقق سريع
داخل فرع متعدد العبارات في تعبير switch، ما الكلمة المفتاحية التي توفّر القيمة الناتجة؟
مراجعة
تعلمت الكلمة المفتاحية yield:
- ينتج
yieldقيمة من فرع كتلة - يشبه
return، لكنه يقتصر على فرعswitchفقط - اخلط بين فروع السهم وفروع الكتل بحرية
- يجب أن يستخدم كل مسار في الكتلة
yield - استخدم الكتل فقط عند الحاجة إلى عبارات إضافية
الأسئلة الشائعة
هل درس «الكلمة المفتاحية yield» مجاني؟
نعم — نص درس «الكلمة المفتاحية yield» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Java Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Java Academy 4 دروس في المجموع.
ماذا ستتعلم في «الكلمة المفتاحية yield»؟
أنشئوا قيمًا من كتل switch تتمرن على Java Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Java Academy؟
لا تُشترط خبرة سابقة. Java Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «الكلمة المفتاحية yield»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Java Academy هذا؟
نعم. كل درس في Java Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- صيغة switch بأسلوب السهم
- استخدام switch كتعبير
- الكلمة المفتاحية yield
- حالات متعددة التسميات