固定大小的数据类型:Solidity 是一种类型化语言

本文详细介绍了Solidity语言的基本数据类型,包括无符号整数(uint256),布尔值(bool)和地址(address)。通过代码示例展示了如何声明和返回这些类型,并强调每种类型的特殊性和注意事项。文章结构清晰,适合对Solidity初学者进行引导。

Solidity 是一种类型化语言。

与 JavaScript 或 Python 不同,在 JavaScript 或 Python 中你可以将一个布尔值、字符串或数字赋值给一个变量,而在 Solidity 中,每个变量只能有一种类型,并且必须明确声明。

这也适用于函数。你必须明确指定参数类型和返回类型。

现在让我们讨论一下最常用的类型:

  • 无符号整数,即 uint256
  • 布尔变量,即 bool
  • address 类型,用于存储以太坊钱包地址或智能合约地址

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 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
RareSkills
RareSkills
https://www.rareskills.io/