Solidity学习::(1)变量类型

1、值类型

布尔类型

(1)取值:true、false

(2)运算符:!、&&、||、==、!=

整数类型

(1)int:有符号整数

(2)uint:无符号整数

(3)可有后缀,但必须为8的整数倍,如:int8、int16

int默认为int256,uint默认uint256

枚举类型

(1)枚举类型,从0开始

例:enum SomeEnum {DEFAULT,ONE,TWO};

DEFAULT=0  ONE =1   TWO=2

地址类型

(1)长度为20字节【与以太坊账户地址长度一致】

(2)一些方法:

【a】<address>.balance:类型为uint,表示账户余额

【b】<address>.transfer(uint 256 amount):发送amount数量的以太币给address表示的账户,单位是wei

【c】<address>.send(uint 256 amount) returns(bool):与前面相似,区别是,上面的若失败,则异常且终止代码

而send则只是返回false,代码继续执行

(3)底层操作:

【a】<address>.call(....)returns(bool):发起底层的CALL命令,失败将返回false;

【b】<address>.callcode(....)returns(bool):发起底层的CALLCODE指令,失败将返回false;

【c】<address>.delegatecall(....)returns(bool):发起底层的DELETECCALL指令,失败将返回false;

   

2、引用类型 

(1)数组:solidity中的数组包括固定长度的数组,以及运行时可动态改变长度的动态数组。对于账户存储中的数组,数组元素可以是任何类型,而内存中的数组,其数组元素不可以是映射。

  • 固定长度数组:array[5]
  • 动态长度数组:array[]

成员变量和函数有:

  • length:取得数组长度。【对于账户存储中的数组,可以通过修改数组的length成员动态地改变数组的长度,而内存中的数组在创建之后,就无法修改长度了】
  • push:对于账户存储中的动态数组以及bytes类型的变量,可以通过调用push方法在数组尾部添加元素,返回值为数组新长度。
  • bytes和string:特殊数组。【bytes用于表示任意长度的字节数据,而string用于表示任意长度的字符数据(utf-8编码)】【string不支持lengeth成员和下标访问】【用bytes(s)可以将字符串s转换成bytes类型,但是转换成bytes类型时,会将多字节的字符展开】【如果想要取的一个字符串长度,可以用bytes(s).lengeth,但长度有可能有些问题,按utf-8编码的】
  • 由于EVM限制,外部函数调用无法返回一个动态长度的数组,唯一的做法是将需要返回的内容放到一个足够长的定长数组中。

(2)结构体:solidity中结构体与c语言类似,允许开发者根据所需来定义

        定义举例:

contract Funding{
    struct Donator{//结构体
        address add;
        uint amount;
    }
}

(3)映射(Mapping):键值对映射关系的结构,声明如下:mapping(keyType=>ValueType),其中KeyType 是除了映射、动态数组、合约、枚举类型、结构体 以外的任何类型,ValueType则可以是任何类型,包括映射本身。映射并不存储键的数据,仅存储Keccak-256散列值。

猜你喜欢

转载自blog.csdn.net/dieju8330/article/details/82468071
今日推荐