CSSが単一行コメントを許可しないのはなぜですか?[閉まっている]


13

CSSはそのような複数行コメントのみをサポートすることを理解しています

/* foobar */

単一行コメントのサポートがないのはなぜですか。

// foobar

それらはプログラミングでも同じように一般的であり、CSSのような各ルールが独自の行にある言語の場合に特に役立つようです。

この決定に特定の歴史的理由がなかった場合、ブラウザがそれをサポートすることを妨げているのは何ですか?


3
それは悪い決断です。単一行のコメントを許可する必要があります。
Tulainsコルドバ

1
@Goose:あなたが見てきましたsass-lang.com
ケビンクライン


1
@TulainsCórdova私は答えを支持しませんでしたが、この議論はすでに行われていると指摘しました。
エリックキング

2
その質問には、ここでの回答よりも技術的な回答がありました。「CSSは他のすべての空白と同様に改行を処理するため、終了区切り文字がないとコメントの終わりを判別できません。」
グース

回答:


8

下位互換性

CSS構文に単一行コメントを導入すると、現在tokenを使用しているファイルの意味が変わる可能性があります//。ブラウザベンダーは、既存のページを破壊する可能性のある変更を導入することに非常に消極的です。

CSSは、非常に正確な「エラー耐性」解析ルールで定義されています。これは、構文的に違法なものを書いたとしても、解析の進め方に関する正確なルールがあることを意味します。//宣言内で不正な文字シーケンス(など)が検出された場合、現在の宣言は破棄され、次のセミコロンまでスキップされます。

CSSはこのように設計されており、古いブラウザを壊さずに新しい構文を導入できます。古いブラウザは、サポートされていない構文を含む宣言をスキップし、その後続行します。

ただし、このロジックは、「ユニット」が処理またはスキップされると宣言することを前提としています。単一行のコメントが導入された場合、解析//されるルールと解析されるルールを変更する次のセミコロンまでではなく、次の改行までスキップすることを意味します。これにより、既存のCSSファイルの意味が驚くほど変化する可能性があります。

例:

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

ここで、誤ってスラッシュを2倍にしました。その結果、フォント宣言は無視されますが、残りはすべて正常に機能します。//-commentsのサポートが導入された場合、突然閉じ括弧がコメントアウトされ、スタイルシートの残りの部分がすべて壊れる可能性があります。

間違いを犯したのは自分自身のせいだと言えるかもしれませんが、インターネット上の不明な数のページが不明瞭な理由で壊れたり、不自然にレンダリングされたりする可能性があることは変わりません。

後方互換性を損なうこのような変更は非常に慎重に検討する必要があります。また、単一行のコメントはおそらく、リスクに対して十分なほど魅力的ではありません。

したがって、CSSに単一行のコメントが必要な場合は、おそらく最初から導入されているはずです。しかし、CSSは非常に単純な言語として始まり、2つの異なるコメント構文を持つことは、当時は不必要な複雑さであると考えられていたでしょう。(ANSI Cにも単一行のコメントはありませんでした。)


ああ、// CSSのトークンですか?教えてよ。
マイケルブラックバーン

現在//、2つの「デリムトークン」に解析され、順番に文法のどこでも許可されていません。詳細については、w3.org / TR / css-syntax-3 /#tokenizationを参照してください。
ジャックB

MainMaがで始まった理由については+1です/**/が、変更されていない理由にも対応しているため、これを受け入れます。
グース

8

さらに別の構文要素をサポートするのは簡単ではありません。まだ追加のコメントスタイルを処理できるツールがたくさんあります。実際、ほとんどのトークナイザー/パーサーは、単に改行を無視するだけで、おそらくそれらを改行に置き換えても驚くことではありません;

それが言語にとって不可欠である場合、すなわち開発者の生活をはるかに楽にする場合、これを行うことができます。たとえば、CSSにコメントの種類がないことは気に入らないでしょうし、コメントを区切る特定の構文要素を追加する価値があるでしょう。//一方、スタイルのコメント?...私はポイントが表示されません。参照/* Hello, World! */:1行のコメント。

実際、//C ++または同様の言語で慣れているため、おそらくスタイルスタイルのコメントを期待します。ただし、CSSはC ++から継承しないため、同様の構文機能を期待するのはかなり奇妙です。

同様に、Pythonプログラマは、CSSにも#-styleコメントが必要だと主張します。だから今、両方のスタイルをサポートする必要がありますか?そして、Haskellの世界から男が含まれるように頼む--{- -}同様に、あなたはもはやCSSコードを認識しませんなぜあなたは自分自身を頼みますよ。

わずかな利点は//、1行のコメントの最後にさらに3文字入力する必要がないことです(実際、文字のカウントを開始する場合、CSSはPythonスタイルのコメントを使用する必要があります)。ただし、適切なテキストエディタを使用している場合は、とにかくショートカットを押すだけでテキストをコメント/コメント解除できます。

[...]は、各ルールが独自の行にあるCSSのような言語にとって特に便利なようです。

私が説明したように、それらは、テキストエディタの小さなサブセットを使用するプログラマの小さなサブセットにとって、ほんの少しだけ有用です。独自の行にある各ルールについてのあなたの発言について(ところで、私はあなたの発言に同意しません)、別のポイントについて考えさせられました:コメントが実際にどのように使用されるか。

私が考えることができるCSSコメントの使用法は次のとおりです。

  • ファイルヘッダーとして(著作権情報、虚栄心など)
  • スタイルのグループの区切り文字として。
  • ハックの説明として。
  • 特定のスタイルまたはプロパティに関する詳細として。

最初の3つのケースでは、とにかく複数行スタイルのコメントを使用します。これは、ファイルヘッダーとハックの説明から明らかです(ほとんどのハックには、少なくとも文とStackOverflowへのハイパーリンクまたはブログ記事が必要です)。区切り文字については:

/**
 * Footer and sitemap styles.
 */

Cスタイルのコメントは、次のものよりもずっと見やすくなっています。

// Footer and sitemap styles.

テキストに埋もれています。


JavaScriptは単一行//コメントもサポートします。
Tulainsコルドバ

それ//は多くの言語で非常に一般的であり、その背後にある概念は構文以上のものであり、機能も異なると主張します。とはいえ、これはこれまでで最も詳細な答えです。
グース

私はそれが小さなサブセットだとは思わない。未加工でCSSを作成する人はだれでも、//を使用してコメントを追加する方が簡単です。ただし、後方互換性の点からは意味がありません。
オルーニー

-5

問題は、コメントのあるほとんどの言語(C#、Javaなど)がコンパイルされた言語であり、コンパイラがコンテンツをコンシューマ(CPU)に提示する前にすべてのコメントを取り除くことです。CSSはコンパイルされません。通常、ファイルは設計者が開発したときに変更されずに送信されるため、コメントを削除する機会はありません。//スタイルのコメントには、構文の正確さを保持するために//シンボルと改行の両方が必要です。

はい、縮小子が存在し、はい、javascriptはこのタイプのコメントを許可します。Javascriptではeval()も許可されているため、モデルとして使用したいとは思わない。


3
この答えはまったく意味がありません。「コメントを削除する機会はありません」-もちろん、他の言語とまったく同じようにパーサーによってコメントが削除されます。それ以外の場合、CSSはどのように/* */コメントを持つことができますか?
ジャックB

私はデザイナーと消費者の間のサードパーティの仲介者を意味しました。コンパイラーは、コンパイルされた言語のこの中間体です。参照する「パーサー」は、コンテンツの最終的なコンシューマーであるブラウザーのサブシステムです。
マイケルブラックバーン

それでは、なぜパーサは//コメントを削除できないのにコメントを削除できないの/* */でしょうか?
ジャックB

1
可能ですが、//とラインフィードの両方を探す必要があり、ラインフィードは構文ではなくセマンティックコンテンツです。設計どおりのCSSは、すべての空白を同じように扱います。//サポートするには、「特別な」空白があり、さらに「特別な」空白は1文字(\ n)であり、2文字(\ r \ n)である場合があります。
マイケルブラックバーン

3
@MichaelBlackburn:DSSSL(S式構文を使用するCSSの前身)にも単一行のコメントがあります。命令型言語と宣言型言語とは関係ありません。
ジャックB
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.