JavaRush /Java блогы /Random-KK /Нөлдік емес, нөлдік ұзындық массивін қайтарыңыз
alexnjc
Деңгей

Нөлдік емес, нөлдік ұзындық массивін қайтарыңыз

Топта жарияланған
Көбінесе келесідей әдістер бар:
private List cheesesInStock =;
/**
* @return массив, содержащий все сыры, имеющиеся в магазине,
* or null, если сыров для продажи нет.
*/
public Cheese[] getCheeses() {
if (cheesesInStock.size() == 0)
return null;
}
Сатылымда ірімшік жоқ жағдайды ерекше жағдай ретінде қарастыруға негіз жоқ. Бұл клиенттен әдістің қайтару мәнін өңдеу үшін қосымша code жазуын талап етеді п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.");
Ұзындығы нөлдік массивтің орнына нөлді қайтаратын әрбір дерлік әдіс шақыруының бұл түрі қажет. Бұл қателерге толы, себебі клиент әзірлеушісі нәтижені өңдеу үшін арнайы code жазбаған болуы мүмкін 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 бағдарламалау тілінен шыққан сияқты. Си тілінде нөлдік ұзындықтағы массив үшін жадты бөлу пайдасыз. Дереккөз: Джошуа Блох, Java TM Effective Programming, Lori Publishing House
Пікірлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION