Skip to main content

Solidity do while循环

想象一下,如果我们要计算 1+2+3 的和,这很简单:

uint256 sum = 1+2+3;

但是如果我们要计算 1+2+3+…+100000 呢。直接在合约里面写出这个表达式是不可能的。为了避免重复劳动,我们就可以用到循环。Solidity提供了三种循环:

本节我们将会介绍 do while 循环。

do while循环语法

Solidity的 do while 循环语法规则也与C语言,Javascript基本相同,其语法如下:

do {
// 循环体
} while(test-statement);

我们可以看到 do while 循环和 while 循环非常类似,里面都有两个两个表达式,只不过这两个表达式的上下位置交换了:

  • 循环体
  • test-statement

do while 循环区别于 while 循环的地方是,它的循环体至少会执行一遍。然后才会执行 test-statement 判断是否为 true 。如果是则把循环体再执行一遍。如果 test-statementfalse ,那么退出循环并继续执行余下的代码。

do while 循环, 从1加到n
function sumToN(uint16 n) public pure returns(uint16) {
uint16 sum = 0;
uint16 i = 1;

do {
sum += i;
i++; // 修改循环变量的值
} while(i <= n); // 检查是否还满足循环条件

return sum;
}
试一试 »

for, while, do while应该选哪个

我们在 while 循环章节已经讨论过 for 循环和 while 循环并没有太大的区别,更多的是不同的场景下其中一个比另外一个看起来更加简洁而已。

但是 do while 与其他两个有明显的区别。这就是 do while 循环至少会执行一次循环体;而 forwhile 循环可能一次都不执行。所以,当你确定循环体至少会被执行一次的时候,可以使用 do while 循环。这并不是说非用它不可,而是用了它,代码控制逻辑会看起来更加自然,代码也会更加简洁。

综上所述, for , while , do while 三种循环本质上能做的事情都差不多, forwhile 比较类似,可以互换使用,取决于你觉得哪种可以让代码看起来更简洁。而 do while 一般是在循环体至少执行一次的时候使用。