提案依頼:スラッシュを区切り文字として使用
Natalie Weizenbaum 投稿 2019年5月7日
Sassの歴史の初期段階で、プログラミング言語全体で最も一般的な表現であった(そして現在もそうである)ため、除算演算子として `/` を使用することが決定されました。`/` 文字は、プレーンなCSSプロパティではほとんど使用されておらず、使用されている場合でも省略可能な短縮形でした。そのため、Sassは、`/` がリテラルスラッシュとしてレンダリングされるか、演算子として扱われるかを定義する 一連のヒューリスティック を定義しました。
長い間、これらのヒューリスティックは非常にうまく機能していました。しかし、近年、CSSグリッド や CSS Color Level 4 などのCSSへの新しい追加により、`/` が区切り文字として使用される頻度が高まっています。除算とスラッシュ区切りの両方に同じ文字を使用することは、ユーザーにとってますます煩わしくなってきており、最終的には維持できなくなる可能性があります。
そのため、`/` を *区切り文字のみ* として再定義することを計画しています。現在のように(少なくとも一方のオペランドが数値でない場合に)引用符で囲まれていない文字列を作成するのではなく、新しいスラッシュ区切り文字を含むリストを作成します。たとえば、`1 / 2 / 3` は、3つの要素を持つスラッシュ区切りのリストになります。除算は代わりに、関数 `divide()` (または新しいモジュールシステムでは `math.div()`)として記述されます。
ロールアウト
これは、既存のSassのセマンティクスに対する大きな変更となるため、3段階のプロセスで展開します。
-
最初の段階では、破壊的な変更は導入されません。それは以下のようになります。
- 数値以外の引数に対して非推奨の警告を生成することを除いて、今日の `/` 演算子とまったく同じように動作する `divide()` 関数を追加します。
- Sassのオブジェクトモデルにスラッシュ区切りのリストを追加します。ただし、それらを作成するためのリテラル構文は *ありません*。破壊的な変更になるため、それは後で追加されます。
- スラッシュ区切りのリストを作成する `slash-list()` 関数を追加します。
- 除算として解釈されるすべての `/` 演算に対して非推奨の警告を生成します。
-
2番目の段階は、破壊的な変更 *になります*。それは以下のようになります。
- `/` を排他的にリスト区切り文字にします。
- `divide()` が数値以外の引数に対してエラーをスローするようにします。
- 冗長になるため、`slash-list()` 関数を非推奨にします。
-
3番目の段階では、`slash-list()` 関数を削除するだけです。これは優先事項ではなく、次のメジャーバージョンリリースまで延期されます。
フィードバックを提供する
提案された動作の正確な仕組みについて詳しく知りたい場合は、Sass言語リポジトリにアクセスして、完全な提案をお読みください。上記の背景と概要のセクションは含まれているため、スキップできます。ただし、これは仕様として記述されていることに注意してください。エッジケースがどのように動作するかを正確に理解するには最適ですが、上記のセクションほど会話的ではありません。
提案された内容に問題がある場合、または重要なユースケースがカバーされていない場合は、Sass言語イシュートラッカーでご報告ください。提案を「承認済み」とマークして実装フェーズに移行する前に、少なくとも2週間は議論のために公開しておきます。
ただし、コミュニティからのフィードバックは大歓迎ですが、Sassの設計は最終的には言語チームの手に委ねられています。発言するユーザーの視点やユースケースは絶対に考慮しますが、SassやCSSを初めて使用し、ブログを読んだりイシュートラッカーにコメントしたりすることをまだ知らないすべてのユーザーを考慮することも私たちの仕事です。私たちの慎重な意思決定がSassを今日の姿にしたことを忘れないでください。あなたが望む決定を私たちが行わなかったとしても、辛抱強くお待ちください。