少なくともCではprintf
、関数ファミリを使用して書式設定された文字列を印刷することを誰もが知っています。また、これらの関数はパーセント記号(%
)を使用して、書式指定子の始まりを示します。例えば、%d
印刷することを意味しint
、そして%u
手段印刷しますunsigned int
。printf
関数とフォーマットのプレースホルダーがどのように機能するのかよくわからない場合、または単にリフレッシャーが必要な場合は、Wikipediaの記事を参照してください。
私の質問は、これが元々、または将来フォーマット指定子として選択されるべきである特に説得力のある理由がありますか?
明らかに、この決定はかなり前に行われ(C言語の前任者である可能性が非常に高い)、それ以降は多かれ少なかれ「標準」になっています(Cだけでなく、他の多くの言語でもさまざまな程度に構文を採用しているため)、変更するには遅すぎます。しかし、なぜこの選択が最初に行われたのか、同様の機能を備えた新しい言語を設計している場合の選択肢としてそれが理にかなっているのかについて誰かが洞察を持っているのであれば、私はまだ興味があります。
たとえば、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}
and を簡単に使用でき{u}
たはずですが、そうではありませんでした。誰が、なぜ、この決定が振り返って意味をなすか、そして新しい実装がそれに続くべきかどうかについての考えを持っていますか?
明らかに、文字列自体に含めることができるようにエスケープする必要のない文字を選択することはできませんが、その問題は、そのうちの2つを使用するだけで既に十分に解決されています。関連する他の考慮事項は何ですか?
{u}
代わりに使用することは可能%u
ですが、大きな利点はありますか?それは大部分がarbitrary意的な選択のようです。
{}
C#を学習している人が他のことを何も学習しないように、意図的に構文を選択していると言っていますか?それが彼らの設計決定の重要な部分であったとしても、それを信じることは非常に難しいと思います。なんとかして声明をバックアップできますか?
%
フォーマットを放棄し、.NETの{}
フォーマットに似たものを支持しました。後者の方が柔軟性が高いためです。