变量 V2

变量 V2

> LeekScript v2

**注意:本页面面向 LeekScript 2 的用户。想了解当前版本 LeekScript 中的变量,请前往 变量**

待办:

----- 什么是变量?

变量是所有编程语言中的一个基础概念。它们可以把值((表达式的结果))保存在内存中,以便在计算((其他表达式))中重复使用。

简介

LeekScript 提供的变量可以存放多种类型的值: ((如有需要,放上指向具体页面的链接,而不是写“稍后再讲”))

不过,变量的类型并不固定(不像 C 或 Java),而是会根据你想存放的数据自动适应(就像 JavaScript 或 PHP 那样)。

((其实并没有什么“适应”,只是每次使用时都会检查类型。))

使用变量之前,必须先声明它。((注意措辞,这样写会让人以为变量只能在声明之后赋值,对 let 和 const 来说有问题。把这个例子和下一个例子对调。)) 声明时使用关键字“var”,写法如下:

// 声明变量 nomDeVariable var nomDeVariable;

也可以像下面这样给变量赋一个值:

// 声明变量 nomDeVariable 并给它赋值 12 let nomDeVariable = 12;

另外,也可以一次声明多个变量,用逗号隔开:

// 声明 premiereVariable 和 deuxiemeVariable var premiereVariable, deuxiemeVariable; let firstVar = 1, secondVar = 2

注意: 升级到 LSv2 之后,; 变成了可选的。如果想让不易阅读的代码更清晰,它仍然有用。

((缩进让代码更易读,分号则为编译器/解释器消除歧义。))

变量共有 4 种,按照能否被修改以及在战斗中存活多久来区分。 具体如下:

变量类型 可修改 常量 回合结束时失效 var let 战斗结束时失效 global const

这几种变量的声明方式相同,但常量一旦声明,就几乎((是完全不能,除非集合/匿名对象出现什么奇怪的行为。))不能再修改了(这很合理)。

使用变量

let

((把 var 一节中可以用 let 写的示例移到这一节来。))

var

((给出确实需要重新赋值的示例,比如在循环中。))

在代码中可以用多种方式使用变量。

可以用赋值运算符 = 给变量赋一个值(也就是让它把这个值“记”在内存里):

((这里展示的是重新赋值,是 var 和 global 特有的。))

// 声明 maVariable var maVariable // 把 1 赋给 maVariable maVariable = 1

可以通过编写表达式来进行计算,可用的运算符如下:

写法如下:

((总是重复使用同一个变量有点脏,不应该给新手写脏代码。悄悄说一句:let))

// 声明变量 a var a // 做几次计算 a = 2 + 8 // a 的值变为 10 a = 5 - 4 // a 的值变为 1 a = 3 * 5 // a 的值变为 15 a = 6 / 2 // a 的值变为 3 a = 8 % 3 // a 的值变为 2

// 也可以组合使用多个运算符 a = 1 + 2 * 3 // a 的值变为 7 a = 4 / 2 + 1 // a 的值变为 3

// 甚至可以使用括号 a = (2 + 3) * 2 // a 的值变为 10

也可以在表达式中使用变量,计算时会用到它的值。例如:

((再说一次,如果没有合理的修改需求,就别提前声明。))

// 声明变量 a 和 b var a, b

// 把值 10 赋给 a a = 10 // a 的值变为 10

// 把 a + 5 的值赋给 b b = a + 5 // b 的值变为 15

也可以像下面这样使用字符串:

((又来了。))

var maVariable maVariable = "我是一个字符串"

对字符串只能使用 + 运算符,它可以拼接字符串片段,也就是把它们首尾相连。所以下面的代码:

((我知道老看到同一条备注很烦,但新手就是照着看到的东西写代码的。))

// 声明 chaine1 和 chaine2 var chaine1, chaine2

chaine1 = "大家" // chaine1 的值变为 "大家" chaine2 = chaine1 + "好" // chaine2 的值为 "大家好"

值得一提的是,字符串可以和数字拼接,这在把计算结果放进字符串时很有用:

((再说一次。))

// 声明 a 和 chaine var a, chaine

a = 51 * 17 // a 的值变为 867 chaine = "51 乘以 17 的结果是:" + a // 此时 chaine 的内容为 "51 乘以 17 的结果是:867"

变量作用域

((先介绍这个,再讲全局变量))

const

((尚未实现))

((相当于具有全局作用域的 let))

((如果没有以全局方式声明的函数,也就是用 fonction name(parameters) { body } 语法声明的函数,它就没有用处))

global

((尚未实现))

((相当于具有全局作用域的 var))

((如果没有以全局方式声明的函数,也就是用 fonction name(parameters) { body } 语法声明的函数,它就没有用处))