Mojo语法基础 #
一、关键字 #
1.1 Mojo关键字列表 #
Mojo保留了以下关键字:
| 关键字 | 用途 |
|---|---|
def |
定义动态函数 |
fn |
定义静态函数 |
let |
定义常量 |
var |
定义变量 |
struct |
定义结构体 |
if |
条件语句 |
else |
否则分支 |
elif |
否则如果 |
while |
while循环 |
for |
for循环 |
in |
成员检测 |
return |
返回值 |
import |
导入模块 |
from |
从模块导入 |
as |
别名 |
pass |
占位语句 |
break |
跳出循环 |
continue |
继续循环 |
True |
布尔真 |
False |
布尔假 |
None |
空值 |
and |
逻辑与 |
or |
逻辑或 |
not |
逻辑非 |
is |
身份检测 |
async |
异步函数 |
await |
等待异步 |
try |
异常处理 |
except |
捕获异常 |
finally |
最终执行 |
raise |
抛出异常 |
with |
上下文管理 |
yield |
生成器 |
lambda |
匿名函数 |
class |
类定义(保留) |
self |
实例自身 |
owned |
所有权转移 |
inout |
输入输出引用 |
ref |
引用 |
1.2 标识符规则 #
- 以字母或下划线开头
- 后续可以是字母、数字或下划线
- 区分大小写
- 不能使用关键字
mojo
let valid_name = 1
let _private = 2
let camelCase = 3
let PascalCase = 4
二、运算符 #
2.1 算术运算符 #
mojo
def main():
let a = 10
let b = 3
print(a + b)
print(a - b)
print(a * b)
print(a / b)
print(a % b)
print(a ** b)
print(a // b)
main()
| 运算符 | 描述 | 示例 |
|---|---|---|
+ |
加法 | a + b |
- |
减法 | a - b |
* |
乘法 | a * b |
/ |
除法 | a / b |
% |
取模 | a % b |
** |
幂运算 | a ** b |
// |
整除 | a // b |
2.2 比较运算符 #
mojo
def main():
let a = 10
let b = 3
print(a == b)
print(a != b)
print(a > b)
print(a < b)
print(a >= b)
print(a <= b)
main()
| 运算符 | 描述 | 示例 |
|---|---|---|
== |
等于 | a == b |
!= |
不等于 | a != b |
> |
大于 | a > b |
< |
小于 | a < b |
>= |
大于等于 | a >= b |
<= |
小于等于 | a <= b |
2.3 逻辑运算符 #
mojo
def main():
let a = True
let b = False
print(a and b)
print(a or b)
print(not a)
main()
| 运算符 | 描述 | 示例 |
|---|---|---|
and |
逻辑与 | a and b |
or |
逻辑或 | a or b |
not |
逻辑非 | not a |
2.4 位运算符 #
mojo
def main():
let a = 0b1010
let b = 0b1100
print(bin(a & b))
print(bin(a | b))
print(bin(a ^ b))
print(bin(~a))
print(bin(a << 2))
print(bin(a >> 2))
main()
| 运算符 | 描述 | 示例 |
|---|---|---|
& |
按位与 | a & b |
| |
按位或 | a | b |
^ |
按位异或 | a ^ b |
~ |
按位取反 | ~a |
<< |
左移 | a << n |
>> |
右移 | a >> n |
2.5 赋值运算符 #
mojo
def main():
var a = 10
a += 5
print(a)
a -= 3
print(a)
a *= 2
print(a)
a //= 4
print(a)
main()
| 运算符 | 等价于 |
|---|---|
+= |
a = a + b |
-= |
a = a - b |
*= |
a = a * b |
/= |
a = a / b |
%= |
a = a % b |
//= |
a = a // b |
**= |
a = a ** b |
&= |
a = a & b |
|= |
a = a | b |
^= |
a = a ^ b |
<<= |
a = a << b |
>>= |
a = a >> b |
三、表达式 #
3.1 算术表达式 #
mojo
let result = (10 + 5) * 2 - 3 / 1.5
3.2 比较表达式 #
mojo
let is_valid = age >= 18 and age <= 65
3.3 三元表达式 #
mojo
let status = "adult" if age >= 18 else "minor"
3.4 Walrus运算符 #
mojo
def main():
var data = [1, 2, 3, 4, 5]
var i = 0
while (val := data[i]) < 4:
print(val)
i += 1
main()
四、运算符优先级 #
从高到低:
| 优先级 | 运算符 |
|---|---|
| 1 | ** |
| 2 | +x, -x, ~x |
| 3 | *, /, //, % |
| 4 | +, - |
| 5 | <<, >> |
| 6 | & |
| 7 | ^ |
| 8 | | |
| 9 | ==, !=, <, >, <=, >= |
| 10 | not |
| 11 | and |
| 12 | or |
mojo
let result = 2 + 3 * 4
let result2 = (2 + 3) * 4
五、类型注解 #
5.1 基本类型注解 #
mojo
fn add(a: Int, b: Int) -> Int:
return a + b
let result: Int = add(1, 2)
5.2 可选类型 #
mojo
fn find_value(arr: List[Int], target: Int) -> Optional[Int]:
for i in range(len(arr)):
if arr[i] == target:
return arr[i]
return None
5.3 泛型类型 #
mojo
fn generic_add[T: Numeric](a: T, b: T) -> T:
return a + b
六、代码风格 #
6.1 缩进 #
使用4个空格缩进:
mojo
def main():
if True:
print("Indented")
main()
6.2 行长度 #
建议每行不超过88个字符。
6.3 空行 #
- 函数之间空两行
- 类方法之间空一行
mojo
def function_one():
pass
def function_two():
pass
struct MyStruct:
fn method_one(self):
pass
fn method_two(self):
pass
6.4 命名约定 #
| 类型 | 约定 | 示例 |
|---|---|---|
| 变量 | snake_case | my_variable |
| 常量 | UPPER_CASE | MAX_VALUE |
| 函数 | snake_case | my_function |
| 结构体 | PascalCase | MyStruct |
| 模块 | snake_case | my_module |
七、总结 #
本章学习了:
- Mojo关键字和标识符规则
- 各类运算符的使用
- 表达式和优先级
- 类型注解
- 代码风格规范
下一章,我们将学习Mojo的数据类型。
最后更新:2026-03-27