Solidity之数据类型(1)

		以太坊一个非常重要的改变就是智能合约,开发者可以编写适合自己业务场景的智能合约部署到以太坊的公链上。这就好比以太坊公链是底层的基础平台,部署在上面的智能合约就是适应业务场景的DAPP。基于以太坊公链数据不可篡改的特点解决人与人间的信任问题。目前以太坊智能合约的主流编程语言是solidity,下面将介绍solidity语言的数据结构和相关语法。
		
		Solidity 是一种静态语言类型,在编译前都要指定每个变量的类型。Solidity提供了几种基本类型,通过几种基本类型的组合,可以组合成复杂类型。接下来先介绍一下Solidity基础数据类型,如下:
数据类型 数据结构
布尔型 bool
整型 uint/int
钱包地址 address
枚举类型 enum
字符串 string
数组 array
字节数组 bytes
结构体 struct
映射 mapping
类型推断 var

下面来单个一一给大家介绍!

  1. 布尔类型(bool)
    bool:可能的取值为常量值 ture 和 false,非真即假。
    支持数学运算符:!、&&、||、==、!=

  2. 整型
    int:表示有符号
    uint:表示无符号
    变量支持通过后缀指明变量使用多少位进行存储,后缀必须是8 ~ 256 内8的整数倍,如int8、int16
    系统默认int 为 int256、uint为uint256

  3. 钱包地址
    地址类型的长度为20字节(与以太坊的账户地址长度一致),其是合约的基类,拥有一些成员的方法和变量。
    从soildity0.5.0版本开始,合约不再继承自地址类型,但开发者仍可以通过显式类型转换将合约地址转换为
    地址类型。
    address.balance:类型为uint,表示账户的余额,单位是wei
    address.transfer(uint256 amount):发送amount数量的以太币给address表示的账户,单位是wei,失败
    会抛出异常。
    address.send(uint256 amount)returns(bool):与address.transfer类似,同样进行以太币的转账。
    address.transfer错误抛出异常并终止代码;address.send错误返回false,代码继续执行
    address.call(…)returns(bool):发起底层的CALL指令,失败返回false
    address.callcode(…)returns(bool):发起底层的CALLCODE指令,失败返回false
    address.delegatecall(…)returns(bool):发起底层的DELEGATECALL指令,失败返回false

    call、callcode、delegatecall提供了一个底层的、灵活的方式与合约交互。address.call(...)可以接收任何长
    度,任何类型的参数,第一个参数为调用的函数哈希值的前4个字节,其他参数均被填充到32个字节并拼接在一起。
    
  4. 枚举类型
    枚举常量是一种用户自定义的类型,用于声明一些命名的常量。枚举类型的成员默认从0开始,依次递增。
    如下:
    eunm TestEunm{
    DEFAULT;
    ONE;
    TWO
    };
    DEFAULT数值为0,ONE数值为1,TWO数值为2

  5. 字符串
    字符串string用户表示任意长度的字节数据(UTF-8编码)

  6. 数组
    Solidity数组包含固定长度的数组和运行时动态改变长度的动态数组,其定义方法如下:
    固定长度的数组 T[K] ,其中T为一种数据类型,K表示数组的长度
    动态数据:T[]
    对于数组,有下面几种方法:
    length:数组可以通过访问length成员来获取数组的长度
    push:动态数组可以通过push的方法在数组的尾部添加元素,返回值为数组的长度

  7. 字节数组
    bytes用于表示任意长度的字节数据,相当于字节类型的动态数组。string类型的变量可以通过bytes(string)
    转换为bytes类型;可以通过bytes(s).length来获取长度信息。

  8. 结构体
    Soildity的结构体跟C语言结构体的用户基本一致,结构体可嵌套使用,其定义如下:
    struct TestStruct{
    address add;
    uint amount;
    }

  9. 映射
    映射mapping是一种键值对映射挂系的存储结构,其定义如下:
    mapping(KeyType => VauleType)
    映射可以看作一个散列表。

  10. 类型推断
    Solidity 语言中,有一个关键字var用于类型推断。如:
    uint x = 123;
    var y = x;
    此时的y变量类型自动推断为uint。
    以上是Solidity几个相关的数据类型,下一篇我将介绍Solidity常见的运算符!
    针对Soildity编写智能合约的学习,推荐官方网站:https://solidity-cn.readthedocs.io/zh/develop/introduction-to-smart-contracts.html

你可能感兴趣的:(solidity)