條件
條件提供控制流程給原本靜態的語言,提供條件式導入、mixin、函式,以及更多。以下範例僅為範例,不建議使用 😃
if / else if / else
if
條件運作方式符合預期,僅接受一個表達式,在 true
時評估後續區塊。if
會搭配典型的 else if
和 else
符號,作為後備選項。
以下範例會條件式覆寫 padding
屬性,將其替換為 margin
。
overload-padding = true
if overload-padding
padding(y, x)
margin y x
body
padding 5px 10px
overload-padding = true
if overload-padding
padding(y, x)
margin y x
body
padding 5px 10px
另一個範例
box(x, y, margin = false)
padding y x
if margin
margin y x
body
box(5px, 10px, true)
box(x, y, margin = false)
padding y x
if margin
margin y x
body
box(5px, 10px, true)
另一個 box()
輔助程式
box(x, y, margin-only = false)
if margin-only
margin y x
else
padding y x
box(x, y, margin-only = false)
if margin-only
margin y x
else
padding y x
unless
對於熟悉 Ruby 程式語言的使用者,我們有 unless
條件。它基本上是 if
的相反,本質上是 if (!(expr))
。
在以下範例中,如果 disable-padding-override
為 undefined
或 false
,padding
會被覆寫,改顯示 margin
。但如果它是 true
,padding
會繼續輸出預期的 padding 5px 10px
。
disable-padding-override = true
unless disable-padding-override is defined and disable-padding-override
padding(x, y)
margin y x
body
padding 5px 10px
disable-padding-override = true
unless disable-padding-override is defined and disable-padding-override
padding(x, y)
margin y x
body
padding 5px 10px
後置條件式
Stylus 支援後置條件式。這表示 if
和 unless
作為運算子;當右手邊的運算式為真時,它們會評估左手邊的運算元。
例如,我們定義 negative()
來執行一些基本的類型檢查。以下我們使用區塊式條件式
negative(n)
unless n is a 'unit'
error('invalid number')
if n < 0
yes
else
no
negative(n)
unless n is a 'unit'
error('invalid number')
if n < 0
yes
else
no
接下來,我們利用後置條件式讓我們的函式簡潔。
negative(n)
error('invalid number') unless n is a 'unit'
return yes if n < 0
no
negative(n)
error('invalid number') unless n is a 'unit'
return yes if n < 0
no
當然,我們可以更進一步。例如,我們可以寫 n < 0 ? yes : no
,或僅使用布林值:n < 0
。
後置條件式可以套用於大多數單行陳述式。例如,@import
、@charset
、混合,當然還有屬性,如下所示
pad(types = margin padding, n = 5px)
padding unit(n, px) if padding in types
margin unit(n, px) if margin in types
body
pad()
body
pad(margin)
body
apply-mixins = true
pad(padding, 10) if apply-mixins
pad(types = margin padding, n = 5px)
padding unit(n, px) if padding in types
margin unit(n, px) if margin in types
body
pad()
body
pad(margin)
body
apply-mixins = true
pad(padding, 10) if apply-mixins
產生
body {
padding: 5px;
margin: 5px;
}
body {
margin: 5px;
}
body {
padding: 10px;
}
body {
padding: 5px;
margin: 5px;
}
body {
margin: 5px;
}
body {
padding: 10px;
}