Какова цель пустой строки?

Для меня, как разработчика и как пользователя, я нахожу пустую строку ("") бесполезной и причиной большой путаницы, ей нравится говорить string == char []

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

См. также:

Ответ 1

Можно утверждать, что пустая строка является экземпляром Null Object Pattern. Как заметил Энтони, это используется, чтобы избежать особых случаев и большого количества if s.

Ответ 2

Пустая строка довольно распространена в реальных ситуациях - и они полезны для дифференциации от нуля.

  • Null означает, что значение undefined или неизвестно.

  • Пустая строка означает, что она, как известно, ничего (пустая).

Это может показаться расщеплением волос, но есть разница. Пустые строки - это экземпляры объекта - nulls - нет. Вы можете манипулировать пустой строкой, используя любой из допустимых методов, которые могут быть вызваны для строкового объекта. Вы не можете манипулировать нулем. Пустые строки часто являются результатом определенных манипуляций с другими строками, например:

var source = "Hello";
var result = source.Remove("Hello");  // result is now: ""

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

Интересно, что в некоторых базах данных НЕ различают NULL и пустую строку, лучшим примером которой является Oracle. В Oracle:

INSERT into MYTABLE(name) VALUES('')

фактически вставляет в таблицу NULL. Это может создать путаные ситуации при написании кода, который управляет данными из базы данных в .NET. Иногда вы получаете DBNull.Value, где ожидали String.

Ответ 3

Зачем нам нужен нуль? Это действительно тот же вопрос. Что такое "пижама" без всех а? "PJM". Что такое "а" без всех а? "". Просто как тот. Произведением некоторых строковых операций является строка без каких-либо символов в ней и пустая строка. Он ведет себя точно так же, как и любая другая строка - вы можете легко определить ее длину; вы можете связать его с другими строками, вы можете считать a в нем и т.д.

Ответ 4

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

И просто чтобы записать его на запись, в С#, рекомендуется указывать string.Empty вместо hardcoding в "".

Изменить: И как отметил Л.Бушкин, существует разница между пустым значением и неизвестным значением.

Ответ 5

Он служит той же цели для строк, что и число "нуль" служит для целых чисел. Если у вас не было нуля, вы не могли бы записать количество овец, которое у вас есть, когда у вас нет овец. Аналогично, если у вас нет пустой строки, вы не можете записать seqeunce символов, которые у вас есть, когда у вас нет никаких символов.

Применяются всевозможные аналоговые алгебраические законы: поскольку X + 0 совпадает с X, Y cat "" совпадает с Y и т.д.

Давайте поговорим о подстроках. Если у меня есть строка "abc", затем

substring("abc",1,3)  is  "abc"
substring("abc",1,2)  is  "ab"
substring("abc",1,1)  is  "a"
substring("abc",1,0)  is ...?

Еще один интересный случай:

substring("abc",1,3) is "abc"
substring("abc",2,2) is "bc"
substring("abc",3,1) is "c"
substring("abc",4,0) is ...?

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

Ответ 6

зачем нам нужен xero? или пустой массив, пустой набор (также называемый нулевым множеством). Почему мы вообще заботимся о вещах, когда их там нет?

Сознания просто более интересны, когда их нет.

Признаки не могут быть выражены, если мы не можем выразить значение ничего (что очень отличается от "неизвестного значения" null

например

string allUpperCaseLetters = "";
for(byte i = 'A';i<'Z';i++)
{
  allUpperCaseLetters += (char)i;
}

если вы скажете unknow plus (char) i, результат все равно будет неизвестным, но "+" A - "A". Насколько велика 1 + неизвестна? когда добавление может обернуться вокруг, вы даже не можете указать, что 1 + A больше A (если A неизвестно)

некоторые операции были бы очень странными, если бы у нас не было "" как насчет

string letters = allUpperCaseLetters;
for(;i>0;)
{
  int i = letters.Length
  Console.WriteLine(letters[0]);
  letters = letters.Substring(1);
}

почему вы хотите, чтобы первая строка внутри цикла выдавала исключение NullReferenceException, а не только цикл, заканчивающийся, когда больше нет букв?

Ответ 7

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

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

Ответ 8

Я не слышал, чтобы жаловаться на это раньше. В то время как null - специальное значение, которое может быть значением любого объекта, а пустая строка - String. Аналогичную аналогию можно также провести между null и пустым List или массивом.