Ой, это ужасное объяснение, и мне жаль, что вам пришлось это прочитать.
Итак, прежде всего, Char
- это модуль, а не тип.Тип называется char
.Это может показаться педантичным, но люди, пришедшие из объектно-ориентированных языков, часто путаются с модулями, разработанными специально для типа, поскольку они выглядят очень объектно-подобными, и может показаться, что они должны быть объектами, поскольку это кажется настолько естественными удобно из ОО.Но это не так, они не должны, и это, безусловно, не помогает, если плохо написанная документация подкрепляет такие ошибочные концепции.
В любом случае, к актуальному вопросу: почему тип char
существует отдельно отstring
тип?Потому что char
- это то, из чего сделаны string
. Это не «однобуквенная строка», это сама буква , а точнее символ (чтоконечно, откуда взято название «char»).Строка - это просто array
из char
s.
Без типа char
вы не сможете напрямую манипулировать элементами string
.Вы даже не сможете сравнить одну строку с другой, если сравнение строк не жестко запрограммировано в языке.Что является нетривиальной проблемой с трудными и неочевидными компромиссами , и на самом деле просто перемещает проблему туда, где труднее иметь дело.
Даже если у вас есть трудныеСравнение кодированных строк и может использовать однобуквенные строки вместо char
s, теперь у вас нет гарантии на уровне типов, что строка содержит только одну букву и, следовательно, придется добавлять проверки во время выполнения, чтобы убедиться, что строка не пуста илидлиннее, чем одна буква, и решите, что делать, если это так.Все эти проверки быстро приведут к значительным потерям производительности, а скрытые решения - к значительному когнитивному бремени.
В качестве альтернативы вы, конечно, можете просто делать то, что делают динамические языки, такие как JavaScript и Python, то естьврезаться или вести себя неожиданно, когда планеты не выстроились в ряд.Но я полагаю, что вас интересует Разум, потому что вы устали от этого.