Appearance
条件句
¥Conditionals
条件为静态语言提供了控制流,提供条件导入、混合、函数等。下面的例子只是简单的例子,不推荐:)
¥Conditionals provide control flow to a language which is otherwise static, providing conditional imports, mixins, functions, and more. The examples below are simply examples, and not recommended 😃
if / else if / else
if
条件如你所期望的那样工作,只需接受一个表达式,并在 true
时评估以下块。除了 if
之外,还有典型的 else if
和 else
令牌,充当后备令牌。
¥The if
conditional works as you would expect, simply accepting an expression, evaluating the following block when true
. Along with if
are the typical else if
and else
tokens, acting as fallbacks.
下面的示例将有条件地重载 padding
属性,将其交换为 margin
。
¥The example below would conditionally overload the padding
property, swapping it for 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
另一个例子:
¥Another example:
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()
助手:
¥Another box()
helper:
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))
。
¥For users familiar with the Ruby programming language, we have the unless
conditional. It’s basically the opposite of if
—essentially if (!(expr))
.
在下面的示例中,如果 disable-padding-override
是 undefined
或 false
,则 padding
将被覆盖,而显示 margin
。但如果是 true
,padding
就会按照预期继续输出 padding 5px 10px
。
¥In the example below, if disable-padding-override
is undefined
or false
, padding
will be overridden, displaying margin
instead. But if it’s true
, padding
will continue outputting padding 5px 10px
as expected.
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
后缀条件句
¥Postfix Conditionals
Stylus 支持后缀条件。这意味着 if
和 unless
充当运算符;当右侧表达式为真时,它们评估左侧操作数。
¥Stylus supports postfix conditionals. This means that if
and unless
act as operators; they evaluate the left-hand operand when the right-hand expression is truthy.
例如,让我们定义 negative()
来执行一些基本类型检查。下面我们使用块式条件语句:
¥For example let's define negative()
to perform some basic type checking. Below we use block-style conditionals:
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
接下来,我们利用后缀条件来保持函数简洁。
¥Next, we utilize postfix conditionals to keep our function terse.
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
。
¥Of course, we could take this further. For example, we could write n < 0 ? yes : no
, or simply stick with booleans: n < 0
.
后缀条件可以应用于大多数单行语句。例如,@import
、@charset
、mixin - 当然还有如下所示的属性:
¥Postfix conditionals may be applied to most single-line statements. For example, @import
, @charset
, mixins—and of course, properties as shown below:
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
产量:
¥yielding:
body {
padding: 5px;
margin: 5px;
}
body {
margin: 5px;
}
body {
padding: 10px;
}
body {
padding: 5px;
margin: 5px;
}
body {
margin: 5px;
}
body {
padding: 10px;
}