CSS neden tek satırlı yorumlara izin vermiyor? [kapalı]


14

CSS'nin yalnızca böyle çok satırlı yorumları desteklediğini anlıyorum

/* foobar */

Neden tek satırlı yorumlar için destek yok?

// foobar

Programlamada da yaygındırlar ve her kuralın kendi satırında olduğu CSS gibi bir dil için özellikle yararlı görünüyorlar.

Bu kararın belirli bir tarihsel nedeni yoksa, tarayıcıların bu kararı desteklemeye doğru ilerlemesini engelleyen nedir?


3
Bu kötü bir karar. Tek satırlı yorumlara izin vermelidirler.
Tulains Córdova



1
@ TulainsCórdova Cevapları onaylamadım, sadece bu tartışmanın zaten yapıldığına dikkat çektim.
Eric King

2
Bu soru, buradaki cevaplardan daha teknik bir cevap aldı. "CSS, yeni satırları diğer tüm boşluklar gibi ele alır ve sonlandırmayı sınırlayıcı olmadan yorumun sonunu belirleyemez."
Kaz

Yanıtlar:


9

Geriye dönük uyumluluk

CSS sözdizimine tek satırlık yorumlar eklemek, şu anda jetonu kullanan dosyaların anlamını değiştirebilir //. Tarayıcı satıcıları çok potansiyel mevcut sayfaları kırılabilir değişiklikleri uygulamaya isteksiz.

CSS çok hassas "hataya dayanıklı" ayrıştırma kuralları ile tanımlanır, bu da sözdizimsel olarak yasadışı bir şey yazsanız bile ayrıştırma işleminin nasıl yapılacağına ilişkin kesin kurallar vardır. //Bir bildirimin içinde geçersiz bir karakter dizisi (gibi ) algılanırsa, geçerli bildirim atılır ve bir sonraki noktalı virgül atlanana kadar her şey silinir.

CSS, eski tarayıcıları bozmadan yeni sözdiziminin kullanılmasına izin verecek şekilde tasarlanmıştır. Eski tarayıcılar, yalnızca desteklenmeyen sözdizimi içeren bildirimi atlayacak ve daha sonra devam edecektir.

Ancak bu mantık, işlenecek veya atlanacak "birim" in bildirim olduğunu varsayar. Tek satırlı yorumlar //eklenmişse, sonraki ayrıştırma, sonraki kuralların yerine hangi satırların ayrıştırıldığını ve hangilerinin atlanacağını değiştiren bir sonraki noktalı virgülün yerine atlamak gerektiği anlamına gelir . Bu, mevcut CSS dosyalarının anlamını şaşırtıcı şekilde değiştirebilir.

Bir örnek:

P { font: 12px//16px; }
... hundreds of additional lines of CSS...

Burada yanlışlıkla eğik çizgiyi ikiye katladım. Sonuç, yazı tipi bildiriminin yok sayılmasıdır, ancak geri kalan her şey iyi çalışır. Eğer //-comments için destek verilirse , aniden kapanış ayracı yorumlanır ve potansiyel olarak stil sayfasının geri kalanını kırar.

Bir hata yaptığımdan beri bunun benim hatam olduğunu söyleyebilirsin, ancak bu, internetteki bilinmeyen sayıda sayfanın belirsiz nedenlerle garip bir şekilde kırılabileceğini veya değişmeyeceğini değiştirmiyor.

Geriye dönük uyumluluğu bozan bu tür değişiklikler çok dikkatli bir şekilde düşünülmelidir ve tek satırlı yorumlar muhtemelen risk için yeterli değildir, çünkü tek fayda size birkaç tuş vuruşu kazandırmasıdır.

Bu nedenle, CSS'nin tek satırlık yorumları olması gerekiyorsa, muhtemelen en baştan başlatılmış olması gerekir. Ancak CSS çok basit bir dil olarak başladı ve o zaman iki farklı yorum sözdizimine sahip olmak gereksiz karmaşıklık olarak görülüyordu. (ANSI C'nin bile tek satırlık yorumları yoktu.)


Oh, // CSS'de bir jeton mu? Söyle.
Michael Blackburn

Şu anda //iki "sınırlayıcı belirtecine" ayrıştırılacak ve dilbilgisinin hiçbir yerinde izin verilmeyecek. Ayrıntılar için bkz. W3.org/TR/css-syntax-3/#tokenization .
JacquesB

Neden başladığından dolayı MainMa için +1 /**/, ancak bunu kabul etti çünkü neden değişmediğini de ele alıyor.
Kaz

8

Başka bir sözdizimi öğesini desteklemek o kadar kolay değil: ek yorum stilini işleyebilecek çok sayıda araç var. Aslında, çoğu tokenizör / ayrıştırıcının yeni satırları görmezden geldiğini ve muhtemelen onları değiştirdiğini görmek beni şaşırtmaz ;.

Dil için gerekliyse, yani geliştiricilerin hayatlarını daha kolay hale getirirse , bu yapılabilir. Örneğin, CSS'de herhangi bir yorumun olmaması berbat olur ve yorumları sınırlayan belirli sözdizimi öğeleri eklemek için çaba sarf etmeye değer. //Diğer taraftan -style yorumları? ... Ben anlamıyorum. Bakınız /* Hello, World! */,: tek satırlık bir yorum.

Aslında, //C ++ veya benzer dillerde alıştığınız için muhtemelen stil yorumları beklersiniz . Ancak, CSS C ++ 'dan miras almaz, bu nedenle benzer sözdizimi özelliklerinin beklenmesi oldukça gariptir.

Benzer şekilde, bir Python programcısı CSS'nin de- #stil yorumları olması gerektiğini iddia eder ; şimdi her iki stili de desteklememiz gerekiyor mu? O zaman Haskell dünyasından bir adam dahil etmeyi de isteyecektir --ve {- -}kendinize neden artık CSS kodunu tanımadığınızı soracaksınız.

En küçük yararı, //tek satır yorumunuzun sonuna üç karakter daha yazmak zorunda kalmamanızdır (aslında, karakterleri saymaya başlarsak, CSS Python tarzı yorumlar kullanmalıdır). Bununla birlikte, iyi bir metin düzenleyicisi kullanıyorsanız, yine de bir kısayola basarak metni yorumlayın / açıklamayın.

Her kuralın kendi satırında olduğu CSS gibi bir dil için özellikle yararlı görünüyorlar.

Açıkladığım gibi, küçük bir program editörü alt kümesi için küçük bir programcı alt kümesi için sadece biraz faydalıdırlar. Her kural hakkında kendi çizgisinde (bu arada senin fikrine katılmıyorum) sözlerine gelince, bu bana başka bir nokta hakkında düşündürdü: yorumların gerçekte nasıl kullanıldığı.

Düşünebileceğim CSS yorumlarının kullanımı:

  • Bir dosya başlığı olarak (telif hakkı bilgisi, özel şeyler, vb.)
  • Bir grup stilin sınırlayıcısı olarak.
  • Bir hack açıklaması olarak.
  • Belirli bir stil veya özellik hakkında bir detay olarak.

İlk üç durumda, yine de çok satırlı yorumları kullanacaksınız. Bu, dosya başlığı ve bir hackin açıklaması için açıktır (çoğu hack en az bir cümle ve StackOverflow veya bir blog makalesine köprü gerektirir); sınırlayıcılara gelince:

/**
 * Footer and sitemap styles.
 */

C tarzı yorum şunlardan çok daha görünür:

// Footer and sitemap styles.

metinde gömülü.


JavaScript ayrıca tek satırlı //yorumları da destekler .
Tulains Córdova

//Birçok dilde çok yaygın olduğunu ve arkasındaki kavramın sözdiziminden fazlası olduğunu, aynı zamanda farklı işlev gördüğünü iddia ediyorum . Bununla birlikte, bu en derin cevaptır.
Kaz

Bunun küçük bir alt küme olduğunu sanmıyorum. Ham olarak CSS yazan herkes // ile yorum eklemeyi daha kolay bulur. Ancak geriye dönük uyumluluk noktası onu tartışıyor.
O'Rooney

-5

Sorun, yorumları olan çoğu dilin (yani C #, Java) derlenmiş diller olması ve derleyicinin içeriği tüketiciye (CPU) sunmadan önce TÜM yorumları çıkarmasıdır. CSS derlenmemiştir; genellikle dosya tasarımcının geliştirmesiyle değişmeden gönderilir, bu nedenle yorumları çıkartmak için bir fırsat yoktur. // tarzı yorum, sözdizimsel doğruluğu korumak için hem // sembolünü hem de bir satır beslemesini gerektirir.

Evet, küçültücüler var ve evet, javascript bu tür yorumlara izin veriyor. Javascript ayrıca eval () sağlar, bu yüzden bir model olarak almak istiyorum sanmıyorum.


3
Bu cevap hiç mantıklı değil. "Yorumu çıkarmak için hiçbir fırsat yok" - tabii ki, yorum diğer herhangi bir dilde olduğu gibi ayrıştırıcı tarafından çıkarılır. Aksi takdirde CSS'nin /* */yorumları nasıl olabilir ?
JacquesB

Tasarımcı ve tüketici arasında üçüncü taraf aracı demek istedim. Derleyici derlenmiş dillerde bu aracıdır. Bahsettiğiniz "ayrıştırıcı", içeriğin nihai tüketicisi olan tarayıcının bir alt sistemidir.
Michael Blackburn

Öyleyse neden ayrıştırıcı, şeridi //çıkarabildiğinde yorumları çıkaramaz /* */?
JacquesB

1
Olabilir, ancak sonra hem // hem de satır beslemesini aramak zorundadır ve satır beslemeleri sözdizimsel değil, ağırlıklı olarak anlamsal içeriktir. Tasarlandığı gibi CSS tüm boşluklara aynı şekilde davranır. // 'yi desteklemek için artık "özel" boşluk var ve dahası, bu "özel" boşluk bir karakter (\ n) ve iki (\ r \ n) olabilir.
Michael Blackburn

3
@MichaelBlackburn: DSSSL (S ifadesi sözdizimini kullanarak CSS'nin öncüsü olan) da tek satırlı yorumlara sahiptir. Zorunlu ve açıklayıcı dillerle ilgisi yoktur.
JacquesB
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.