编写 fn 函数
严格、类型安全且注重性能
编写 fn 函数 是 CoddyKit 上的免费 Mojo Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Mojo Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Mojo Academy 课程共包含 4 节课。
认识 fn 关键字
fn 关键字用于定义更严格的函数。它牺牲了一些灵活性,换来了安全性和 Mojo 闻名的速度。⚡
fn greet():
print("Hello")类型是必需的
fn 中的每个参数都必须声明类型。这样编译器就能检查您的代码并生成快速的机器代码。
fn add(a: Int, b: Int) -> Int:
return a + b声明返回类型
fn 使用箭头声明返回什么类型,例如 -> Int。如果它会返回某个值,就必须明确写出类型。
fn square(x: Int) -> Int:
return x * x没有返回类型表示 None
当 fn 不返回任何内容时,请省略箭头。它会执行某项操作(例如打印),但不会返回值。
fn shout(msg: String):
print(msg)参数默认不可变
在 fn 中,参数默认是只读的。尝试重新赋值会导致编译错误,从而避免隐蔽的错误。
fn show(x: Int):
print(x)编译器会为您把关
由于类型已知,编译器会在程序运行前发现不匹配,将许多运行时崩溃变成提前报告的错误。
严格性带来速度
提前知道每种类型后,Mojo 就可以跳过动态检查,因此 fn 能够达到低级语言的性能。
局部变量需要 var
在 fn 内部,使用 var 声明新的局部变量。严格的作用域规则可以让函数行为更加可预测。
fn total() -> Int:
var sum = 0
sum = sum + 5
return sum必须声明错误
可能失败的 fn 必须使用 raises 说明这一点。没有它,编译器就会假定函数永远不会抛出错误。
fn risky() raises:
raise Error("nope")缩进规则相同
和 def 一样,fn 使用缩进表示函数体。两者的区别在于类型的严格程度,而不在于周围的布局。
fn info():
print("a")
print("b")为高频路径而设计
在程序中运行数百万次的部分使用 fn,因为节省的每一纳秒最终都会真正累积起来。
快速检查
回想一下 fn 参数的默认行为。
回顾
您已经了解了 fn:严格、类型明确且速度快。必须指定类型,参数默认是只读的,并且编译器会确保代码正确。🎯
常见问题解答
「编写 fn 函数」课时是免费的吗?
是的 — 「编写 fn 函数」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Mojo Academy 课程的其余内容,请升级到 CoddyKit PRO。 Mojo Academy 课程共包含 4 节课。
「编写 fn 函数」这节课中我会学到什么?
严格、类型安全且注重性能 你通过在浏览器中直接运行的动手代码来练习 Mojo Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Mojo Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Mojo Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「编写 fn 函数」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Mojo Academy 课中编写并运行代码吗?
能。每节 Mojo Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 编写 def 函数
- 编写 fn 函数
- 何时选择哪一种
- 返回类型与 None