智能合约 | 基本数据类型和复合类型

350 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第12天,点击查看活动详情

智能合约| 数据类型

solidity是一种静态类型的高级语言,每个变量在编译时都需要明确变量的类型,solidity内部定义了多种基础类型以及一些复杂的复合类型。

基础类型

solidity支持的类型有 整型(int、uint)、布尔类型(bool)、字符串类型(string)和字节类型(byte)。基础类型一般的编程语言也基本相差无二,就不一一赘述了。

整型类型

因为智能合约是运行在以太坊EVM中的,存储到全球的节点中,所以solidity在设计数据类型时精确到了每一个字节,因此整型内部就有int8、int16、int32、int32、···、int256,uint有着异曲同工之妙,有着和int一样的待遇。

  • 整型类型最长定义为256位,int默认256,uint默认256

复合类型

向定长字节组、变长字节组、地址类型等,都属于复合类型

地址类型

地址类型(address)是智能合约特有的数据类型,它对应着以太坊的账户地址。我们可以将address类型理解成一个结构化的数据类型,通过它,可以获得一些账号的信息、比如账户余额。我们只需要像访问类成员那样就可以了。其核心还是围绕着资产的变更、转移。

  • 代码示例
address.tranfer(0.001 ether) //给某地址转账0.001个ether,ether是以太币的一个单位,可以直接使用

定长字节数组

总所周知,一个字节等于八位,所以bytes1一直定义到bytes32,也就意味着bytes类型可以表达256位的长度。由此可见,它和整型类型的待遇类似。

  • 代码示例
bytes32 public hashNum //定义一个bytes32的定长字节数组并公开,作为hash值

变长字节数组

除了定长字节数组,还可以定义变长数组,像bytes[N].

  • 代码示例
//语法
bytes 变量名 = new bytes(大小);
//举例
bytes public hashBytes = new bytes(3);

枚举

个人认为,在智能合约中枚举是有点鸡肋的存在,虽然支持,但也仅仅是支持,编译器会将枚举类型进行转换,因此,忽略掉也不是不行。