Всем известно, что, по крайней мере в C, вы используете printf
семейство функций для печати форматированной строки. И эти функции используют знак процента ( %
), чтобы указать начало спецификатора формата. Например, %d
означает, чтобы напечатать int
, и %u
означает, чтобы напечатать unsigned int
. Если вы не знакомы с тем, как printf
работают заполнители функций и форматов, или просто нуждаетесь в обновлении, статья Википедии - хорошее место для начала.
У меня вопрос, есть ли особенно веская причина, по которой это было изначально или должно быть выбрано в будущем в качестве спецификатора формата?
Очевидно, что решение было принято давно (очень вероятно, для предшественника даже языка Си), и с тех пор оно было более или менее «стандартным» (не только в Си, но и в огромном количестве других языков, которые приняли его синтаксис в разной степени), поэтому уже слишком поздно что-либо менять. Но мне все еще любопытно, есть ли у кого-нибудь понимание того, почему этот выбор мог быть сделан в первую очередь, и имеет ли он смысл как выбор, если кто-то разрабатывает новый язык с аналогичной функциональностью.
Например, с C # (и другим семейством языков .NET) Microsoft приняла несколько иное решение относительно работы функций форматирования строк. Хотя некоторая степень безопасности типов может быть обеспечена там (в отличие от реализации printf
в C), и поэтому нет необходимости включать указание типа соответствующего параметра, они решили использовать пары фигурных скобок с нулевым индексом ( {}
) как спецификаторы формата, вот так:
string output = String.Format("In {0}, the temperature is {1} degrees Celsius.",
"Texas", 37);
Console.WriteLine(output);
// Output:
// In Texas, the temperature is 37 degrees Celsius.
Документация по String.Format
методу содержит больше информации, как и эта статья о составном форматировании в целом , но точные детали довольно не важны. Дело в том, что они просто отказались от давней практики использования %
для указания начала спецификатора формата. Язык C мог бы просто использоваться {d}
и {u}
, но это не так. У кого-нибудь есть мысли о том, почему, имеет ли это решение смысл в ретроспективе, и должны ли новые реализации следовать ему?
Очевидно, что нельзя выбрать символ, который не должен был бы быть экранируемым, чтобы его можно было включить в саму строку, но эта проблема уже достаточно хорошо решена, если использовать только два из них. Какие еще соображения актуальны?
{u}
вместо, %u
но будет ли это иметь какое-либо существенное преимущество? Это кажется в значительной степени произвольным выбором.
{}
синтаксис, чтобы люди, изучающие C #, не начали изучать что-нибудь еще? Мне очень трудно поверить, что это была главная, если вообще вообще, часть их дизайнерского решения. Можете ли вы сделать резервную копию своего заявления как-нибудь?
%
форматирования в пользу чего-то похожего на {}
форматирование .NET, поскольку последний предлагает большую гибкость.