Не заданная или пустая строка - что будет лучше, если в итоге будет отображаться «нет» пользователю? - PullRequest
1 голос
/ 02 января 2009

Мне интересно, если вы используете неустановленные переменные, пустые строки (или 0) или «Нет», чтобы определить, является ли переменная «Нет»?

Случай, о котором я думаю, это то, что я извлекаю что-то из базы данных, но обнаруживаю, что значение не задано для записи, как правило, определяется тем, что нет записей или нулевое значение. Это будет отображаться пользователю как «Нет» или «Не установлено».

Таким образом, вопрос в том, что при передаче этого значения в другую часть сценария (т. Е. В другую функцию, функцию Farter в сценарии, шаблон и т. Д.) Я должен:

  • не установить переменную (и, следовательно, проверить, установлена ​​ли она в шаблоне)
  • установить переменную в пустую строку или 0 (и проверить наличие пустой строки в шаблоне)
  • установить переменную в "None" или "Not Set" и просто повторить переменную

Есть ли один, который вы обычно делаете и почему вы это делаете?

(я использую PHP, поэтому тип переменной несколько не важен.)

Я ищу общий ответ; Я знаю, что это не всегда будет правдой, но нужно следовать общему правилу.

Ответы [ 6 ]

2 голосов
/ 02 января 2009

Где это возможно, я бы обычно использовал значение nil в языке для сопоставления с NULL.

Другие опции, о которых вы упомянули, могут привести к той же проблеме неоднозначности, что и у вас в базе данных, если в качестве значения было указано пустая строка, None или Not Set, когда вы действительно имели в виду NULL.

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

0 голосов
/ 02 января 2009

Я бы порекомендовал установить его на NULL. Если вы извлекаете значение из базы данных, и оно там NULL (SQL), скорее всего, функция PHP для получения записи вернет NULL (PHP) для этого поля.

Вы можете сравнить вашу строку с NULL в PHP следующим образом:

if($myString === NULL) {
    /* It's NULL! */
}

Если вы хотите, чтобы вместо NULL отображалась определенная строка (что при приведении к строке равно ""), вы можете установить ее следующим образом:

if($myString === NULL) {
    $myString = 'None';
}

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

Просто не задавать переменную - это плохо, потому что вы можете сделать опечатку с именем переменной и задаться вопросом, почему при ее установке «Нет» все равно показывает.

0 голосов
/ 02 января 2009

В PHP вы можете установить переменную в FALSE или NULL и затем сказать:

if($var === FALSE)
    ...

(обратите внимание на три знака равенства)

Вы должны явно установить значение.

0 голосов
/ 02 января 2009

Как вы сами сказали, значение «Нет» или «Не установлено» имеет значение только для отображения его пользователю. Для всего внутреннего использования значение должно быть собственным значением NULL. Читаемые человеком значения должны заменяться только теми функциями, которые выводят значения в выходной поток

0 голосов
/ 02 января 2009

Как правило, я считаю, что лучше всего обрабатывать структуры данных по всей программе. Это означает, что переменные, которые не установлены в базе данных, остаются неизменными, когда я передаю их другим частям программы. Я применяю или проверяю наличие граничных условий, если определенная функция ожидает данные в другом формате.

0 голосов
/ 02 января 2009

Единственный вариант, который я думаю, это то, чего я бы не делал, это третий вариант. «None» или «Not Set» действительно выглядит как дескриптор пользовательского интерфейса и не совсем подходит для установки в качестве значения, которое будет интерпретироваться кодом позже.

Единственное исключение из этого, если у вас есть набор известных значений. Если они более или менее постоянны.

  • NOT_SET
  • NO
  • ДА

Где NOT_SET может быть значением по умолчанию. В этом случае я все равно не просто отобразил бы «не установлено» пользователю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...