Возврат альтернативного значения, если строка не найдена в методе, возвращающем строку - PullRequest
3 голосов
/ 14 февраля 2012

У меня есть метод, который возвращает строку.В нормальных рабочих условиях может быть возвращена пустая строка или ноль.Однако является ли хорошей практикой кодирования возвращать null или "" из этого метода?

Ответы [ 5 ]

2 голосов
/ 14 февраля 2012

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

Альтернативный способ - выбросить Exception, но, как программист, я не нахожу пригодным для работы с исключениями.Возвращение null гораздо лучше .

1 голос
/ 14 февраля 2012

Это зависит от цели метода, если у вас есть метод string GetCustomerName(int custId), вы бы предпочли выдать исключение, если покупатель не существует, а не вернуть null.С другой стороны, если бы был метод, который изменяет первую букву строки на верхний регистр, и вы указали null на входе, возвращение null будет приемлемым.

1 голос
/ 14 февраля 2012

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

, например

try
{
     Validate();
}
catch(NotValidException ex)
{
    // Report
}

Исключение, если оно не обнаружено, будет всплывать и будет меньше молчать, чем, например, забывать проверять возвращаемое значение метода Validate.

1 голос
/ 14 февраля 2012

Значение null обычно используется для случаев, когда «нет строки» (строка где-то «не найдена») или просто строка не применяется. Пустая строка чаще используется для ситуаций, в которых есть строка, но на самом деле она пустая.

Например, если вы ищете описание профиля какого-то пользователя в StackOverflow, пустая строка будет правильным результатом, если пользователь не введет описание профиля; и null, если такой пользователь не был найден.

1 голос
/ 14 февраля 2012

Существует семантическая разница между null и пустой строкой.Один говорит, что «он не определен для этого ввода», другой говорит, что «правильное значение для этого ввода - пустая строка».

Представьте, что вы написали компилятор для подмножества C, который допускает main -функция, которая ничего не возвращает.Ваш компилятор возвращает строку с неким фэнтезийным языком ассемблера.

// Testcode 0
void main() {

Для этого вы должны вернуть null, код не правильно сформирован из-за отсутствующей закрывающей скобки (нет, не создавайте исключение, ошибки в написанном пользователем коде ожидаются).Нет действительного вывода.

// Testcode 1
void main() { printf("hello!"); }

Для этого вы должны вернуть "push 'hello!'\ncall printf"

// Testcode 2
void main() {}

Для этого вы можете вернуть "", код ничего не делает и ничего не возвращает, нодействителен.

...