11.控制流


文档摘要

title: 11. 控制流 tags: cairo starknet flow if-else loop WTF Cairo极简教程: 11. 控制流 我最近在学 ,巩固一下细节,也写一个 ,供小白们使用。教程基于 版本。 推特:@0xAAScience|@WTFAcademy WTF Academy 社群:Discord|微信群|官网 wtf.academy 所有代码和教程开源在 github: github.com/WTFAcademy/WTF-Cairo 在本章中,我们将探讨Cairo中的控制流(if表达式和循环)。控制流使你能够根据条件执行特定代码逻辑。 If-else If-else表达式允许你根据特定条件执行代码逻辑:如果满足特定条件,则执行一段代码,否则将执行另一段代码。

title: 11. 控制流 tags: - cairo - starknet - flow - if-else - loop

WTF Cairo极简教程: 11. 控制流

我最近在学cairo-lang,巩固一下细节,也写一个WTF Cairo极简教程,供小白们使用。教程基于cairo 2.2.0版本。

推特:@0xAA_Science@WTFAcademy_

WTF Academy 社群:Discord微信群官网 wtf.academy

所有代码和教程开源在 github: github.com/WTFAcademy/WTF-Cairo

在本章中,我们将探讨Cairo中的控制流(if表达式和循环)。控制流使你能够根据条件执行特定代码逻辑。

If-else

If-else表达式允许你根据特定条件执行代码逻辑:如果满足特定条件,则执行一段代码,否则将执行另一段代码。在以下示例中,如果x为0,则is_zero()函数返回true,否则返回false

// if-else 示例 #[external(v0)] fn is_zero(self: @ContractState, x: u128) -> bool{ // if-else if( x == 0_u128 ){ true } else { false } }

if表达式以if关键字开始,后跟要满足的条件。我们可以在if之后包含一个else块,指定条件不满足时要执行的逻辑。值得注意的是,你的条件必须始终为bool类型,不能为0或1,否则编译器将报错。

else-if

你可以使用else-if表达式创建多个条件,这对于处理复杂逻辑非常有用。

// else-if 示例 #[external(v0)] fn compare_256(self: @ContractState, x: u128) -> u8{ // else-if if( x < 256_u128 ){ 0_u8 } else if (x == 256_u128 ){ 1_u8 } else { 2_u8 } }

在let语句中使用if

因为if-else是一个表达式,所以你可以将if-else表达式的结果分配给一个变量。这可以简化你的代码。

// 示例:从if-else返回值 #[external(v0)] fn is_zero_let(self: @ContractState, x: u128) -> bool{ // return value from if-else let isZero = if( x == 0_u128 ){ true } else { false }; return isZero; }

循环

循环允许你在特定条件下反复执行代码。与其他具有多种循环类型(forwhile等)的编程语言不同,Cairo有两种循环:loopwhile

loop

loop关键字将反复执行一段代码,直到见到break关键字或者gas用尽才停止。此外,你也可以使用continue关键字来跳转到下一次循环

// 循环示例 #[external(v0)] fn sum_until(self: @ContractState, x: u128) -> u128{ let mut i: u128 = 1; let mut sum: u128 = 0; // loop loop { if (i > x) { break (); } if (i % 5 == 0) { i += 1; continue; } sum += i; i += 1; }; return sum; }

从循环返回值

你可以通过在break关键字后添加表达式从循环返回值。在下面的示例中,循环完成后,我们返回sum_i的值。

// 示例:从循环返回值 #[external(v0)] fn sum_until_let(self: @ContractState, x: u128) -> u128{ let mut i: u128 = 1; let mut sum_i: u128 = 0; // return value from loop let sum = loop { if (i > x) { break sum_i; } sum_i += i; i += 1; }; return sum; }

while

while关键字会重复执行该段代码,直到条件不满足或gas用尽跳出循环。

#[external(v0)] fn sum_while(self: @ContractState, x: u128) -> u128{ let mut i: u128 = x; let mut sum: u128 = 0; // while while (i != 0) { sum += i; i -= 1; }; return sum; }

总结

在本章中,我们介绍了Cairo中的基本控制流结构,包括if-else表达式和循环。


作者与出处
原作者: WTFAcademy
来源:WTFAcademy
许可证:MIT
整理: 灏天文库整理
由灏天文库结构化整理,提供目录导航、全文检索与在线阅读,便于系统化学习
发布者: 作者: WTFAcademy 转发
评论区 (0)
U