以太坊中Solidity行 · 大金刚境:语法详解#注释和整型

835 阅读3分钟

「这是我参与2022首次更文挑战的第5天,活动详情查看:2022首次更文挑战」。

以太坊中Solidity行 · 大金刚境:语法详解#注释和整型

众所周知,以太坊开发拥有四种境界:金刚境,指玄境,天象境以及陆地神仙。

昨天我们将测试以及开发环境搭建好算是达到了真金刚的境界,今天我们就来学习Solidity的语法来达到大金刚境界。

一、注释

注释主要分为代码注释以及文档注释。下面我们来介绍这两种注释。

  • 代码注释:

    • 单行注释
     //单行注释:下面是版本号
     pragma solidity >=0.7.0 <0.9.0;
    
    • 多行注释
     /*
     这是多行注释
     多行注释
     注释
     */
     contract ReganYue {
     ​
     }
    
  • 文档注释:

    • 单行注释为 ///
    • 多行注释为每行注释开头都添加一个星号 '*'。
     contract Regan {
     ​
     }
     /// hello
     /**
     *hello
     *ReganYue
     */
    

二、整型

solidity存在有符号和无符号的整型,这个应该容易理解,但是它与其它传统语言不一样的是它存在步长。这个步长表示该变量占用内存空间的大小,其越大,占用的内存空间也就越大,同时运行所需要的手续费也越多。所以当我们确定一个整型数据的上限后,需要定义合适的步长,避免手续费过多。

我们可以看到下面这个合约执行结果发现默认步长是256。

image-20220123145649448

同时,我们需要注意的是,solidity的整型也具备除法截断特性。

 contract Regan {
     function add(uint x,uint y) public pure returns(uint z){
         return x + y;
     }
 ​
     function division(uint x,uint y) public pure returns(uint z){
         return x / y;
     }
 }
 ​

比如我们写一个除法函数,可以看到执行7除以3时,输出结果是2.

这就是我们所说的除法截断。

另外因为整型的空间是有限的,所以必定会存在溢出。

根据网络上的资料,老版本的solidity存在上溢和下溢,那么它存在的上溢和下溢是什么情况呢?

上溢就是一个整型变量到达它的上限,再给他加上一个正值,那么输出结果应该是什么?答案是变量值与正数的和-该类型的上限,比如uint8 就是2的7次方。

下溢就是一个整型变量到达它的下限,再给它减去一个正值,那么输出结果就可能会变成一个更大的值,输出结果是它的上限减去该正值,比如uint8 就是2的7次方。

但是我在较新版本的solidity中执行,发现如果溢出就会报错,该操作不会被执行。

三、值类型和引用类型

  1. 值传递:简而言之就是做一份副本,对它进行操作不会改变原数据。
  2. 引用传递:这个是指向原数据的,对它进行改动会修改原数据。

值类型包括整型、布尔类型、地址类型、枚举类型、函数类型、定长字节数组。引用类型包括不定长字节数组、字符串、数组、结构体。

如果一个变量占用的空间比较大,如果采用值传递,占用的空间会更大,这时我们应该采用引用传递。