Solidity之变量类型

本文介绍了Solidity编程语言中的变量类型,包括整型、布尔、地址、定长字节数组、有理数和整型字面量、枚举、函数以及引用类型如不定长字节数组、字符串、数组和结构体。此外,还详细讲解了字典(映射类型)的使用,它是Solidity中存储和查找数据的重要工具。

上一篇文章我们简单的介绍了一个完整的Solidity文件的结构。接下来该学什么了?变量类型!没错!就是变量类型,相信大家C/C++、Java、Python总接触过一门吧。
当你在编写 Solidity 智能合约时,需要使用各种变量类型来存储和操作数据。了解这些数据类型的基本知识对于正确编写有效的智能合约至关重要。在本篇文章中,我们将介绍 Solidity 中可用的所有变量类型及其用法。

1.值类型

1.1 整型

整型包括有符号整型(int)和无符号整型(uint)
有符号整型变量

  • int8:8 位有符号整数
  • int16:16 位有符号整数
  • int32:32 位有符号整数
  • int64:64 位有符号整数
  • int128:128 位有符号整数
  • int256:256 位有符号整数
    无符号整型变量
  • uint8:8 位无符号整数
  • uint16:16 位无符号整数
  • uint32:32 位无符号整数
  • uint64:64 位无符号整数
  • uint128:128 位无符号整数
  • uint256:256 位无符号整数
    这些整型变量可以用来存储与计算有关的数字,如金额、数量等。
  • 小数由"."组成,左边或者右边至少包含一个数字,如1.,.1 1.3均为有效的小数

1.2 布尔

布尔变量是一种只有两种可能值的变量类型,即 true 或 false。在 Solidity 中,布尔变量用于存储程序中的条件状态和判定逻辑。

Solidity 中的布尔变量类型是 bool。

1.3 地址

Solidity 中的另一种常见变量类型是地址类型,用于存储以太坊地址。地址是以太坊区块链上的唯一标识符,它由 20 个字节组成,通常以十六进制表示。

Solidity 中可用的地址类型包括:

  • address:存储以太坊地址的变量类型。
  • address payable:与 address 相同,但具有额外的支付功能。

1.4 定长字节数组

固定大小的数组b

### Solidity编程语言中的变量类型 #### 值类型 Solidity提供了多种值类型的变量用于存储不同种类的数据。 - **整型** 整形分为无符号整形`uint`和带符号整形`int`,它们都有不同的位宽可供选择,比如`uint8`, `uint16`, ..., `uint256`以及对应的带符号版本。这些类型用来表示正负数值或仅限正值的数[^1]。 - **布尔** 使用`bool`关键字声明布尔类型变量,它只有两个可能的取值:`true` 或者 `false`。这种类型常被应用于条件判断语句中。 - **地址** 地址类型`address`专门用于保存以太坊网络上的账户或合约地址。此外还有带有内置函数特性的增强版地址类型`address payable`,允许向其发送以太币。 - **定长字节数组** 这种类型由关键词`bytesN`定义(其中 N 的范围是从 1 到 32)。这类数组长度固定不可变,在处理二进制数据时非常有用。 - **有理数和整型字面量** 对于直接写入代码里的具体数字可以直接写作如下的形式:`123`(十进制),`0xABCDEF`(十六进制)等。需要注意的是浮点数并不受支持;所有的分数都需转换成乘除运算表达。 - **枚举类型** 枚举通过列举一系列命名项来创建自定义类型,可以提高代码可读性和安全性。例如: ```solidity enum ActionChoices { GoLeft, GoRight, GoStraight, SitStill } ``` - **函数** 函数本身也可以作为一种特殊的值类型存在,可以通过指针传递给其他地方调用。这使得高阶函数成为可能,即把一个函数当作参数传入另一个函数内执行。 #### 引用类型 除了上述提到的基础值类型外,Solidity还提供了一些复杂度更高的引用类型。 - **不定长字节数组** 类似于动态大小的一维列表,使用`bytes[]`表示。不同于定长版本的地方在于这里的元素数量可以在程序运行期间改变。 - **字符串** 字符串是以UTF-8编码的文字序列,利用`string`关键字声明。值得注意的是由于内部实现细节的原因,建议尽可能减少对它的修改操作以免造成不必要的gas消耗。 - **数组** 数组是相同类型的多个元素集合,既可以是一维线性排列(`T[]`)也能构建多维度矩阵(`T[][]...`)。同样地,这里也区分静态尺寸与动态尺寸两种情形。 - **结构体** 结构体允许开发者组合不同类型字段形成新的复合对象。借助此功能能够更直观清晰地描述现实世界实体之间的关系。 #### 特殊说明 虽然提到了“字典”,但实际上Solidity并没有原生的支持哈希表或者映射(map)这样的键值对容器。不过官方文档确实提及了mapping这一概念,它是唯一接近传统意义上的关联数组/字典的东西,但是有着自己独特的语法和行为模式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员小凯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值