プログラマとプロマネのあいだ

プログラマもやるし、プロマネもやるし、たまに似非アーキとか営業っぽいこともやる

!defaultってなんぞ

Sencha TouchをCompassを使って、色々カスタマイズしてみようと思い、
$base-colorってのを探してみると、
resources/themes/stylesheets/sencha-touch/default/_variables.scss
で見つかる。


が、中を見てみると、

...
// These are the only variables which drive the theme color scheme
/*$base-color: #647482 !default; // Graphite*/
$base-color: #354F6E !default; // Graphite
...

のようになってる。
なんだこの!defaultって。ってのが今回の話題。
(ちなみに余談だが、コメントアウトされてる$base-color: #647482を有効にしてみると、グレーっぽい感じになる)


Sassのドキュメントを見てみると、該当の箇所が見つかる。
Variable Defaults: !default

Variable Defaults: !default


変数に対して、!defaultフラグが値の後ろに付与されている場合、その変数に値が割り当てられていなければ、値を割り当てることができます。これは、変数に値が既に割り当てられていれば、上書きすることはできませんが、まだ値が割り当てられていなければ、値を設定することができるという意味です。

(謎かけみたいな訳文だな。。)


例:

$content: "First content";
$content: "Second content?" !default;
$new_content: "First time reference" !default;

#main {
  content: $content;
  new-content: $new_content;
}

以下のようにコンパイルされます。

#main {
  content: "First content";
  new-content: "First time reference"; }

constみたいな意味かと思ったら、
var = var || newVal
みたいな意味だった。
だから、下の例みたいに、先に変数を定義するわけね。
(_variables.scssの$base-colorは!default付きだから、先に定義した$base-colorを上書きできない)

$base-color: #00FF00;

@import 'sencha-touch/default/all';

@include sencha-panel;
@include sencha-buttons;
@include sencha-sheet;
...


、、、と、こんな記事をうだうだ書いていたら、
本家の方でちゃんとした記事が上がってしまいました。。


ちなみに日本語版の方は、僕が翻訳して、@naotoriさんのチェック&訂正を経た上で、公開されています。