JavaRush /مدونة جافا /Random-AR /قم بإرجاع مصفوفة ذات طول صفري، وليست فارغة
alexnjc
مستوى

قم بإرجاع مصفوفة ذات طول صفري، وليست فارغة

نشرت في المجموعة
غالبًا ما تكون هناك طرق تبدو كالتالي:
private List cheesesInStock =;
/**
* @return массив, содержащий все сыры, имеющиеся в магазине,
* or null, если сыров для продажи нет.
*/
public Cheese[] getCheeses() {
if (cheesesInStock.size() == 0)
return null;
}
لا يوجد سبب للتعامل مع الحالة التي لا يكون فيها الجبن معروضًا للبيع كحالة خاصة. يتطلب ذلك من العميل كتابة تعليمات برمجية إضافية لمعالجة القيمة المرجعة للطريقة пull، على سبيل المثال:
Cheese[] cheeses = shop.getCheeses();
if (cheeses ! = пull &&
Аrrауs.аsList(shор.gеtСhееsеs()).соntаins(Сhееsе.SТILТON))
Sуstеm.оut.рrintln("Jоllу good, just the thing.");
بدلا من بسيطة:
if  (Аrrаys.аsList(shор.gеtСhееsеs()).соntаins(Сhееsе.SТILTON)) Sуstеm.оut.рrintln("Jоllу good, just the thing.");
يعد هذا النوع من الإسهاب ضروريًا لكل استدعاء أسلوب تقريبًا يُرجع قيمة خالية بدلاً من مصفوفة ذات طول صفري. وهذا أمر محفوف بالأخطاء، حيث أن مطور العميل ربما لم يكتب تعليمات برمجية خاصة لمعالجة النتيجة null. قد لا يتم اكتشاف الخطأ لسنوات لأن هذه الأساليب عادةً ما تُرجع كائنًا واحدًا أو أكثر. تجدر الإشارة أيضًا إلى أن العودة nullبدلاً من المصفوفة تؤدي إلى تعقيد الطريقة نفسها التي تُرجع المصفوفة. يُقال أحيانًا أن إرجاع القيمة الخالية أفضل من إرجاع مصفوفة ذات طول صفري لأنها تتجنب تكلفة تخصيص المصفوفة في الذاكرة. فشلت هذه الحجة لسببين. أولاً، لا داعي للقلق بشأن الأداء عند هذا المستوى إلا إذا أظهر ملف تعريف البرنامج أن هذه الطريقة بالذات هي السبب الرئيسي لتدهور الأداء. ثانيًا، يمكن لكل استدعاء لطريقة لا تُرجع سجلات تمرير نفس المصفوفة ذات الطول الصفري إلى العميل، لأن أي مصفوفة ذات طول صفري غير قابلة للتغيير، ويمكن مشاركة الكائنات غير القابلة للتغيير. في الواقع، هذا هو بالضبط ما يحدث عندما تستخدم المصطلح القياسي لتفريغ عناصر من مجموعة إلى مصفوفة يتم التحكم فيها بالنوع:
private List сhееsеsInStосk =,
private fiпаl static Cheese[] NULL_CHEESE_ARRAY = nеw Cheese[0];
 /**
* @геtuгп массие, содержащий все сыры, имеющиеся в магазине
*/
public Cheese[] getCheeses() {
геtuгп (Cheese[] сhееsеsInStосk.tоАггау(NULL_СНЕЕSЕ_АRRАУ);
}
في هذا المصطلح، يتم تمرير ثابت، كمصفوفة ذات طول صفري ،toArray إلى طريقة للإشارة إلى النوع الذي يجب أن يُرجعه. عادة، تقوم الطريقة toArrayبتخصيص مساحة الذاكرة للمصفوفة التي تم إرجاعها، ولكن إذا كانت المجموعة فارغة، فسيتم وضعها في مصفوفة الإدخال، وتضمن المواصفات Сollесtion,tоАггау(Оbjесt[])أنه إذا كانت مصفوفة الإدخال كبيرة بما يكفي لاحتواء المجموعة، فهذا هو ما يتم إرجاعه. ولذلك، فإن المصطلح المقدم لن يقوم أبدًا بتخصيص مصفوفة ذات طول صفري في الذاكرة، ولكنه يستخدم "ثابتًا خاصًا بالنوع" على هذا النحو. دعونا نلخص. لا يوجد أي سبب لإرجاع طريقة الصفيف فارغة بدلاً من صفيف ذي طول صفري. يبدو أن هذا المصطلح ينبع من لغة البرمجة C، حيث يتم إرجاع طول المصفوفة بشكل منفصل عن المصفوفة نفسها. في لغة C، ليس من المفيد تخصيص ذاكرة لمصفوفة ذات طول صفري. المصدر: جوشوا بلوخ، البرمجة الفعالة لـ Java TM، دار نشر لوري
تعليقات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION