diff --git a/02_ValueTypes/readme.md b/02_ValueTypes/readme.md index 127abf7f..50d023fc 100644 --- a/02_ValueTypes/readme.md +++ b/02_ValueTypes/readme.md @@ -23,7 +23,7 @@ tags: 2. **引用类型(Reference Type)**:包括数组和结构体,这类变量占空间大,赋值时候直接传递地址(类似指针)。 -3. **映射类型(Mapping Type)**: `Solidity`里的哈希表。 +3. **映射类型(Mapping Type)**: Solidity中存储键值对的数据结构,可以理解为哈希表 我们将仅介绍常用类型,不常用的类型不会涉及,本篇将介绍值类型。 diff --git a/07_Mapping/readme.md b/07_Mapping/readme.md index 595516bc..3e276c82 100644 --- a/07_Mapping/readme.md +++ b/07_Mapping/readme.md @@ -19,29 +19,29 @@ tags: ----- -这一讲,我们将介绍solidity中的哈希表:映射(`Mapping`)类型。 +这一讲,我们将介绍映射(`Mapping`)类型,Solidity中存储键值对的数据结构,可以理解为哈希表。 ## 映射Mapping 在映射中,人们可以通过键(`Key`)来查询对应的值(`Value`),比如:通过一个人的`id`来查询他的钱包地址。 声明映射的格式为`mapping(_KeyType => _ValueType)`,其中`_KeyType`和`_ValueType`分别是`Key`和`Value`的变量类型。例子: ```solidity - mapping(uint => address) public idToAddress; // id映射到地址 - mapping(address => address) public swapPair; // 币对的映射,地址到地址 +mapping(uint => address) public idToAddress; // id映射到地址 +mapping(address => address) public swapPair; // 币对的映射,地址到地址 ``` ## 映射的规则 -- **规则1**:映射的`_KeyType`只能选择`solidity`默认的类型,比如`uint`,`address`等,不能用自定义的结构体。而`_ValueType`可以使用自定义的类型。下面这个例子会报错,因为`_KeyType`使用了我们自定义的结构体: +- **规则1**:映射的`_KeyType`只能选择Solidity内置的值类型,比如`uint`,`address`等,不能用自定义的结构体。而`_ValueType`可以使用自定义的类型。下面这个例子会报错,因为`_KeyType`使用了我们自定义的结构体: ```solidity - // 我们定义一个结构体 Struct - struct Student{ - uint256 id; - uint256 score; - } - mapping(Student => uint) public testVar; +// 我们定义一个结构体 Struct +struct Student{ + uint256 id; + uint256 score; +} + mapping(Student => uint) public testVar; ``` - **规则2**:映射的存储位置必须是`storage`,因此可以用于合约的状态变量,函数中的`storage`变量,和library函数的参数(见[例子](https://github.com/ethereum/solidity/issues/4635))。不能用于`public`函数的参数或返回结果中,因为`mapping`记录的是一种关系 (key - value pair)。 -- **规则3**:如果映射声明为`public`,那么`solidity`会自动给你创建一个`getter`函数,可以通过`Key`来查询对应的`Value`。 +- **规则3**:如果映射声明为`public`,那么Solidity会自动给你创建一个`getter`函数,可以通过`Key`来查询对应的`Value`。 - **规则4**:给映射新增的键值对的语法为`_Var[_Key] = _Value`,其中`_Var`是映射变量名,`_Key`和`_Value`对应新增的键值对。例子: ```solidity @@ -72,5 +72,5 @@ tags: ## 总结 -这一讲,我们介绍了`solidity`中哈希表——映射(`Mapping`)的用法。至此,我们已经学习了所有常用变量种类,之后我们会学习控制流`if-else`,` while`等。 +这一讲,我们介绍了Solidity中哈希表——映射(`Mapping`)的用法。至此,我们已经学习了所有常用变量种类,之后我们会学习控制流`if-else`,` while`等。 diff --git a/09_Constant/readme.md b/09_Constant/readme.md index 6a4af81b..a78064e0 100644 --- a/09_Constant/readme.md +++ b/09_Constant/readme.md @@ -18,7 +18,9 @@ tags: 所有代码和教程开源在github: [github.com/AmazingAng/WTFSolidity](https://github.com/AmazingAng/WTFSolidity) ----- -这一讲,我们介绍`solidity`中两个关键字,`constant`(常量)和`immutable`(不变量)。状态变量声明这个两个关键字之后,不能在合约后更改数值;并且还可以节省`gas`。另外,只有数值变量可以声明`constant`和`immutable`;`string`和`bytes`可以声明为`constant`,但不能为`immutable`。 +这一讲,我们介绍Solidity中和常量相关的两个关键字,`constant`(常量)和`immutable`(不变量)。状态变量声明这个两个关键字之后,不能在合约后更改数值。这样做的好处是提升合约的安全性并节省`gas`。 + +另外,只有数值变量可以声明`constant`和`immutable`;`string`和`bytes`可以声明为`constant`,但不能为`immutable`。 ## constant和immutable ### constant @@ -69,5 +71,5 @@ tags: ![9-3.png](./img/9-3.png) ## 总结 -这一讲,我们介绍`solidity`中两个关键字,`constant`(常量)和`immutable`(不变量),让不应该变的变量保持不变。这样的做法能在节省`gas`的同时提升合约的安全性。 +这一讲,我们介绍了Solidity中两个关键字,`constant`(常量)和`immutable`(不变量),让不应该变的变量保持不变。这样的做法能在节省`gas`的同时提升合约的安全性。 diff --git a/README.md b/README.md index e21e2be9..c51c4fda 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ **第1讲:三行代码HelloWeb3**:[代码](https://github.com/AmazingAng/WTFSolidity/blob/main/01_HelloWeb3) | [文章](https://github.com/AmazingAng/WTFSolidity/blob/main/01_HelloWeb3/readme.md) | [Mirror](https://mirror.xyz/wtfacademy.eth/WfM30QbSWB2_-9t98g05unTmb_2ZXucOAZMPDa7MX48) -**第2讲:数值类型**:[代码](https://github.com/AmazingAng/WTFSolidity/blob/main/02_ValueTypes) | [文章](https://github.com/AmazingAng/WTFSolidity/blob/main/02_ValueTypes/readme.md) | [Mirror](https://mirror.xyz/wtfacademy.eth/XHZVpWe8_sHBHgg6kkrNH2nAWYmQgoB7fKW8hoXnoyI) +**第2讲:值类型**:[代码](https://github.com/AmazingAng/WTFSolidity/blob/main/02_ValueTypes) | [文章](https://github.com/AmazingAng/WTFSolidity/blob/main/02_ValueTypes/readme.md) | [Mirror](https://mirror.xyz/wtfacademy.eth/XHZVpWe8_sHBHgg6kkrNH2nAWYmQgoB7fKW8hoXnoyI) **第3讲:函数 (external/internal/public/private, pure/view, payable)**:[代码](https://github.com/AmazingAng/WTFSolidity/blob/main/03_Function) | [文章](https://github.com/AmazingAng/WTFSolidity/blob/main/03_Function/readme.md) | [Mirror](https://mirror.xyz/wtfacademy.eth/FWI887JBea4VpNiMlJ2ICyJ5aWUREReGo9Bz0X8iEVc)