Студопедия  
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Возвращайте массив нулевой длины, а не null

Читайте также:
  1. RAID 2. Отказоустойчивый дисковый массив с использованием кода Хемминга (Hamming Code ECC).
  2. RAID 50. Отказоустойчивый массив с распределенной четностью и повышенной производительностью
  3. RAID массивы. История создания RAID массивов. Основные преимущества и недостатки RAID массивов всех уровней. Принципы работы.
  4. Возвращайтесь на путь, который ведет вас вверх по просторам собственного бытия. И вы почувствуете себя лучше уже в процессе.
  5. Возвращение массива
  6. Выборгский массив
  7. Инициализация массива
  8. Интерьерная мозаика «Хамелеон» из массива разных пород дерева.
  9. Линейные массивы

 

Нередко встречаются методы, имеющие следующий вид:

private List cheesesInStock =...;

/**

* @return массив, содержащий все сыры, имеющиеся в магазине,

* или 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.");

 

Такого рода многоречивость необходима почти при каждом вызове метода, кото­рый BM~CTO массива нулевой длины возвращает null. Это чревато ошибками, так как разработчик клиента мог и не написать специальный код для обработки результата null. Ошибка может оставаться незамеченной годами, поскольку подобные методы, как правило, возвращают один или несколько объектов. Следует еще упомянуть о том, что возврат null вместо массива приводит к усложнению самого метода, возвращаю­щего массив.

Иногда можно услышать возражения, что возврат значения null предпочтитель­нее возврата массива нулевой длины потому, что это позволяет избежать расходов на размещение массива в памяти. Этот аргумент несостоятелен по двум причинам. Во-первых, на этом уровне нет смысла беспокоиться о производительности, если толь­ко профилирование программы не покажет, что именно этот метод является основной причиной падения производительности (статья 37). Во-вторых, при каждом вызове метода, который не возвращает записей, клиенту можно передавать один и тот же массив нулевой длины, поскольку любой массив нулевой длины неизменяем, а неизме­няемые объекты доступны для совместного использования (статья 13). На самом деле, именно это и происходит, когда вы применяете стандартную идиому для выгрузки элементов из коллекции в массив с контролем типа:

 

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оАггау(ОЬjесt[] дает гарантию, что если входной' массив будет достаточно вместителен, чтобы со­держать коллекцию, возвращен будет именно он. Поэтому представленная идиома никогда не будет сама размещать в памяти массив нулевой длины, а в качестве такового использует "константу с указанием типа".

Подведем итоги. Нет никаких причин для того, чтобы работающий с массива­ми метод возвращал значение null, а не массив нулевой длины. Такая идиома, по-видимому, проистекает из языка программирования С, где длина массива возвра­щается отдельно от самого массива. В языке С бесполезно выделять память под массив нулевой длины.

 




Дата добавления: 2015-09-11; просмотров: 28 | Поможем написать вашу работу | Нарушение авторских прав

Предпочитайте интерфейсы абстрактным классам. | Используйте интерфейсы только для определения типов | Предпочитайте статические классы-члены нестатическим | Аменяйте структуру классом | Амеияйте объедииеиие иерархией классов | Аменяйте конструкцию enum классом | Указатель на функцию заменяйте кпассом и интерфейсом | Проверяйте достоверность параметров | При необходимости создавайте резервные копии | Тщательно проектируйте сигнатуру метода |


lektsii.net - Лекции.Нет - 2014-2024 год. (0.008 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав