Где проверить, является ли объект несуществующим или нет?

Поскольку вы используете имена (переменные), которые не описывают содержимое файла, вы допустили ошибку и приложили тот же файл.

Видите ли вы это?

res.render("graph4.ejs",

<%- include("graph4.ejs",

Вы пытаетесь отрисовать graph4.ejs, включая graph4.ejs, включая graph4.ejs, включая graph4.ejs, включая graph4.ejs ... до включения / предел памяти закончен.

18
задан dance2die 1 April 2009 в 16:15
поделиться

12 ответов

Можно разработать метод для работы с доступными объектами только.

Это означает, что Вы, ожидают получать доступные объекты (не пустой в Вашем случае).
Это означает, что Вы не знаете, как реагировать и что сделать с недопустимыми объектами:

  • возврат тихо из функции не является решением;
  • выдача исключения будет означать перемещение ответственности перед верхними методами, где они могут проверить значение уже прежде, чем передать Вам.

Таким образом, если Ваш метод не знает точно, как обработать недопустимый объект, и метод не будет следовать за дополнительной логикой в недопустимом случае, который необходимо поместить

Debug.Assert( Person );

в PrintAge начните и это вынудит Вас осуществить проверки, верхние стеком вызовов.

Чем ниже функционируют в иерархии, тем меньше проверок она должна сделать. Следующее является недостатками выполнения регистраций функций, которые делают работу.

  • Функция, которая делает фактическую работу, должна быть максимально ясной без массы IFS
  • Функция будет вызвана больше затем много раз
  • Такая функция может вызвать такие функции, и они могут вызвать такие функции снова. Каждый из них выполнит ту же проверку
3
ответ дан 30 November 2019 в 08:16
поделиться

При разработке библиотеки будут методы, выставленные внешнему миру. Необходимо проверить входящие данные в это методы. Никакие проверки не требуются в методах, которые Вы не выставляете, потому что только Ваш код называет их, и его логика должна обработать все случаи, которые Вы приняли в выставленном названном методе.

                    --------------------------
                   |                          |
                   |         Library          |
                   |                          |
 -------        ---------        ----------   |
|       |      |         |      |          |  |
| Outer |      | Library |      | Library  |  |
|       | ===> | Entry   | ===> | Backend/ |  |
| World |      | Method  |      | Helpers  |  |
|       |      |         |      |          |  |
 -------        ---------        ----------   |
                   |                          |
                   |                          |
                    --------------------------

При принятии данных, которыми снабжают, в методе ввода необходимо выполнить требуемое действие и возвратить результат exspected, который является дескриптором все остающиеся случаи.

ОБНОВЛЕНИЕ

К clearify ситуация в библиотеке. Могли бы быть пустые проверки, но только из-за логики, не из-за проверки параметра. Существует две возможности для местоположения пустых проверок в библиотеке. Первый, если вызываемый метод знает, как обработать нулевые значения.

private CallingMethod()
{
   CalledMethod(someData);
}

private CalledMethod(Object parameter)
{
   if (parameter == null)
   {
      // Do something
   }
   else
   {
      // Do something else
   }
}

И вторая ситуация, если Вы называете метод, который не может обработать нулевые значения.

private CallingMethod()
{
   if (someData == null)
   {
      // Do the work myself or call another method
   }
   else
   {
      CalledMethod(someData);
   }
}

private CalledMethod(Object parameter)
{
   // Do something
}

Вся эта мысль состоит в том, чтобы отклонить дела, Вы не можете обработать immideatly и обработать все остающиеся случаи правильно. Если вход не допустим, Вы выдаете исключение. Это вынуждает вызывающую сторону библиотеки предоставить только допустимые значения и не позволяет вызывающей стороне продолжать выполнение с бессмысленными возвращаемыми значениями (помимо отмели вызывающей стороны исключение продолжение).

8
ответ дан 30 November 2019 в 08:16
поделиться

У Вас нет ничего для регистрации Main - Вы используете new оператор, который никогда не возвращает пустой указатель (за исключением Nullable<T>).

Было бы совершенно разумно зарегистрироваться PrintAge, особенно, если это было обнародовано. (Для частных API менее важно сделать проверку аргументов, но это может все еще быть очень полезно.)

if (person == null)
{
    throw new ArgumentNullException("person");
}

В эти дни в C# 3.0 я обычно использую дополнительный метод для этого.

6
ответ дан 30 November 2019 в 08:16
поделиться

Я сказал бы, что, проверяя его n PrintAge, казалось, имел больше смысла, поскольку это выполняет контракт для стандартной программы. Вы могли, конечно, заменить пустой указатель, сверяется с Отладкой. Утверждайте () код для проверки в тестовое время, но не во время выпуска.

4
ответ дан 30 November 2019 в 08:16
поделиться

Вы означаете регистрироваться в обоих методах? Я зарегистрировался бы в PrintAge наверняка и если он имеет смысл в Основном также. Я не думаю, что в целом существует определенный ответ. Это зависит :-)

2
ответ дан 30 November 2019 в 08:16
поделиться

Я обычно позволяю своим пустым проверкам управляться моими ожиданиями; если я ожидаю, что что-то будет пустым, или не уверено в нем, я добавляю проверку. Иначе я не делаю. Исключения Nulllpointer среди самых легких проблем для отслеживания, так чрезмерное разбрызгивание кода чрезмерных увеличений размера проверок. В определенном примере я ничего не проверил бы, потому что это - intutitive, это не является пустым.

2
ответ дан 30 November 2019 в 08:16
поделиться

Что Вы хотели бы сделать, если экземпляр является пустым?

Я думаю, что это зависит от API, который Вы предоставляете и определяете контракт (способ, которым классы платформы .NET делают). Однако Вы не должны делать проверки на пустой указатель (в основном), если метод определяет то, что является ожидаемым результатом в случае нулевой ссылки, переданной ему.

1
ответ дан 30 November 2019 в 08:16
поделиться

Существует только один случай, что конструктор может возвратить пустой указатель [new() на a Nullable<T>] - таким образом, код вызова не должен проверять.

Вызываемый, вероятно, должен проверить; бросок ArgumentNullException если это было пустым. В.NET 4.0 это будет лучше подаваться контрактами кода. Но еще;-p

1
ответ дан 30 November 2019 в 08:16
поделиться

Поскольку я понимаю Ваш вопрос, это является более общим, чем проиллюстрированный Вашим примером. Мои предпочтения следующие:

  • Все публично доступные методы должны проверить на ПУСТОЙ вход и выдать исключения как соответствующие. Таким образом, при создании платформы для других для использования, кодируйте оборонительно.
  • Закрытые методы могут опустить ПУСТУЮ проверку, если Вы знаете, что это сделано в другом месте или что аргументы никогда не будут НУЛЕВЫМИ, но в целом я предпочитаю явный ArgumentNullException NullRefereceException.

У Brad Abrams есть еще некоторый вход здесь: http://blogs.msdn.com/brada/archive/2004/07/11/180315.aspx

1
ответ дан 30 November 2019 в 08:16
поделиться

Избыточный код не является самым изящным, но его сейф.

Это зависит от того, кто Ваш предполагаемый пользователь, если Вы затем Ваш в управлении того, как все используется и проверки только необходимы, если Ваш неуверенный из том, каково состояние Ваших переменных будет.

Если Ваше создание этого, чтобы кто-то еще использовал затем пустые проверки, является, вероятно, хорошей идеей. Даже если Вы просто бросаете NullPointerException лучше для быстрого сбоя.

0
ответ дан 30 November 2019 в 08:16
поделиться

Определенно регистрация PrintAge, это - правильное место для проверки. Это может быть избыточно, но не причинит никому боль, если Вы не выполняете его 1000 раз в секунду. (В зависимости от проверки выдают исключение или фиксируют его, если Вы можете),

Другая проверка, зависят от Вашего фактического потока, в этом примере у Вас нет потока, таким образом, я не могу прокомментировать тот бит. Но обычно рассматривайте свои параметры, как испорчено.

0
ответ дан 30 November 2019 в 08:16
поделиться

PrintAge должен быть методом на Человеке, не статическим взятием Человека как параметр. Никакая проверка не необходима.

Проверка нулевые значения делает код излишне сложным. Структурируйте свой код, чтобы ограничить (или устранить), случаи, где пустой указатель является возможным значением, и у Вас будет намного меньше проверок для записи.

0
ответ дан 30 November 2019 в 08:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: