Skip to content

Commit

Permalink
群里分享学习笔记_共学营+对外输出学习笔记_共学营
Browse files Browse the repository at this point in the history
  • Loading branch information
lizhe committed Nov 17, 2024
1 parent 06ae5c8 commit a24a0e0
Show file tree
Hide file tree
Showing 2 changed files with 154 additions and 0 deletions.
2 changes: 2 additions & 0 deletions mover/lizhecome/co-learn-2411/readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
- [x] (五)使用Move语言开发第一个链上游戏【[学习笔记链接](https://github.com/move-cn/letsmove/tree/main/mover/lizhecome/notes/05_move_game.md)
- [x] (六)Move实现简单的代币swap功能【[学习笔记链接](https://github.com/move-cn/letsmove/tree/main/mover/lizhecome/notes/06_move_swap.md)
- [x] (七)Move语言基础数据类型【[学习笔记链接](https://github.com/move-cn/letsmove/tree/main/mover/lizhecome/notes/07_move_base_types.md)
- [x] (八)Move语言的函数【[学习笔记链接](https://github.com/move-cn/letsmove/tree/main/mover/lizhecome/notes/08_move_function.md)


## 对外输出学习笔记
Expand All @@ -46,6 +47,7 @@
- [x] (五)使用Move语言开发第一个链上游戏【[学习笔记链接](https://learnblockchain.cn/article/9869)
- [x] (六)Move实现简单的代币swap功能【[学习笔记链接](https://learnblockchain.cn/article/9908)
- [x] (七)Move语言基础数据类型【[学习笔记链接](https://learnblockchain.cn/article/9935)
- [x] (八)Move语言的函数【[学习笔记链接](https://learnblockchain.cn/article/9942)

## 在HOH社区公众号发布自己的技术文章

Expand Down
152 changes: 152 additions & 0 deletions mover/lizhecome/notes/08_move_function.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,152 @@

# (八)Move语言的函数

今天继续学习HOH水分子社区的视频课程,了解了函数的方方面面。
函数在Move语言中扮演着“执行者”的角色,是处理各种操作和业务逻辑的核心模块。在这篇学习笔记中,我们将深入探讨Move语言的函数(Function)、表达式(Expression)、控制流(Control Flow)以及结构方法(Struct Methods)。让我们一起来揭开Move函数的神秘面纱吧!

## 1. 函数(Function)

在Move中,函数是实现具体功能的基本单元,就像工厂中的一条流水线,接收输入(参数),经过加工(函数体),最终产出结果(返回值)。

函数的基本结构:

```move
public fun function_name(param1: Type1, param2: Type2): ReturnType {
// 函数体
}
```

- `public`:可选的访问修饰符,表示函数可以被外部模块调用,就像商店里公开销售的商品。
- `function_name`:函数名称,是唯一标识函数的名字。
- `param1``param2`:函数的输入参数,类似于工厂流水线上传输的原料,需声明类型。
- `ReturnType`:返回值类型,指定函数的输出结果,可能是数值、布尔值、结构体等。

示例:

```move
module ExampleModule {
public fun add(x: u64, y: u64): u64 {
x + y
}
}
```

在这个例子中,`add` 函数接受两个 `u64` 类型的参数,返回它们的和。它就像一台简单的加法计算器,只需提供两个输入,它就能输出结果。

## 2. 表达式(Expression)

表达式是Move语言中用于执行计算的基本元素,就像数学公式中的每个部分,是程序逻辑中不可或缺的“砖瓦”。

常见的表达式:
- 常量表达式:直接量,例如 `5, true`,表示固定的值。
- 变量引用:例如 `x, my_var`,表示已存储的值。
- 算术运算:例如 `a + b, x - y`,用于执行数学计算。
- 函数调用:例如 `add(1, 2)`,表示调用函数并获取结果。

示例:

```move
public fun example_expression(a: u64, b: u64): u64 {
let result = a * b + 10;
result
}
```

在这个示例中,`a * b + 10` 是一个典型的表达式,计算 `a``b` 的乘积再加上 `10`,类似于“购物总价 + 运费”的计算过程。

## 3. 控制流(Control Flow)

控制流是决定程序执行路径的“交通信号灯”,它让代码有条不紊地执行。Move支持的控制流结构主要有条件判断和循环。

3.1 条件判断(If-Else)

条件判断通过检查布尔表达式来决定执行哪个分支,就像我们决定是否带伞要看今天是否下雨。

```move
public fun check_even(x: u64): bool {
if (x % 2 == 0) {
true
} else {
false
}
}
```

在这个例子中,我们检查 `x` 是否为偶数,如果是则返回 `true`,否则返回 `false`

3.2 循环(Loop, While)

Move语言中的循环类似于“跑步机”,可以重复执行一段代码,直到满足特定条件为止。

Loop 示例:

```move
public fun sum_to_n(n: u64): u64 {
let mut i = 0;
let mut sum = 0;
loop {
if (i > n) {
break;
}
sum = sum + i;
i = i + 1;
}
sum
}
```

- `loop` 是一种无限循环,通过 `break` 跳出循环。这个例子计算从 `0``n` 的和,类似于一个自动加法器。

While 示例:

```move
public fun factorial(n: u64): u64 {
let mut result = 1;
let mut i = 1;
while (i <= n) {
result = result * i;
i = i + 1;
}
result
}
```

- `while` 循环通过条件判断是否继续执行,就像在游戏中,角色的生命值大于零时才能继续战斗。

## 4. 结构方法(Struct Methods)

Move中的结构体(Struct)不仅用于存储数据,还可以“携带”方法,让数据具备自我处理的能力。结构方法(Struct Methods)类似于给机器人安装指令,让它能完成特定任务。

结构方法示例:

```move
module UserModule {
struct User has key {
id: u64,
name: vector<u8>,
}
public fun new_user(id: u64, name: vector<u8>): User {
User { id, name }
}
public fun get_id(user: &User): u64 {
user.id
}
public fun update_name(user: &mut User, new_name: vector<u8>) {
user.name = new_name;
}
}
```

- `new_user` 是构造函数,用于创建新的 `User` 实例。
- `get_id` 方法用于获取 `User``id`,类似于读取用户的身份信息。
- `update_name` 方法用于修改 `User``name`,使用 `&mut` 表示可变引用,允许对实例进行修改。

## 总结

通过这篇学习笔记,我们了解了Move语言中的函数、表达式、控制流和结构方法。Move的设计强调安全性和高效性,提供了独特的机制来确保合约行为的安全和可预测。理解这些基础知识后,我们可以更加自如地编写智能合约,为区块链应用程序的开发打下坚实基础。

> **请用微信关注《HOH水分子》公众号,我们将持续分享和制作变成语言教程,让大家对编程产生化学反应。**
![水分子社区](../images/HOH_QR.jpg)

0 comments on commit a24a0e0

Please sign in to comment.