Semua orang tahu, setidaknya dalam C, Anda menggunakan printf
kumpulan fungsi untuk mencetak string yang diformat. Dan fungsi-fungsi ini menggunakan tanda persen ( %
) untuk menunjukkan awal penentu format. Misalnya, %d
berarti untuk mencetak int
, dan %u
berarti untuk mencetak unsigned int
. Jika Anda tidak terbiasa dengan cara printf
fungsi dan format placeholder bekerja, atau hanya perlu penyegaran, artikel Wikipedia adalah tempat yang baik untuk memulai.
Pertanyaan saya adalah, apakah ada alasan kuat mengapa ini awalnya atau harus dipilih di masa depan sebagai penentu format?
Jelas keputusan itu dibuat sejak lama (sangat mungkin untuk pendahulu bahkan bahasa C), dan itu sudah lebih atau kurang "standar" sejak saat itu (tidak hanya dalam bahasa C, tetapi juga dalam berbagai bahasa lain yang telah mengadopsi sintaksnya ke berbagai derajat), jadi sudah terlambat untuk berubah. Tapi saya masih penasaran apakah ada yang punya wawasan tentang mengapa pilihan ini mungkin telah dibuat di tempat pertama, dan apakah masih masuk akal sebagai pilihan jika seseorang merancang bahasa baru dengan fungsi yang sama.
Sebagai contoh, dengan C # (dan keluarga lain dari bahasa .NET), Microsoft membuat keputusan yang sedikit berbeda mengenai pengoperasian fungsi pemformatan string. Meskipun beberapa tingkat keamanan jenis dapat ditegakkan di sana (tidak seperti penerapan printf
di C), dan oleh karena itu tidak perlu menyertakan indikasi jenis parameter yang sesuai, mereka memutuskan untuk menggunakan pasangan kurung kurawal yang tidak diindekskan ( {}
) sebagai penentu format, seperti:
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.
Dokumentasi untuk String.Format
metode ini berisi lebih banyak informasi, seperti halnya artikel ini tentang pemformatan komposit secara umum , tetapi detail yang tepat agak tidak penting. Intinya adalah bahwa mereka meninggalkan praktik lama menggunakan %
untuk menunjukkan awal penentu format. Bahasa C bisa saja dengan mudah digunakan {d}
dan {u}
, tetapi tidak. Adakah yang memiliki pemikiran tentang mengapa, apakah keputusan ini masuk akal jika ditinjau kembali, dan apakah implementasi baru harus mengikutinya?
Jelas tidak ada karakter yang bisa dipilih yang tidak harus bisa diloloskan sehingga bisa dimasukkan ke dalam string itu sendiri, tetapi masalah itu sudah diselesaikan dengan cukup baik dengan hanya menggunakan dua dari mereka. Pertimbangan lain apa yang relevan?
{u}
daripada%u
tetapi apakah itu memiliki keuntungan yang signifikan? Sepertinya pilihan yang sebagian besar sewenang-wenang.{}
sintaks sehingga orang yang belajar C # tidak akan mulai belajar hal lain? Saya merasa sangat sulit untuk percaya bahwa itu adalah bagian utama, jika ada, keputusan desain mereka. Bisakah Anda membuat cadangan pernyataan Anda entah bagaimana?%
memformat dalam mendukung sesuatu yang mirip dengan{}
format .NET karena yang terakhir menawarkan lebih banyak fleksibilitas.Jawaban:
Seperti yang dicatat oleh @Secure,
printf
fungsi C terinspirasi olehwritef
fungsi BCPL . Dan jika Anda melihat halaman wikipedia untuk BCPL , ia memiliki contoh yang menunjukkan bahwa BCPLwritef
juga digunakan%
untuk memperkenalkan penentu format.Jadi kita dapat menyimpulkan bahwa C digunakan
%
karena BCPL melakukannya, atau untuk alasan yang sama seperti BCPL. Perasaan saya adalah bahwa itu hanyalah%
salah satu karakter ASCII yang paling jarang digunakan ... atau begitulah menurut penulis. Kemungkinan juga mereka tidak menghabiskan banyak waktu untuk menimbang berbagai alternatif. Pada saat itu, baik BCPL dan C adalah bahasa yang tidak jelas, dan penulis kemungkinan besar memiliki hal-hal yang lebih penting untuk ditangani.Namun, ada kunci pas kecil dalam karya. Meskipun C terinspirasi oleh BCPL, tidak sepenuhnya jelas apakah C meminjam perpustakaan BCPL I / O atau sebaliknya. Saya samar-samar ingat bahwa perpustakaan I / O BCPL mengalami proses evolusi tentang waktu ketika operator pengindeksan byte infiks ditambahkan ke bahasa. (Sebenarnya, saya pikir saya tahu siapa yang akan tahu tentang itu.)
sumber
Entri Wikipedia tidak mengandung banyak informasi historis, tidak khusus untuk
printf
, tetapi untuk melarikan diri karakter secara umum.http://en.wikipedia.org/wiki/Escape_character
Dugaan saya adalah: Backslash sudah digunakan untuk string literal dan karakter lain diperlukan untuk format string. Kemungkinan besar mereka memilih karakter dengan frekuensi penggunaan dan kejadian normal yang dianggap paling rendah.
BTW, artikel terkait lainnya terhubung di sana dengan istilah yang belum pernah saya dengar sebelumnya:
http://en.wikipedia.org/wiki/Leaning_toothpick_syndrome
Artikel untuk
printf
memiliki beberapa cuplikan informasi lebih lanjut, tetapi bukan tentang alasannya.http://en.wikipedia.org/wiki/Printf
sumber