Mọi người đều biết rằng, ít nhất là trong C, bạn sử dụng printf
họ các hàm để in một chuỗi được định dạng. Và các hàm này sử dụng dấu phần trăm ( %
) để biểu thị sự bắt đầu của một công cụ xác định định dạng. Ví dụ: %d
có nghĩa là in một int
và %u
có nghĩa là in một unsigned int
. Nếu bạn không quen với cách thức giữ printf
chức năng và định dạng hoạt động, hoặc đơn giản chỉ cần làm mới, bài viết Wikipedia là một nơi tốt để bắt đầu.
Câu hỏi của tôi là, có một lý do đặc biệt thuyết phục tại sao điều này ban đầu hoặc nên được chọn trong tương lai làm công cụ xác định định dạng?
Rõ ràng là quyết định đã được đưa ra từ lâu (rất có thể là tiền thân của ngôn ngữ C) và nó ít nhiều đã trở thành "tiêu chuẩn" kể từ đó (không chỉ ở C, mà còn trong một loạt các ngôn ngữ khác mà đã áp dụng cú pháp của nó ở các mức độ khác nhau), vì vậy đã quá muộn để thay đổi. Nhưng tôi vẫn tò mò liệu có ai có cái nhìn sâu sắc về lý do tại sao sự lựa chọn này có thể được đưa ra ngay từ đầu không, và liệu nó có còn ý nghĩa như sự lựa chọn hay không nếu một người đang thiết kế một ngôn ngữ mới có chức năng tương tự.
Ví dụ, với C # (và họ ngôn ngữ .NET khác), Microsoft đã đưa ra một quyết định hơi khác về hoạt động của các chức năng định dạng chuỗi. Mặc dù một số mức độ an toàn loại có thể được thi hành ở đó (không giống như việc thực hiện printf
trong C), và do đó không cần thiết phải bao gồm một dấu hiệu của loại tham số tương ứng, họ đã quyết định sử dụng các cặp dấu ngoặc nhọn có chỉ số bằng không ( {}
) như định dạng định dạng, như vậy:
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.
Tài liệu cho String.Format
phương pháp này chứa nhiều thông tin hơn, cũng như bài viết này về định dạng tổng hợp nói chung , nhưng các chi tiết chính xác là không quan trọng. Vấn đề đơn giản là họ đã từ bỏ thói quen sử dụng lâu đời %
để chỉ ra sự khởi đầu của một công cụ xác định định dạng. Ngôn ngữ C có thể dễ dàng sử dụng {d}
và {u}
, nhưng không. Bất cứ ai cũng có bất kỳ suy nghĩ về lý do tại sao, liệu quyết định này có ý nghĩa khi nhìn lại, và liệu các triển khai mới nên theo nó?
Rõ ràng là không có nhân vật nào có thể được chọn mà sẽ không thể thoát được để có thể đưa nó vào chuỗi, nhưng vấn đề đó đã được giải quyết khá tốt chỉ bằng cách sử dụng hai trong số chúng. Những cân nhắc khác có liên quan?
{u}
thay thế %u
nhưng nó sẽ có lợi thế đáng kể nào? Có vẻ như một sự lựa chọn phần lớn tùy ý.
{}
cú pháp để mọi người học C # sẽ không bắt đầu học bất cứ điều gì khác? Tôi thấy rất khó tin rằng đó là một phần chính, thậm chí là một phần trong quyết định thiết kế của họ. Bạn có thể sao lưu tuyên bố của bạn bằng cách nào đó?
%
định dạng (một hình thức vượt trội hơn nhiều) để ủng hộ một cái gì đó giống với {}
định dạng của .NET vì cái sau cung cấp sự linh hoạt hơn.