Wszyscy wiedzą, że przynajmniej w C używa się printf
rodziny funkcji do drukowania sformatowanego ciągu. I te funkcje używają znaku procentu ( %
) do wskazania początku specyfikatora formatu. Na przykład %d
oznacza wydrukować int
i %u
oznacza wydrukować unsigned int
. Jeśli nie wiesz, jak printf
działają funkcje zastępcze funkcji i formatu, lub po prostu potrzebujesz odświeżenia, artykuł w Wikipedii jest dobrym miejscem na początek.
Moje pytanie brzmi: czy istnieje szczególnie przekonujący powód, dla którego został on pierwotnie lub powinien zostać wybrany w przyszłości jako specyfikator formatu?
Oczywiście decyzja została podjęta dawno temu (bardzo prawdopodobne dla poprzednika nawet języka C) i od tego czasu była mniej więcej „standardowa” (nie tylko w C, ale także w wielu innych językach, które dostosował swoją składnię w różnym stopniu), więc jest o wiele za późno, aby się zmienić. Ale nadal jestem ciekawy, czy ktokolwiek ma jakiś wgląd w to, dlaczego ten wybór mógł być dokonany w pierwszej kolejności i czy nadal ma sens jako wybór, jeśli projektuje się nowy język o podobnej funkcjonalności.
Na przykład w przypadku C # (i innej rodziny języków .NET) Microsoft podjął nieco inną decyzję dotyczącą działania funkcji formatowania łańcucha. Chociaż można tam zapewnić pewien stopień bezpieczeństwa typu (w przeciwieństwie do implementacji printf
w C), a zatem nie jest konieczne dołączanie wskazania typu odpowiedniego parametru, zdecydowano się na użycie nawiasów parowych nawiasów klamrowych ( {}
) jako specyfikatory formatu, takie jak:
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.
Dokumentacja String.Format
metody zawiera więcej informacji, podobnie jak ten artykuł na temat formatowania złożonego , ale dokładne szczegóły są raczej nieistotne. Chodzi po prostu o to, że porzucili wieloletnią praktykę używania %
do oznaczania początku specyfikatora formatu. Język C może po prostu być łatwo wykorzystane {d}
i {u}
, ale tak się nie stało. Czy ktoś ma jakieś przemyślenia na temat tego, czy ta decyzja ma sens z perspektywy czasu i czy powinny następować nowe wdrożenia?
Oczywiście nie ma żadnej postaci, która mogłaby zostać wybrana, która nie musiałaby być ucieczką, aby mogła być zawarta w samym łańcuchu, ale ten problem jest już całkiem dobrze rozwiązany przez użycie tylko dwóch z nich. Jakie inne uwagi są istotne?
{u}
zamiast, %u
ale czy miałoby to jakąś znaczącą zaletę? Wydaje się, że jest to w dużej mierze arbitralny wybór.
{}
składnię, aby ludzie uczący się języka C # nie zaczęli uczyć się niczego innego? Bardzo trudno mi uwierzyć, że była to ważna, jeśli w ogóle, część ich decyzji projektowej. Czy możesz w jakiś sposób wykonać kopię zapasową wyciągu?
%
formatowanie na rzecz czegoś podobnego do {}
formatowania .NET, ponieważ ta ostatnia oferuje większą elastyczność.