本文详细介绍了Solidity语言的基本数据类型,包括无符号整数(uint256),布尔值(bool)和地址(address)。通过代码示例展示了如何声明和返回这些类型,并强调每种类型的特殊性和注意事项。文章结构清晰,适合对Solidity初学者进行引导。
Solidity 是一种类型化语言。
与 JavaScript 或 Python 不同,在 JavaScript 或 Python 中你可以将一个布尔值、字符串或数字赋值给一个变量,而在 Solidity 中,每个变量只能有一种类型,并且必须明确声明。
这也适用于函数。你必须明确指定参数类型和返回类型。
现在让我们讨论一下最常用的类型:
Solidity 还有数组、字符串、结构体和其他类型,但它们需要稍微不同的处理方式,因此我们稍后再讨论。
让我们看看返回这些类型的三个不同函数。
contract ExampleContract {
function getANumber()
public
pure
returns (uint256) {
uint256 x = 1;
return x;
}
function getABoolean()
public
pure
returns (bool) {
bool y = true;
return y;
}
function getAnAddress()
public
pure
returns (address) {
// Vitalik Buterin 的地址
address z = 0xd8da6bf26964af9d7eed9e03e53415d37aa96045;
return z;
}
function getAnotherAddress()
public
pure
returns (address) {
// USDC 稳定币的地址
address z2 = 0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48;
return z2;
}
}
在这些例子中,我们将值赋值给变量,然后将其返回。当然,我们也可以直接返回值,像这样。
function getAddress()
public
pure
returns (address) {
return 0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48;
}
函数签名必须与返回类型匹配,这一点非常重要。以下代码会产生错误。
function getAddressFail()
public
pure
returns (bool) {
return 0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48;
}
地址
地址表示为包含 40 个字符的十六进制字符串,并且始终以 0x 开头。有效的十六进制字符串包含字符 [0-9] 或 [a-f]。
警告:手动输入地址时要小心。Solidity 会将 0x1 转换为值为 0x0000000000000000000000000000000000000001 的地址。如果你的地址少于 40 个十六进制字符,它会在前面填充零。
如果你创建的地址超过 40 个字符,它将无法编译。
请注意,40 个字符不包括前导的 0x。
uint256
让我们重新讨论 uint256。它到底是什么意思?
u 表示无符号。它不能表示负数。256 表示它可以存储最大为 256 位的数字,即 2^256-1。
让我们用 Python 看看这个数字有多大。
>>> pow(2,256) - 1
115792089237316195423570985008687907853269984665640564039457584007913129639935
这是一个非常大的数字,足以满足你在区块链上所需的大部分功能。
在 Solidity 中,以下代码可以编译。
function getBiggestNumber()
public
pure
returns (uint256) {
return 115792089237316195423570985008687907853269984665640564039457584007913129639935;
}
但如果你使数字更大,代码将无法编译。
可想而知,uint128 可以存储最大为 2^128 – 1 的无符号数字。
大多数情况下,你应该只使用 uint256。使用 uint64 或 uint128 等较小类型的情况是一个更高级的主题。现在请坚持使用 uint256。
布尔类型
这一点很明显,它与其他语言类似。bool 变量要么为 true,要么为 false。仅此而已。
请查看 Web3 区块链培训营,了解更多有关智能合约开发和代币标准的内容。
- 原文链接: rareskills.io/learn-soli...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!