JavaRush /Java блогу /Random-KY /Нөл эмес, нөл узундуктагы массивди кайтарыңыз
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. Ката жылдар бою бorнбей калышы мүмкүн, анткени мындай ыкмалар адатта бир же бир нече an objectти кайтарып берет. nullОшондой эле массивдин ордуна кайтаруу массивди кайтарган ыкманын татаалдашына алып келерин белгилей кетүү керек . Кээде нөлдү кайтаруу нөл узундуктагы массивди кайтаруудан артык деп айтышат, анткени ал массивди эс тутумга бөлүштүрүүнүн чыгымын качат. Бул аргумент эки себептен улам ишке ашпай жатат. Биринчиден, программанын профor ушул конкреттүү ыкма натыйжалуулуктун деградациясынын негизги себеби экенин көрсөтпөсө, бул деңгээлдеги көрсөткүчтөр жөнүндө тынчсыздануунун кереги жок. Экинчиден, жазууларды кайтарбаган методго болгон ар бир чалуу кардарга ошол эле нөл узундуктагы массивди өткөрүп бере алат, анткени каалаган нөл узундуктагы массив өзгөрүлбөйт жана өзгөрүлгүс an objectтер бөлүштүрүлүшү мүмкүн. Чындыгында, сиз коллекциядан тип менен башкарылган массивге элементтерди таштоо үчүн стандарттуу идиоманы колдонгондо дал ушундай болот:
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[])киргизүү массиви коллекцияны камтый тургандай чоң болсо, бул кайтарылган нерсени камсыздайт. Ошондуктан, берилген идиома өзү эч качан нөлдүк узундуктагы массивди эс тутумга бөлбөйт, бирок "түргө тиешелүү туруктууну" колдонот. Жыйынтыктап көрөлү. Массив ыкмасы нөл узундуктагы массивди эмес, нөлдү кайтарууга эч кандай себеп жок. Бул идиома массивдин узундугу массивдин өзүнөн өзүнчө кайтарылган С программалоо тorнен келип чыккан окшойт. С тorнде нөл узундуктагы массив үчүн эстутумду бөлүү пайдасыз. Булак: Джошуа Блох, Java TM Effective Programming, Lori Publishing House
Комментарийлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION