浅谈Solidity: 16 关键字
1,view:只读不写链上数据,2,pure:不能读也不能写链上数据,只能处理函数内数据。
3, memory:是函数里的参数和临时变量,存储在内存中,不上链。4,storage:合约里的状态变量默认都是storage,存储在链上。5,calldata:和memory类似,存储在内存中,不上链。与memory的不同点在于calldata变量不能修改,一般用于函数的参数。
6,—;代表了后面函数的主题
7,constructor:构造函数(constructor)是一种特殊的函数,每个合约可以定义一个,并在部署合约的时候自动运行一次。它可以用来初始化合约的一些参数,例如初始化合约的owner地址:address owner = msg.sender; // 在部署合约的时候,将owner设置为部署者的地址
8,modifier:修饰器。是solidity特有的语法,类似于面向对象编程中的decorator,声明函数拥有的特性,并减少代码冗余。
9,Require:require命令是solidity 0.8版本之前抛出异常的常用方法,目前很多主流合约仍然还在使用它。它很好用,唯一的缺点就是gas随着描述异常的字符串长度增加,比error命令要高。使用方法:require(检查条件,"异常的描述"),表示需要满足括号里的条件才能执行,否则就会抛出异常。
10,return和returns:returns加在函数名后面,用于声明返回的变量类型及变量名;return用于函数主体中,返回指定的变量。
11,uint是正整数,uint == uint256 表示2^256 -1 2的256次方 -1, uint8 表示2^8 2的8次方-1 最大不能超过256是255。
12,int是整数,int = int256, 在 -2**255 -1 到 2**255 - 1之间。int和unit内存中占得是一样大的,因为2**256正好是2**255的两倍,int有负数所以两个一样大。
13,数组:固定数组:uint[8] array1,长度固定; 可变数组uint[] memory array8 = new uint[](5);,bytes memory array9 = new bytes(9);长度不固定。通过push(),pop()方法来添加和删除最后元素的值或者直接给元素赋值。
14,public: 内部外部均可见。(也可用于修饰状态变量,public变量会自动生成 getter函数,用于查询数值)。external: 只能从合约外部访问(但是可以用this.f()来调用,f是函数名)。internal: 只能从合约内部访问,继承的合约可以用(也可用于修饰状态变量)。private: 只能从本合约内部访问,继承的合约也不能用(也可用于修饰状态变量)。
15,selfdestruct:自毁。销毁合约只是让这个合约无法再继续工作,但是在区块链上的数据还是保留的。所以必须加上调节判断,比如把数据全部转移完成和必须是部署者才能调用。
16,emit:事件被emit关键字触发。可用于输出log日志。
17,indexed: 在事件的参数中被使用,作为条件判断筛选。有序的,按指数排列的。
18,uint 非负整数,是uint256的缩写,最小和最大值是0 ~ 2**256-1。uint8 最小和最大值是0 ~ 2**8-1
19,int是整数,是int256的缩写,最小和最大值是-2**255 ~ 2**255-1。int8 最小和最大值是-2**7 ~ 2**7-1
我是温驭臣,一个Solidity的开发学习者,以上是我的简单总结,如果有缺陷,希望在评论区看到您的补充。