Skip to content

表达式

前言与确认

上一节我们学会了 + - * / 这些运算。但真正的游戏里,我们很少只算一次加法——更多时候,需要把好几步运算、比较、判断串在一起。把这些“零件”串起来的东西,就叫表达式

教程依赖

本教程假设您已学习过快速开始数值与文本输入与输出基本运算。若您尚未学习过,我们强烈推荐您首先学习相应教程。

先确认一下我们现有的工程文件夹结构:

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(假);判断相等要用 ==
  • &&||! 用来组合多个条件;
  • 三元运算可以在一行里写下“如果……就……否则……”。

下一步,我们把这些表达式真正写成一句句的语句简单语句

GPL-3.0+ Licensed