{"content":{"title":"展望 Move 2024 Edition","body":"> Sui Move作为Sui区块链的核心编程语言，在2024年迎来了一次重大更新，引入了多项新特性，旨在提高开发效率、增强语言的表达力，以及优化智能合约的性能和安全性。本文将深入探讨这些更新，包括方法语法(Method Syntax)、索引语法(Index Syntax)、宏函数(Macro Functions)以及枚举(Enums)。\r\n> \r\n\r\n## 写在前面\r\n\r\n**截止文章成稿日 2024.3.24, 部分语法还是不支持, 推荐大家实际开发还是使用默认版本**\r\n\r\n## **方法语法(Method Syntax)**\r\n\r\n2024版的Sui Move引入了[方法语法](https://github.com/MystenLabs/sui/issues/14063)，这是一种允许开发者在值上直接调用函数的语法转换。该变化极大地简化了代码编写过程，提高了代码的可读性和维护性。\r\n\r\n### 示例：提款函数\r\n\r\n- 在代币合约中提款的示例：\r\n    \r\n    ```rust\r\n    let c2: Coin<SUI> = c.withdraw(10);\r\n    ```\r\n    \r\n- 更新之前，相同的操作需要更冗长的代码实现：\r\n    \r\n    ```rust\r\n    let c2: Coin = sui::coin::withdraw(&mut c, 10);\r\n    ```\r\n    \r\n\r\n方法语法的引入，使代码更加简洁。开发者可以更直观地理解代码的功能，从而加快开发速度并减少错误。\r\n\r\n## **索引语法(Index Syntax)**\r\n\r\n建立在方法语法之上，索引语法为访问集合中的元素提供了简化的方式。这一语法使得对数组、向量等集合类型的索引访问变得更加直观和便捷\r\n\r\n### 示例：访问集合元素\r\n\r\n- 索引语法在访问和修改集合元素时的应用：\r\n    \r\n    ```rust\r\n    &x[i] // 展开为 x.borrow(i)\r\n    &mut x[i] // 展开为 x.borrow_mut(i)\r\n    x[i] // 展开为 *x.borrow(i)\r\n    x[i] = v // 展开为 x.assign(i, v)\r\n    ```\r\n    \r\n\r\n这种简化的语法不仅使代码更易于编写和阅读，还有助于减少因复杂索引操作而引入的错误。\r\n\r\n## **宏函数(Macro Functions)**\r\n\r\n宏函数是另一项重要更新，它允许Move语言模拟高阶函数的行为，如`map`、`filter`等，这在以前的版本中是不可能实现的，因为Move不支持lambda表达式、闭包或函数指针。\r\n\r\n### 示例：集合转换\r\n\r\n使用宏函数，开发者可以以更声明式的方式处理集合，例如：\r\n\r\n```rust\r\nlet v2 = v.map!(|x| x + 1);\r\nv.for_each!(|x| foo(x));\r\n```\r\n\r\n这些宏函数极大地丰富了Move语言的功能，使其能够更灵活地处理数据转换和迭代操作。\r\n\r\n## **枚举(Enums)**\r\n\r\n枚举的引入为Move语言添加了定义多形态数据类型的能力。与结构体相比，枚举可以根据不同的变体拥有不同的字段，从而在同一类型中表达更多的变化。\r\n\r\n### 示例：颜色和选项\r\n\r\n- 枚举的定义和使用：\r\n    \r\n    ```rust\r\n    public enum Color {\r\n        RGB { red: u8, green: u8, blue: u8 },\r\n        HSL { hue: u16, saturation: u8, lightness: u8 },\r\n        Hex(u32)\r\n    }\r\n    \r\n    public enum Option<T> {\r\n        None,\r\n        Some(T),\r\n    }\r\n    ```\r\n    \r\n\r\n枚举使得开发者能够更准确地描述数据的多种可能形态，增加了代码的表达力和灵活性\r\n\r\n## **较小的更新**\r\n\r\n- **取消显式的友元声明**：此更新旨在简化代码的组织结构，减少模块间依赖声明的复杂性。\r\n- **允许**`break`**带有返回值**：这使得循环和选择结构中的`break`语句能够更灵活地控制流程和返回数据。\r\n\r\n### **破坏性变更**\r\n\r\nMove 2024版的更新对现有代码产生了一些影响，特别是在代码明确性方面：\r\n\r\n- **结构体声明必须显式为公开(**`public`**)**：为了支持未来结构体可能拥有不同的可见性级别，2024版要求所有结构体声明都必须包含`public`关键字。\r\n- `mut`**注解**：现在，如果局部变量被赋值或者可变借用，需要明确地添加`mut`注解。这一变化是为了提高方法调用时代码的可读性和可理解性。\r\n- **新关键字**：Move语言新增了几个关键字，如`mut`、`enum`、`type`和`match`，这些在以前的版本中可能被用作标识符。为了帮助开发者迁移现有代码，新的语法规则允许使用反引号**```**将这些关键字作为标识符使用，例如`let `type` = 0; `type` + 1;`。\r\n\r\n### **新关键字的使用**\r\n\r\n新增关键字的引入，旨在丰富Move语言的语法和表达能力，同时也需要开发者对现有代码进行相应的调整。使用反引号**```**作为标识符的包装，提供了一种灵活的方式来适应这些变化，确保代码的平滑过渡。\r\n\r\n## 开启 2024 版\r\n\r\nMove的2024版，允许开发者测试新特性并相应地更新现有代码。开发者可以通过在`Move.toml`文件的`[package]`部分指定`edition = \"2024.alpha\"`来开始测试alpha版本。在这些新特性变得相对稳定之后，将发布候选发布版本。与alpha版本一样，开发者可以通过在`Move.toml`文件的`[package]`部分指定`edition = \"2024.rc\"`来测试候选发布版本。 **(VsCode 截止文章发布日, 还不支持 2024.rc)**\r\n\r\n尽管候选发布版本将比alpha版本更稳定，但未来仍可能出现小的破坏性变更\r\n\r\n### **总结**\r\n\r\nSui Move 2024版的更新为Sui区块链上的智能合约开发带来了前所未有的灵活性和强大功能。通过引入方法语法、索引语法、宏函数和枚举，开发者现在可以更高效、更直观地编写代码，定义更丰富的数据类型，并实现更复杂的逻辑。这些更新不仅提升了Sui Move的竞争力，也为构建在Sui平台上的应用程序开辟了新的可能性。随着社区的不断探索和实践，期待看到更多创新和优秀的Sui Move应用诞生。\r\n\r\n## 加入组织, 一起交流/学习!\r\n- [Sui 中文开发群(TG)](https://t.me/move_cn)\r\n- 企鹅群: 79489587"},"author":{"user":"https://learnblockchain.cn/people/18883","address":"0x1d791545aeee89011c20a32c5be31623c604cb1b"},"history":null,"timestamp":1711238362,"version":1}