JavaRush /Java Blogu /Random-AZ /Null deyil, sıfır uzunluqlu massivi qaytarın
alexnjc
Səviyyə

Null deyil, sıfır uzunluqlu massivi qaytarın

Qrupda dərc edilmişdir
Çox vaxt bu kimi görünən üsullar var:
private List cheesesInStock =;
/**
* @return массив, содержащий все сыры, имеющиеся в магазине,
* or null, если сыров для продажи нет.
*/
public Cheese[] getCheeses() {
if (cheesesInStock.size() == 0)
return null;
}
Satışda pendirin olmadığı bir vəziyyətə xüsusi bir hal kimi baxmağa heç bir səbəb yoxdur. Bu, müştəridən metodun qaytarılan dəyərini emal etmək üçün əlavə kod yazmasını tələb edir пull, məsələn:
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.");
sadə əvəzinə:
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.");
Bu cür təfərrüat sıfır uzunluqlu massiv əvəzinə null qaytaran demək olar ki, hər bir metod çağırışı üçün lazımdır. Bu, səhvlərlə doludur, çünki müştəri tərtibçisi nəticəni emal etmək üçün xüsusi kod yazmamış ola bilər null. Səhv illər ərzində aşkarlanmaya bilər, çünki bu cür üsullar adətən bir və ya bir neçə obyekti qaytarır. Onu da qeyd etmək lazımdır ki, nullmassiv yerinə qayıtmaq massivi qaytaran metodun özünün mürəkkəbləşməsinə gətirib çıxarır. Bəzən belə bir fikir irəli sürülür ki, sıfır uzunluqlu massivi qaytarmaqdansa null dəyərini qaytarmaq daha üstündür, çünki o, massivi yaddaşda yerləşdirmək üçün xərclərdən qaçır. Bu arqument iki səbəbdən uğursuz olur. Birincisi, proqramın profilləşdirilməsi bu xüsusi metodun performansın azalmasının əsas səbəbi olduğunu göstərməyincə, bu səviyyədə performans barədə narahat olmağın mənası yoxdur. İkincisi, qeydləri qaytarmayan metoda edilən hər bir çağırış müştəriyə eyni sıfır uzunluqlu massivi ötürə bilər, çünki istənilən sıfır uzunluqlu massiv dəyişməzdir və dəyişməz obyektlər paylaşıla bilər. Kolleksiyadan elementləri tipə nəzarət edilən massivə köçürmək üçün standart idiomdan istifadə edərkən əslində belə olur:
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АУ);
}
Bu idiomda, sıfır uzunluqlu massivtoArray kimi sabit hansı növə qayıtmalı olduğunu göstərmək üçün metoda ötürülür. Tipik olaraq, metod toArrayqaytarılmış massiv üçün yaddaş sahəsi ayırır, lakin kolleksiya boşdursa, o, giriş massivinə yerləşdirilir və spesifikasiya Сollесtion,tоАггау(Оbjесt[])təmin edir ki, giriş massivi kolleksiyanı ehtiva edəcək qədər böyükdürsə, qaytarılan budur. Buna görə də, təqdim edilmiş idiom özü heç vaxt sıfır uzunluqlu massivi yaddaşa yerləşdirməz, lakin bu kimi “növə xas sabitdən” istifadə edir. Gəlin ümumiləşdirək. Massiv metodunun sıfır uzunluqlu massivdən daha çox null qaytarması üçün heç bir səbəb yoxdur. Bu idiom C proqramlaşdırma dilindən qaynaqlanır, burada massivin uzunluğu serialın özündən ayrıca qaytarılır. C-də sıfır uzunluqlu massiv üçün yaddaş ayırmaq faydasızdır. Mənbə: Joshua Bloch, Java TM Effective Programming, Lori Publishing House
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION