Saya mengerti bahwa CSS hanya mendukung komentar multi-line seperti itu
/* foobar */
Mengapa tidak ada dukungan untuk komentar satu baris.
// foobar
Mereka sama umum dalam pemrograman dan tampaknya sangat berguna untuk bahasa seperti CSS di mana setiap aturan ada pada baris itu sendiri.
Jika tidak ada alasan historis khusus untuk keputusan ini, apa yang mencegah browser bergerak mendukungnya?
Jawaban:
Kompatibilitas mundur
Memperkenalkan komentar baris tunggal ke sintaks CSS dapat mengubah arti file yang saat ini menggunakan token
//
. Vendor browser sangat enggan untuk memperkenalkan perubahan yang berpotensi memecah halaman yang ada.CSS didefinisikan dengan aturan parsing "toleransi-kesalahan" yang sangat tepat yang berarti bahkan jika Anda menulis sesuatu yang ilegal secara sintaksis ada aturan yang tepat untuk bagaimana parse harus dilanjutkan. Jika urutan karakter ilegal (seperti
//
) terdeteksi di dalam deklarasi, deklarasi saat ini akan dibuang dan semuanya sampai tanda titik koma berikutnya dilewati.CSS dirancang seperti ini untuk memungkinkan pengenalan sintaks baru tanpa merusak browser lama. Browser lama hanya akan melewatkan deklarasi yang mengandung sintaks yang tidak didukung, dan melanjutkan setelah itu.
Tetapi logika ini mengasumsikan "unit" untuk diproses atau dilewati adalah deklarasi. Jika komentar single-line diperkenalkan, itu berarti parse after
//
harus melewati hingga baris berikutnya, bukan sampai titik koma berikutnya, yang mengubah aturan mana yang diuraikan dan yang dilewati. Ini berpotensi mengubah arti file CSS yang ada dengan cara yang mengejutkan.Sebuah contoh:
Di sini saya keliru menggandakan tebasan. Konsekuensinya adalah deklarasi font diabaikan, tetapi semua yang lain berfungsi dengan baik. Jika support untuk
//
-comments diperkenalkan, tiba-tiba brace penutup akan dikomentari, berpotensi menghancurkan semua sisa style sheet.Sekarang Anda bisa mengatakan itu adalah kesalahan saya sendiri karena saya melakukan kesalahan, tetapi ini tidak mengubah bahwa jumlah halaman yang tidak diketahui di internet mungkin rusak atau membuat aneh karena alasan yang tidak jelas.
Perubahan apa pun yang merusak kompatibilitas ke belakang harus dipertimbangkan dengan sangat hati-hati, dan komentar satu baris mungkin tidak cukup menarik untuk risiko, karena satu-satunya manfaat adalah menghemat beberapa penekanan tombol.
Jadi, jika CSS harus memiliki komentar garis tunggal itu mungkin seharusnya sudah diperkenalkan dari awal. Tetapi CSS dimulai sebagai bahasa yang sangat sederhana dan memiliki dua sintaks komentar yang berbeda akan dilihat sebagai kompleksitas yang tidak perlu pada saat itu. (Bahkan ANSI C tidak memiliki komentar satu baris.)
sumber
//
akan diuraikan menjadi dua "delim token" dengan pada gilirannya tidak diizinkan di mana pun dalam tata bahasa. Lihat w3.org/TR/css-syntax-3/#tokenization untuk detailnya./**/
, tetapi menerima yang ini karena juga membahas mengapa tidak berubah.Mendukung elemen sintaks lain tidak semudah itu: ada banyak alat yang seharusnya dapat menangani gaya komentar tambahan. Sebenarnya, saya tidak akan terkejut melihat bahwa kebanyakan tokenizers / parser mengabaikan baris baru, mungkin menggantikannya
;
.Jika itu penting untuk bahasa, yaitu membuat hidup pengembang lebih mudah, ini bisa dilakukan. Misalnya, tidak memiliki apapun dari komentar di CSS akan mengisap, dan itu akan menjadi layak usaha untuk menambahkan elemen sintaks khusus yang membatasi komentar.
//
Komentar-gaya di sisi lain? ... Saya tidak mengerti intinya. Lihat/* Hello, World! */
,: komentar satu baris.Sebenarnya, Anda mungkin mengharapkan
//
komentar gaya karena Anda terbiasa menggunakannya dalam bahasa C ++ atau sejenisnya. Namun, CSS tidak mewarisi dari C ++, jadi mengharapkan fitur sintaksis yang serupa agak aneh.Demikian pula, seorang programmer Python akan mengklaim bahwa CSS juga harus memiliki
#
komentar-gaya; jadi sekarang, apakah kita perlu mendukung kedua gaya? Kemudian seorang pria dari dunia Haskell akan meminta untuk memasukkan--
dan{- -}
juga, dan Anda akan bertanya pada diri sendiri mengapa Anda tidak mengenali kode CSS lagi.Manfaat kecilnya
//
adalah Anda tidak perlu mengetik tiga karakter lagi di akhir komentar satu baris Anda (sebenarnya, jika kita mulai menghitung karakter, CSS harus menggunakan komentar gaya Python). Namun, jika Anda menggunakan editor teks yang layak, Anda mengomentari / menghapus komentar teks hanya dengan menekan pintasan.Seperti yang saya jelaskan, mereka hanya sedikit berguna, untuk sebagian kecil programmer, menggunakan sebagian kecil editor teks. Adapun komentar Anda tentang masing-masing aturan pada jalurnya sendiri (saya tidak setuju dengan komentar Anda, ngomong-ngomong), ini membuat saya berpikir tentang poin lain: bagaimana komentar itu sebenarnya digunakan.
Inilah penggunaan komentar CSS yang dapat saya pikirkan:
Dalam tiga kasus pertama, Anda akan tetap menggunakan komentar gaya multiline. Ini jelas untuk header file dan penjelasan peretasan (kebanyakan peretasan membutuhkan setidaknya satu kalimat dan hyperlink ke StackOverflow atau artikel blog); Adapun pembatas:
Komentar gaya-C jauh lebih terlihat daripada:
terkubur dalam teks.
sumber
//
komentar satu baris .//
ini sangat umum dalam banyak bahasa dan konsep di baliknya adalah lebih dari sintaks, juga fungsinya berbeda. Yang mengatakan, ini adalah jawaban yang paling mendalam.Masalahnya adalah bahwa sebagian besar bahasa dengan komentar (yaitu C #, Java) adalah bahasa yang dikompilasi, dan kompiler menghapus SEMUA komentar sebelum menyajikan konten kepada konsumen (CPU). CSS tidak dikompilasi; umumnya file dikirim tidak berubah ketika perancang mengembangkannya, sehingga tidak ada peluang untuk menghapus komentar. Maka komentar // style memerlukan simbol // DAN umpan baris untuk mempertahankan kebenaran sintaksis.
Ya, minifiers ada, dan ya, javascript memungkinkan jenis komentar ini. Javascript juga memungkinkan eval () jadi saya tidak berpikir kita ingin menganggapnya sebagai model.
sumber
/* */
komentar?//
komentar ketika itu bisa dihapus/* */
?