Skip to content

Move 基本数据类型

Move 语言为简单值提供了多种内置的基本数据类型,它们是构成所有其他类型的基础,好比建造房屋的砖块一样。这些基本数据类型包括:

  • 布尔值
  • 无符号整数
  • 地址

在深入了解这些类型之前,我们先来看看如何在 Move 中声明和赋值变量。

变量和赋值

在 Move 中, 变量使用 let 关键字声明, 就像在说 "让某某等于什么"。 默认情况下, 它们是不可变的, 就像一个常量, 一旦赋值就不能改变。 但是, 如果我们需要一个可以改变的变量, 就可以使用 let mut 关键字, 意思是 "让某某等于什么, 并且可以改变"。

let mut 语句的语法如下:

move
let <变量名>[: <类型>] = <表达式>;
let mut <变量名>[: <类型>] = <表达式>;

其中:

  • <变量名> - 变量的名称, 就像我们给变量起的名字
  • <类型> - 变量的类型, 可以是布尔值、 整数、 地址等等, 可选
  • <表达式> - 要赋给变量的值, 可以是一个具体的数字、 布尔值、 或者一个计算结果

例如:

move
let x: bool = true;
let mut y: u8 = 42;

如果我们想改变一个可变变量的值, 可以使用 = 运算符重新赋值。 例如:

move
y = 43;

我们还可以通过重新声明来遮蔽变量, 就好像用一个新盒子盖住旧盒子, 虽然旧盒子还在, 但我们只能看到新盒子。 例如:

move
let x: u8 = 42;
let x: u16 = 42;

布尔值

bool 类型表示一个布尔值, 它只有两个可能的值: truefalse, 就像我们说 "是" 或 "否", "真" 或 "假"。 在 Move 中, truefalse 是关键字, 我们不需要特别声明它们的类型, 编译器会自动识别。 例如:

move
let x = true;
let y = false;

布尔值通常用于存储标志, 就像一个开关, 以及控制程序的流程。

整数类型

Move 支持各种大小的无符号整数, 从 8 位到 256 位。 无符号整数就是没有负数的整数。 整数类型包括:

  • u8 - 8 位, 可以表示 0 到 255
  • u16 - 16 位, 可以表示更大的范围
  • u32 - 32 位
  • u64 - 64 位
  • u128 - 128 位
  • u256 - 256 位, 可以表示非常大的数字

例如:

move
let x: u8 = 42;
let y: u16 = 42;
// ...
let z: u256 = 42;

与布尔值不同, 编译器需要知道整数的具体类型, 才能进行计算。 在大多数情况下, 编译器会根据我们给出的值自动推断类型, 但有时我们需要明确告诉编译器整数的类型。

我们可以通过两种方式指定整数类型:

  • 在声明变量时指定类型, 例如 let x: u8 = 42;
  • 在数字后面加上类型后缀, 例如 let x = 42u8;

运算

Move 支持对整数进行各种运算, 包括:

  • 加法 +
  • 减法 -
  • 乘法 *
  • 除法 /
  • 取余 %

需要注意的是, 运算符两边的整数类型必须一致, 否则编译器会报错。 如果需要对不同类型的整数进行运算, 可以使用 as 关键字进行类型转换。 例如:

move
let x: u8 = 42;
let y: u16 = x as u16;

溢出

Move 语言的设计非常注重安全性, 它不允许整数运算的结果超出该类型所能表示的范围, 否则会引发运行时错误。 例如, u8 类型的最大值是 255, 如果我们将 255 加 1, 就会发生溢出, 导致程序报错。

move
let x = 255u8;
let y = 1u8;
// 这将引发错误
let z = x + y;

总结: Move 语言提供了丰富的基本数据类型, 它们是构成复杂程序的基础。 理解这些基本数据类型, 以及如何在 Move 中声明和使用变量, 是编写 Move 程序的第一步。