コメント募集: 厳密な単項演算子
2022年6月15日投稿者: Natalie Weizenbaum
Sass で `margin: $a -$b` が何を意味するかご存知ですか?「`margin: $a (-$b)` と同じ」とお答えになったなら申し訳ありませんが、それは誤りです。実際は `margin: $a - $b` と同じです。Sass のパーサーのこの奇妙な隅に引っかかったのはあなただけではありません!しかし、私たちの新しい言語提案はそれを修正することを目指しています。
現在コミュニティからのフィードバックを求めている厳密な単項演算子に関する提案では、まず `$a -$b` の形式の式を非推奨とし、最終的には許可しないようにすることを提案しています。非推奨化は決して楽しいものではありませんが、これは比較的容易に進むはずです。目的によって `$a - $b` または `$a (-$b)` を記述するだけで済みます。また、スタイルシートを自動的に更新するためのSass マイグレーションツールも提供します。
非推奨
$a -$b
は、作者の意図が不明瞭であり、現在の動作はおそらく正しくないため、今後許可されなくなります。
引き続き許可
-
$a - $b
は、減算を示していることが明確であるため、引き続き動作します。 -
$a (-$b)
は、括弧によって単項マイナスが明確になるため、引き続き動作します。
$a - $b
または `$a (-$b)` のオプションは、広く使用されているすべての Sass バージョンでサポートされているため、ライブラリがこの非推奨警告を回避し、古い Sass バージョンをサポートし続けることに問題はありません。さらに、`--quiet-deps` コマンドラインフラグまたは`quietDeps` JS API オプションを使用して、制御できない依存関係からの警告を抑制することも常にできます。
なぜこのように動作するのか?なぜこのように動作するのか?permalink
なぜ `$a -$b` がこのように解析されるのか不思議に思うかもしれません。簡潔に言うと、「他のプログラミング言語でもそうだからです」。ほとんどのプログラミング言語では、演算子の解析方法は、周囲に空白があるかどうかに関係なく同じです。`$a - $b` を減算として解析する場合は、`$a -$b` も減算として解析する必要があります。
Sass の問題点は、値のスペース区切りリストを CSS から継承していることです。そのため、一部のコンテキストでは、ユーザーは2つの式を並べて記述し、それぞれ単独で使用した場合と同じように解析されることを期待します。これらの2つの原則が矛盾し、この提案が対処しようとする混乱が生じます。
動作方法を変更しないのはなぜですか?動作方法を変更しないのはなぜですか?permalink
理論的には、`$a -$b` を `$a (-$b)` と同じように解析するように Sass を変更できます。つまり、スペースで区切られた2つの値のリストで、後者は単項マイナスが付きます。しかし、2つの理由からそうしませんでした。
-
実際的な問題として、既存の構文の動作を変更する破壊的な変更を行う方が、構文を完全に禁止する変更を行うよりも困難です。より多くのリリースと、異なる動作を持つより多くの異なるバージョンの Sass が必要になります。また、一度に多くのバージョンをアップグレードするスタイルシートが新しい動作に切り替わってもエラーが発生しない可能性があり、最悪の場合、不正確なスタイルを出荷する可能性があります。
-
すべてのケースで `$a -$b` が `$a (-$b)` として解析されるべきであることは明らかではありません。他のプログラミング言語からのユーザーは、それらの言語と同じように解析されることを期待するかもしれません。Sass でも、`$a -$b` は `calc()` 内では有効な二項演算子のままです。エレガントなスタイルとは言えませんが、フォーマットは常に作者の最優先事項ではないこともあります!
ご意見をお聞かせください!ご意見をお聞かせください!permalink
この変更についてご意見やご感想がありましたら、提案全文をお読みになり、フィードバックを添えてissue を作成してください。1ヶ月間コメントを受け付け、その後提案を確定し、実装を開始します。