Всем известно, что, по крайней мере в 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, поскольку последний предлагает большую гибкость.