目录
引言
一、变量的定义
二、整型
如何在Move中表示小数和负数?
三、运算符
as运算符
布尔型
地址类型
四、什么是包?
五、什么是模块?
六、如何定义方法?
方法访问权限控制
init方法
总结
引言
Move 是一种专为区块链智能合约开发设计的强类型编程语言,旨在提高安全性和灵活性。它的类型系统和模块化设计使得开发者能够以清晰、简洁的方式定义合约逻辑。在 Move 中,变量的定义严格遵循类型声明的要求,确保了代码在编译阶段就能捕获类型错误,减少了运行时错误的可能性。此外,Move 提供了多种数据类型,包括整型、布尔型和地址类型,使得开发者能够处理复杂的合约需求。理解这些基本概念是学习 Move 的基础,对于后续编写和优化智能合约至关重要。
可在b站搜索这位up主~
一、变量的定义
let a : u32 = 10u32;
let 变量名称: 类型 = 变量值
变量名称只能是:(a-z和A-Z)以及英文下划线(_)
Move是一门强类型的编程语言,没有隐式的类型转换,定义变量也需要申明类型或标注类型。
二、整型
- Move只有6个无符号整数
- Move没有负数和小数
如何在Move中表示小数和负数?
小数的定义是 a / b,所以只要我选择放大整数的倍数可以用来表示小数。
标准库中:https://github.com/MystenLabs/sui/blob/main/crates/sui-framework/packages/move-stdlib/sources/fixed_point32.move
负数 我们可以用前端展现和约定的方式来表示
比如 U8 类型 的1-127 表示负数
128-255 表示正数
三、运算符
as运算符
- 只有类型相同的才能做基本运算
- as 是 Move的 整数 类型转换运算符
- Move 不支持类型的隐式转换
- 语法(1u8 as u64)
fun init(ctx:&mut TxContext}{
let a : u16= 1000;
let b : u64 = 999;
let c : u32=1000;
let d = b + (c as u64);
let f = a + (c as u16);
}
布尔型
地址类型
address 在Move中是一个特殊的类型,用来在合约里面表示一个钱包地址。
字节的长度是32字节
let address1: address = @0x1;
let address2: address = @0x42;
let address3: address = @0xDEADBEEF;
let address4: address = @0x000000000000000000000000000000000000000000000000000000000000000A
let address_2 = @primitive;
四、什么是包?
包是同一个合约地址包含的全部代码的集合,由很多模块组成。
五、什么是模块?
代码模块是代码划分权限和代码的组织方式。
moudle mod :: a {
use sui :: tx_context :: TexContext;
fun init (ctx: $mut TxContext) {
}
}
moudle关键字,mod是地址名称,a是模块的名字,然后用双冒号分隔开来。然后一个花括号,吧里面会包含方法、一些引用、常量和结构体等等之类的。
六、如何定义方法?
fun <identifier> <[type_parameters: constraint],*>([identifier:type])*):
<return_type><acquires [identifier],*><function_body>
fun a () {
}
pubulic fun b () {
}
pubilc (package) fun c () { //以前叫friend 现在叫package
}
public entry fun d () {
}
public fun f(a: u32,b: u32) : bool {
a > b
}
方法访问权限控制
init方法
1、只能是私有的
2、会在发布合约的时候自动调用一次
3、只有两种形式:
- fun init ( ctx : $mut TxContext) { }
- fun init ( witness : Struct, ctx : $mut TxContext) { }
总结
通过本次学习,我们深入探讨了 Move 编程语言的基本特性和语法结构,包括变量的定义、数据类型的使用、模块和方法的定义等。Move 的设计理念强调类型安全和代码组织的清晰性,使得区块链开发变得更加高效和安全。掌握这些知识不仅有助于我们更好地理解智能合约的实现机制,也为我们在实际开发中运用 Move 提供了坚实的基础。在未来的学习和实践中,我们可以继续探索 Move 的更多功能及其在区块链生态系统中的应用。