- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
public ArrayList<String> bookListByAuthor(String author)
{
ArrayList<String> bookList = null;
for (BookType bType : bookTypes)
{
ArrayList<String> authors = bType.getBookAuthors();
for (String bookAuthor : authors)
{
if (author.equalsIgnoreCase(bookAuthor))
{
if (bookList == null)
{
bookList = new ArrayList<String>(INITIAL_CAPACITY);
}
bookList.add(author);
break;
}
}
}
return bookList == null ? null : bookList;
}
SmackMyBitchUp 31.10.2011 14:30 # 0
return жесткий. Хочу из этого же проекта классы реализующие запросы к БД.
roman-kashitsyn 31.10.2011 14:39 # 0
SmackMyBitchUp 31.10.2011 15:29 # 0
dwinner 31.10.2011 15:08 # 0
не найдется, bookList итак null'ом будем. Ещё забавляет попытка экономии
памяти с отложенной инициализацией, но это уже другая история...
roman-kashitsyn 31.10.2011 15:12 # 0
2. Вообще возвращать null - дурацкая идея, для этого есть Collections.emptyList()
3. Напрягает алгоритм перебора с квадратичной сложностью
SmackMyBitchUp 31.10.2011 15:32 # 0
roman-kashitsyn 31.10.2011 15:56 # 0
tir 31.10.2011 15:33 # 0
2. Почему возвращать null плохо?
3. Как улучшить алгоритм?
roman-kashitsyn 31.10.2011 15:51 # 0
2. К примеру, в моём проекте 80% критических ошибок связано с NPE
3. Использовать для поиска БД
tir 31.10.2011 15:56 # 0
roman-kashitsyn 31.10.2011 15:58 # 0
tir 31.10.2011 16:01 # 0
roman-kashitsyn 31.10.2011 16:03 # 0
Ну да, а ждать, пока нажатие на "Другие книги этого автора" будет выполнять поиск по БД с квадратичной сложностью - не спорно. Ну-ну.
tir 31.10.2011 16:12 # 0
П. С. Хотя в данном примере наверное все-таки логично было бы создать сущность. Ибо Пушкин написал далеко не одну книгу.
roman-kashitsyn 31.10.2011 16:17 # 0
tir 31.10.2011 16:19 # 0
tir 31.10.2011 16:05 # 0
2. В целом соглашусь. Сам предпочитаю никогда не возвращать null. Использую emptyList().
С другой стороны это может быть логика: либо Null, либо в списке по крайней мере один элемент. Отчасти дело вкуса.
3. Описал чуть выше, когда это сделать не получится
roman-kashitsyn 31.10.2011 16:11 # 0
Зависит от семантики. Однозначного ответа быть не может.
tir 31.10.2011 16:14 # 0
roman-kashitsyn 31.10.2011 16:19 # 0
tir 31.10.2011 16:27 # 0
roman-kashitsyn 31.10.2011 16:31 # 0
tir 31.10.2011 16:35 # 0
roman-kashitsyn 31.10.2011 16:36 # 0
tir 31.10.2011 16:45 # +1
Не вижу ничего зазорного в некоторых случаях возвращать конкретную реализацию, вместо интерфейса.
П. С. Вообще в беседе пока только мы вдвоем учавствуем как-то =)
roman-kashitsyn 31.10.2011 16:50 # 0
tir 31.10.2011 16:57 # 0
именно потому, что в жаве хрен так просто что-то отфильтруешь.
roman-kashitsyn 31.10.2011 17:07 # 0
tir 31.10.2011 17:11 # 0
roman-kashitsyn 31.10.2011 17:16 # 0
tir 31.10.2011 17:17 # 0
roman-kashitsyn 31.10.2011 17:18 # 0
tir 31.10.2011 17:20 # 0
roman-kashitsyn 31.10.2011 17:23 # 0
Ещё часто вижу примеры, где Lisp бы идеально подошёл для создания DSL (последнее, что приходило в голову - генерация MathML-кода). Поэтому подумываю поближе посмотреть Clojure в ближайшем будущем.
tir 31.10.2011 17:47 # −1
gegMOPO4 06.11.2011 21:06 # 0
roman-kashitsyn 07.11.2011 09:38 # +1
lucidfoxGovno 07.11.2011 10:18 # 0
Что это?
roman-kashitsyn 07.11.2011 10:20 # 0
Is Google broken today?
lucidfoxGovno 07.11.2011 10:40 # −5
tir 31.10.2011 16:24 # 0
Я, например, иногда пишу небезопасный код: в API возвращается List, а я его модифицирую, зная, что его можно модифицировать, т. к. возвращается копия да к тому же изменяемая.
Так почему же возвращать ArrayList - это плохо? Вроде как сразу явная декларация намерений происходит =)
roman-kashitsyn 31.10.2011 16:29 # 0
> явная декларация намерений
когда я вижу метод, который возвращает ArrayList, я скорее буду воспринимать это как неопытность автора кода, чем как декларацию намерений. И, скорее всего, полезу в сорцы. Не проще ли написать по-человечески и задокументировать семантику?
tir 31.10.2011 16:41 # 0
И вообще этот больше смахивает на метод модели.
>когда я вижу метод, который возвращает ArrayList, я скорее буду воспринимать это как неопытность автора кода
в public методах пожалуй соглашусь
>написать по-человечески и задокументировать семантику
код по сути тоже может являться документацией. ведь юнит-тесты по сути документация.
Lure Of Chaos 31.10.2011 19:24 # 0
да нет, как раз-таки это нормально - возвращать конкретный подкласс - так больше возможностей манипуляции с ним.
а вот на вход хорошая практика подавать интерфейсы
tir 31.10.2011 16:33 # 0
А просто "return bookList;" не дает ответа может ли возвращаться null или нет.
SmackMyBitchUp 31.10.2011 18:11 # 0
tir 31.10.2011 18:55 # 0
SmackMyBitchUp 31.10.2011 20:08 # 0
Поэтому, если меня просят что-то посмотреть требую описание методов. Хотя бы на любом сленге, которым обладает индивид. Вот это и есть "документация". Но, сами понимаете, еще надо найти понимающих свою же логику студентов :D
roman-kashitsyn 31.10.2011 14:32 # −1
bot-minurast 31.10.2011 14:38 # −2
tir 31.10.2011 15:45 # 0
tir 31.10.2011 15:39 # 0
roman-kashitsyn 31.10.2011 16:36 # +1
> bookList.add(author);
tir 31.10.2011 16:47 # 0
roman-kashitsyn 31.10.2011 18:29 # 0
3.14159265 31.10.2011 18:47 # 0
Оно будет работать раз в 5 медленней, верно?
Как скала обрабатывает пресловутые nullы?
roman-kashitsyn 31.10.2011 18:57 # 0
2. В Scala не принято вообще использовать null. Пустые списки, как правило, инициализируются значением Nil, что в некотором роде аналогично Collections.emptyList(). Если результат поиска может быть неопределён (find в примере), возвращается инстанс класса Option, который может содержать, а может и не содержать значение (вызов isDefined в примере). Null в любом случае не возвращается.
3.14159265 31.10.2011 19:07 # 0
roman-kashitsyn 31.10.2011 19:12 # +1
SmackMyBitchUp 31.10.2011 20:10 # 0
AnimeGovno-_- 31.10.2011 21:08 # −4
roman-kashitsyn 31.10.2011 21:13 # 0
а вообще писать на функциональных языках - огромное удовольствие.
bugmenot 31.10.2011 21:53 # −2
от слова "поганый"?
roman-kashitsyn 31.10.2011 22:03 # 0
fixed? :)
bugmenot 31.10.2011 23:09 # −2
AnimeGovno-_- 31.10.2011 22:00 # −3
jabber 07.11.2011 00:14 # −2
lucidfoxGovno 07.11.2011 10:24 # 0
Что, в данном случае, обозначает символ _ ?
Глобальное пространство имен?
roman-kashitsyn 07.11.2011 10:34 # 0
lucidfoxGovno 07.11.2011 10:39 # 0
guest8 09.04.2019 11:51 # −999