### 前言 以前学习的方法中经常提到的一个记忆特点是将学习的新知识通过旧有熟悉得知识产生链接,再进行记忆,这样可以更好的学习和牢固记忆。 如果可以还可以通过想象来记忆,这样更容易记忆。 因为经常提过其他语言进行记忆,所以写的文章可能提及其他语言。 另外每天复习一遍之前的学习笔记会记得更牢固。 ### 部分特点 #### mapping 映射 ``` mapping (uint => address) public test; ``` 这是一段简单映射得代码。 mapping可以看作是其余语言得字典,uint是键的类型,address是值的类型。 ***address是一种内置的变量类型。*** public则是表示这是公开的一个映射。 --- #### msg.sender 这是以太坊的全局函数,没有私钥是无法更改数据的。 以太坊的evm解析这个方法,自动调用。 所以从语言的看法来说,以太坊提供的智能合约层更像是一门其他语言api。 智能合约协议算后端?自己对接的算是中间件? 其实差不多,扯到这里还可以扯以太坊的设计模型和历史,就不扯了。 --- #### require 和try catch require更像是try catch,因为他也是判断后,当为真则返回报错信息。 所以再solc的新编译器内,推荐采用了try catch。 你如果通过require进行判断,会发现不用加上{}的。代码如下: ``` require(msg.sender==Keccak("test")); return "test"; ``` 这里学的时候脑海中想着为什么不用{}进行操作,后来想起学java时的一个特性,如果if判断为真则可以不加上{},会直接执行下一行。 --- #### 继承 智能合约之间是通过is进行继承的,其余合约可以通过is继承其他合约。 但是其中的private的私有函数是不可以调用的, **这里就需要提到一个教internal和external的关键字** *internal:可以被其他语言继承,也可以访问其中的内部函数(类private)。* *external: 可以让其他合约调用,但并不能被自身合约的函数调用(类public)。* 继承可以将的太多了,你可以套用其余语言的继承和重载,目前没看见solc的重载关键词。 --- #### storage memory 这是两个储存变量。 **storage储存在全局,永远不会丢失** **memory则是储存在内存中,合约调用完则会直接清除。** 按照我参照其余语言的了解则是(js): storage则像是js中的全局变量,如const和var。 memory则是更像let的区域变量。 --- #### return returns returns是标识函数命名是接收的内容,return则是返回的内容,代码: ``` function test() returns(uint a,uint b,uint c){ return (1,2,3); ``` 就是这样,很好理解,不过如果你想用变量接收旧很生草了,如: 我假如想要获取返回的第三个值 ``` (,,age(type))=test() ``` 很生草,不过换个角度想 ,号代替了不接受的值,其余语言也有类似的处理 Loading... ### 前言 以前学习的方法中经常提到的一个记忆特点是将学习的新知识通过旧有熟悉得知识产生链接,再进行记忆,这样可以更好的学习和牢固记忆。 如果可以还可以通过想象来记忆,这样更容易记忆。 因为经常提过其他语言进行记忆,所以写的文章可能提及其他语言。 另外每天复习一遍之前的学习笔记会记得更牢固。 ### 部分特点 #### mapping 映射 ``` mapping (uint => address) public test; ``` 这是一段简单映射得代码。 mapping可以看作是其余语言得字典,uint是键的类型,address是值的类型。 ***address是一种内置的变量类型。*** public则是表示这是公开的一个映射。 --- #### msg.sender 这是以太坊的全局函数,没有私钥是无法更改数据的。 以太坊的evm解析这个方法,自动调用。 所以从语言的看法来说,以太坊提供的智能合约层更像是一门其他语言api。 智能合约协议算后端?自己对接的算是中间件? 其实差不多,扯到这里还可以扯以太坊的设计模型和历史,就不扯了。 --- #### require 和try catch require更像是try catch,因为他也是判断后,当为真则返回报错信息。 所以再solc的新编译器内,推荐采用了try catch。 你如果通过require进行判断,会发现不用加上{}的。代码如下: ``` require(msg.sender==Keccak("test")); return "test"; ``` 这里学的时候脑海中想着为什么不用{}进行操作,后来想起学java时的一个特性,如果if判断为真则可以不加上{},会直接执行下一行。 --- #### 继承 智能合约之间是通过is进行继承的,其余合约可以通过is继承其他合约。 但是其中的private的私有函数是不可以调用的, **这里就需要提到一个教internal和external的关键字** *internal:可以被其他语言继承,也可以访问其中的内部函数(类private)。* *external: 可以让其他合约调用,但并不能被自身合约的函数调用(类public)。* 继承可以将的太多了,你可以套用其余语言的继承和重载,目前没看见solc的重载关键词。 --- #### storage memory 这是两个储存变量。 **storage储存在全局,永远不会丢失** **memory则是储存在内存中,合约调用完则会直接清除。** 按照我参照其余语言的了解则是(js): storage则像是js中的全局变量,如const和var。 memory则是更像let的区域变量。 --- #### return returns returns是标识函数命名是接收的内容,return则是返回的内容,代码: ``` function test() returns(uint a,uint b,uint c){ return (1,2,3); ``` 就是这样,很好理解,不过如果你想用变量接收旧很生草了,如: 我假如想要获取返回的第三个值 ``` (,,age(type))=test() ``` 很生草,不过换个角度想 ,号代替了不接受的值,其余语言也有类似的处理 最后修改:2023 年 03 月 26 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏