[TOC] # 基本类型及运算 ## 运算符 运算符之间的优先级如下: * 单目运算符 `-` 取负数 * `*, /` * `+,-` 整个规则也跟 java 的运算符优先级保持一致。你可以通过括号来强制指定优先级,比如例子中的 `a-(b-c)`就是通过括号,强制先执行 `b-c` ,再后再被 a 减。 **通常来说,复杂的算术表达式,从代码可读性和稳健角度,都推荐使用括号来强制指定优先级。** ## 字符串插值(String Interpolation) 字符串拼接可以用加法,比如 ~~~ let name = "aviator"; let s = "hello," + name; ~~~ ``` let name = "aviator"; let a = 1; let b = 2; let s = "hello, #{name}, #{a} + #{b} = #{a + b}"; p(s); ``` 字符串中 `#{}` 括起来的表达式都将在当前上下文里自动执行求值,然后插入到最终的结果字符串,上面的例子将输出: ``` hello, aviator, 1 + 2 = 3 ``` ## 逻辑运算符 * `>`  大于 * `>=` 大于等于 * `<` 小于 * `<=` 小于等于 * `==` 等于 * `!=`  不等于 布尔值可参于逻辑与、逻辑或、逻辑否等运算,假设 `x`和 `y`  的返回结果是布尔值: * `x && y`   表示**并且**的关系,x 为真,并且 y 为真的情况下,结果为 true,否则 false。 * `x || y`   表示**或者**的关系, x 为真,或者 y 为真,结果就为 true,两者都为假值的时候结果为 false。 * `!x`**否定**运算符,如果 x 为 true,则结果为 false,反之则为 true。 `&&`和 `||` 都支持**短路规则**, * 如果 `x`为假值, `x && y`  直接返回 false, y 就不进行求值。 * 如果 `x`为真值, `x || y`  直接返回 true, y 也不进行求值。 ## 三元运算符 布尔值可用于三元表达式和条件语句作为判断,决定执行哪个分支代码。这里先介绍下三元表达式 `test ? stmt1: stmt2`,当 `test`的执行结果为 true 的时候,执行 `stmt1`,反之则执行 `stmt2`,结果即为 `stmt1`或者 `stmt2` 的执行结果: ``` let a = 3; let b = 1; let c = a > b ? println("a > b") : println("a <= b"); println(c); ``` 将打印: ~~~ a > b null ~~~