📅  最后修改于: 2023-12-03 15:35:01.957000             🧑  作者: Mango
Solidity 是一种编程语言,旨在代表以太坊区块链上的智能合约。循环语句是基本的编程概念,Solitity 也提供了多重循环结构,以及多重循环嵌套。在本文中,我们将介绍 Solidity 中的循环语句。
for
循环允许您将代码块重复执行指定次数。其基本语法如下:
for (initialize; condition; update) {
// 代码块
}
initialize
部分用于初始化循环的初始状态。condition
部分将在每次循环迭代时进行检查。只要 condition
表达式的值为 true
,则代码块将继续执行。update
的部分在每次迭代后执行。
以下示例说明了如何使用 for
循环输出数字 0 到 9:
pragma solidity ^0.8.0;
contract Loop {
function loop() public pure returns (uint) {
uint sum = 0;
for (uint i = 0; i < 10; i++) {
sum += i;
}
return sum; // 输出 45
}
}
在上面的示例中,我们设置一个名为 i
的变量,其初始值为 0
。另一个变量 sum
用于计算循环中的数字和。在每次迭代中,我们将 i
的值增加 1
。循环将在 i
的值等于10
时退出。
while
循环执行代码块,只要指定条件为 true
。以下是其基本语法:
while (condition) {
// 代码块
}
以下示例说明了如何使用 while
循环输出数字 0 到 4:
pragma solidity ^0.8.0;
contract Loop {
function loop() public pure returns (uint) {
uint i = 0;
uint sum = 0;
while (i < 5) {
sum += i;
i++;
}
return sum; // 输出 10
}
}
在上面的示例中,我们创建了一个名为 i
的变量,其初始值为 0
。此外,我们使用另一个变量 sum
来计算循环中数字的总和。在每次迭代中,如果 i < 5
,将执行代码块。在每次迭代之后,我们将 i
的值增加 1
。循环在 i
等于 5
时退出。
do-while
循环执行代码块一次,然后检查指定的条件是否为 true
。如果条件为 true
,则重复执行代码块。其基本语法如下:
do {
// 代码块
} while (condition);
以下示例说明了如何使用 do-while
循环输出数字 0 到 4:
pragma solidity ^0.8.0;
contract Loop {
function loop() public pure returns (uint) {
uint i = 0;
uint sum = 0;
do {
sum += i;
i++;
} while (i < 5);
return sum; // 输出 10
}
}
在上面的示例中,我们创建了一个名为 i
的变量,其初始值为 0
。此外,我们使用另一个变量 sum
来计算循环中数字的总和。在每次迭代中,我们将 i
的值增加 1
。循环将在 i
等于 5
时退出。
foreach
循环允许您遍历数组或映射。以下是其基本语法:
for (uint i = 0; i < 数组名称.length; i++) {
// 数组代码块
}
以下示例说明了如何使用 foreach
循环输出数组中的每个元素:
pragma solidity ^0.8.0;
contract Loop {
function loop() public pure returns (uint) {
uint[5] memory arr = [uint(0), 1, 2, 3, 4];
uint sum = 0;
for (uint i = 0; i < arr.length; i++) {
sum += arr[i];
}
return sum; // 输出 10
}
}
在上面的示例中,我们创建了一个名为 arr
的数组,其为长度为 5
的代币数组。我们使用 arr.length
遍历该数组中的每个元素。在每次迭代中,我们将 arr[i]
的值添加到另一个变量 sum
中。
for (uint keyIndex = 0; keyIndex < 映射名称.keys.length; keyIndex++) {
// 映射代码块
}
以下示例说明了如何使用 foreach
循环输出映射中的每个元素:
pragma solidity ^0.8.0;
contract Loop {
function loop() public pure returns (uint) {
mapping(uint => uint) map;
map[0] = 0;
map[1] = 1;
map[2] = 2;
uint sum = 0;
for (uint keyIndex = 0; keyIndex < map.keys.length; keyIndex++) {
uint key = map.keys[keyIndex];
uint value = map[key];
sum += value;
}
return sum; // 输出 3
}
}
在上面的示例中,我们创建了一个名为 map
的映射。我们使用 map.keys.length
遍历该映射中的每个元素。在每次迭代中,我们获取一个 key
和一个 value
。然后,我们将 value
添加到另一个变量 sum
中。
多重循环是一种嵌套循环。一种常见的用法是使用一个内部循环来遍历数组,而使用外部循环来遍历数组中的每个元素。以下示例说明了如何使用多重循环输出数字 0 到 9:
pragma solidity ^0.8.0;
contract Loop {
function loop() public pure returns (uint) {
uint sum = 0;
for (uint i = 0; i < 3; i++) {
for (uint j = 0; j < 3; j++) {
sum += j + i * 3;
}
}
return sum; // 输出 36
}
}
在上面的示例中,我们使用两个嵌套的 for
循环来输出数字。外部循环负责重复内部循环中的代码块,i * 3
用于计算每个数字所在的行。内部循环负责将每一行中的数字加在一起。
循环是 Solidity 中最基本的编程概念之一。在本文中,我们介绍了 Solidity 中的各种循环语句及其用法。使用这些循环语句,您可以有效地遍历数组和映射,以及重复执行代码块。