表达式
前言与确认
上一节我们学会了 + - * / 这些运算。但真正的游戏里,我们很少只算一次加法——更多时候,需要把好几步运算、比较、判断串在一起。把这些“零件”串起来的东西,就叫表达式。
先确认一下我们现有的工程文件夹结构:
root/
├─ emuera.config
├─ Emuera1824.exe
├─ CSV/
└─ ERB/
└─ System.erb其中,System.erb的代码为:
erb
@EventFirst
Print Hello World!
Quit什么是表达式
简单说,表达式就是一个能算出结果的东西。比如:
erb
1 + 2
A * 3
(A + B) / 2它们都能算出一个数值,所以叫数值表达式。同样地,Name + "先生" 能算出一段字符串,叫字符串表达式。
表达式可以出现在任何“需要一个值”的地方。比如 PrintV 后面、赋值号的右边,甚至变量初始化的地方:
erb
@EventFirst
#Dim A = 3
#Dim B = 5
PrintVL A + B * 2
PrintVL (A + B) * 2
Quit输出:
13
16优先级与括号
两行结果不一样,是因为乘除的优先级高于加减。A + B * 2 会先算 B * 2,再和 A 相加。
但括号可以改变这个顺序——括号里的永远先算:
erb
A + B * 2 ; 先乘后加 = 13
(A + B) * 2 ; 先加后乘 = 16记不住优先级也没关系,拿不准就加括号。多写一对括号不会出错,猜错优先级却会。
比较运算
比较两个值,会得到一个“真/假”的结果:真用 1 表示,假用 0 表示。
| 符号 | 含义 |
|---|---|
== | 等于 |
!= | 不等于 |
< | 小于 |
> | 大于 |
<= | 小于等于 |
>= | 大于等于 |
erb
@EventFirst
#Dim A = 3
#Dim B = 5
PrintVL A < B ; 1,因为 3 确实小于 5
PrintVL A > B ; 0,因为 3 并不大于 5
PrintVL A == B ; 0
Quit小心:判断相等要用两个等号
==,一个等号=是赋值。写成A = B的意思是把 B 的值装进 A,而不是比较两者是否相等。
逻辑运算
把多个“真/假”组合起来,就要靠逻辑运算:
| 符号 | 含义 | 说明 |
|---|---|---|
&& | 与 | 两边都为真时才是真 |
|| | 或 | 只要有一个为真就是真 |
! | 非 | 把真变假、把假变真 |
erb
@EventFirst
#Dim Age = 18
PrintVL (Age >= 18) && (Age < 60) ; 1,成年且未到老年
PrintVL (Age < 18) || (Age >= 60) ; 0
PrintVL !(Age < 18) ; 1,取反
Quit逻辑运算符有个贴心的小特性,叫短路求值:A && B 中如果 A 已经是假,就根本不会去算 B。这一点以后再细说,现在知道它“很聪明”就够了。
三元运算
“如果……就……否则……”也可以塞进一行,这叫三元运算:
erb
变量 = 条件 ? 条件为真时的值 # 条件为假时的值erb
@EventFirst
#Dim I = 5
#Dim AbsI = 0
AbsI = I > 0 ? I # -I
PrintVL AbsI
Quit输出:
5计算字符串时,需要在外面套一层 \@ ... \@:
erb
@EventFirst
#Dim I = -1
#DimS Msg = ""
Msg = \@I >= 0 ? "正数" # "负数"\@
PrintS Msg
Quit输出:
负数小结
- 表达式是能算出结果的式子,可以放在任何需要值的地方;
- 乘除优先于加减,不确定就加括号;
- 比较运算得到
1(真)或0(假);判断相等要用==; &&、||、!用来组合多个条件;- 三元运算可以在一行里写下“如果……就……否则……”。
下一步,我们把这些表达式真正写成一句句的语句:简单语句。