变量与常量 #

一、变量基础 #

1.1 定义变量 #

使用 var 关键字定义变量:

mojo
def main():
    var count = 0
    count = count + 1
    print(count)

main()

1.2 类型注解 #

mojo
def main():
    var count: Int = 0
    var name: String = "Mojo"
    var pi: Float64 = 3.14159

main()

1.3 多变量定义 #

mojo
def main():
    var a = 1
    var b = 2
    var c = 3
    
    var x, y, z = 1, 2, 3

main()

二、常量基础 #

2.1 定义常量 #

使用 let 关键字定义常量:

mojo
def main():
    let pi = 3.14159
    let max_size = 100
    print(pi, max_size)

main()

2.2 类型注解 #

mojo
def main():
    let pi: Float64 = 3.14159
    let name: String = "Mojo"

main()

2.3 常量不可修改 #

mojo
def main():
    let x = 10
    x = 20

main()

三、var vs let #

特性 var let
可变性 可修改 不可修改
默认选择 需要修改时 不需要修改时
安全性 较低 较高
性能 相同 相同

3.1 使用场景 #

mojo
def main():
    let max_count = 100
    var current_count = 0
    
    while current_count < max_count:
        current_count += 1
    
    print(current_count)

main()

四、作用域 #

4.1 块作用域 #

mojo
def main():
    let outer = "outer"
    
    if True:
        let inner = "inner"
        print(outer)
        print(inner)
    
    print(outer)

main()

4.2 函数作用域 #

mojo
def function_one():
    let local_var = "local"
    print(local_var)

def function_two():
    print(local_var)

def main():
    function_one()
    function_two()

main()

4.3 嵌套作用域 #

mojo
def main():
    let x = 1
    
    if True:
        let y = 2
        
        if True:
            let z = 3
            print(x, y, z)
        
        print(x, y)
    
    print(x)

main()

五、变量遮蔽 #

5.1 同名变量遮蔽 #

mojo
def main():
    let x = 10
    print(x)
    
    if True:
        let x = 20
        print(x)
    
    print(x)

main()

5.2 避免遮蔽 #

mojo
def main():
    let outer_x = 10
    
    if True:
        let inner_x = 20
        print(outer_x, inner_x)

main()

六、全局变量与常量 #

6.1 模块级常量 #

mojo
let MAX_SIZE = 100
let DEFAULT_NAME = "Mojo"

def main():
    print(MAX_SIZE)
    print(DEFAULT_NAME)

main()

6.2 全局变量 #

mojo
var global_counter = 0

def increment():
    global_counter += 1

def main():
    print(global_counter)
    increment()
    print(global_counter)

main()

七、延迟初始化 #

7.1 先声明后赋值 #

mojo
def main():
    var result: Int
    
    if True:
        result = 10
    else:
        result = 20
    
    print(result)

main()

7.2 条件初始化 #

mojo
def main():
    let condition = True
    var value: Int
    
    if condition:
        value = 100
    else:
        value = 0
    
    print(value)

main()

八、类型推断 #

8.1 自动类型推断 #

mojo
def main():
    let integer = 42
    let float_num = 3.14
    let string = "Hello"
    let boolean = True
    
    print(integer)
    print(float_num)
    print(string)
    print(boolean)

main()

8.2 显式类型指定 #

mojo
def main():
    let small_int: Int8 = 127
    let big_int: Int64 = 9223372036854775807
    let float32: Float32 = 3.14

main()

九、最佳实践 #

9.1 优先使用let #

mojo
def main():
    let pi = 3.14159
    let radius = 5.0
    let area = pi * radius * radius
    
    print(area)

main()

9.2 有意义的命名 #

mojo
def main():
    let max_retries = 3
    let timeout_seconds = 30
    var current_attempt = 0
    
    while current_attempt < max_retries:
        current_attempt += 1

main()

9.3 最小作用域 #

mojo
def main():
    if True:
        let temp = calculate_temp()
        process(temp)

main()

十、总结 #

本章学习了:

  • var 定义可变变量
  • let 定义不可变常量
  • 作用域规则
  • 变量遮蔽
  • 类型推断
  • 最佳实践

下一章,我们将学习基本数据类型。

最后更新:2026-03-27