[Из песочницы] Как generic-и нас спасают от упаковки
Комментарии (8)
7 июля 2017 в 22:26
0↑
↓
Хочется отметить вопрос терминологии. Value types переводятся как «значимые», а не вещественные. Этот вопрос принципиален, так как, например, тип Int32 (Value type, как вы понимаете) является целочисленным, не вещественным.7 июля 2017 в 23:13
+1↑
↓
Спасибо, поправил.
7 июля 2017 в 23:03
0↑
↓
Опыт работы с приложением для автоматизации ВУЗа показывает, что такие исключения (ArgumentNullException) характерны для недописанного софта… Ведь логика (если нет бананов, купи яблок) проще, чем (бананов нет, паника!)(если паника из-за отсутствия бананов, купи яблок).7 июля 2017 в 23:08 (комментарий был изменён)
0↑
↓
Проектируя библиотеку, вы например не сможете избежать неправильного использования функции, и кто-нибудь да подаст аргумент null. Когда бизнес-логика не позволяет продолжить поток выполнения, лучше выбросить исключение, ну и задокументировать в каком случае оно будет выброшено.8 июля 2017 в 04:44
0↑
↓
А еще некоторые убежденно доказывают, что кидаться исключениями — моветон, т.к. исключительная ситуация по их мнению, это когда сервер отвалился, в остальных случаях можно просто вернуть null и написать if. Это не про Java, но тем не менее.
8 июля 2017 в 11:11
0↑
↓
Всегда кидать исключения и никогда не использовать исключения — это две крайности. Но если откуда-то появился пустой указатель — причина в источнике этого указателя, и ситуация должна обрабатываться после появления этого указателя, а не во вложенной функции или где-то еще, иначе логика размазывается, и поддерживать её сложнее (ведь последующий код кроме ненулевого указателя теперь должен учитывать и пустой).Вообще я пытаюсь сказать, что мне больше нравится так
function getApple() { return null; } function bar(apple) { ... } function foo() { var apple = getApple(); if (!apple) { throw new Error('apple is empty!'); } bar(apple); ... }
чем такfunction getApple() { return null; } function bar(apple) { if (!apple) { throw new Error('apple is empty!'); } ... } function foo() { var apple = getApple(); bar(apple); ... }
Но, может, я заблуждаюсь, т. к. разрабатывать большие программы мне не доводилось.
8 июля 2017 в 04:56
+1↑
↓
Т.е. по-вашему, по мере дописывания софта, эти проверки убираются? И, вообще, что такое дописанный софт? Примерчик бы.Из моего опыта, проверка аргументов появляется либо сразу в методе публичного API, либо после того, как кто-то словил NullReferenceException.
8 июля 2017 в 11:53
0↑
↓
Нужно различать проверку входных данных и проверку аргументов функции/метода.
Проверка входных данных должна быть сразу же (если, конечно, это не прототип), и о неправильном вводе пользователь должен получать вменяемое сообщение. А внутренние методы, по хорошему, не должны вызываться с пустыми (= NULL) аргументами (хотя здесь много исключений).после того, как кто-то словил NullReferenceException
Вот это и есть — недописанный софт. Приходится писать руководству выше, они пишут разработчикам, разработчики исправляют, высылают (!) новую версию программы, ну, а пользователь теряет день-два-неделю.