变量,常量,不变量

变量

变量是Solidity中最常见的内容,它可以用来储存需要修改的数据,包括长期存储和临时存储。一般来说,变量分为3类,内存变量,状态变量,和全局变量。

  • 内存变量:当在函数中声明变量时,大多数情况都是内存变量,这些在一般情况下这些变量将会在函数执行完成后被销毁
  • 状态变量:当在函数外声明变量时,便是储存在区块链上的变量,和内存变量不同,他会储存在合约中,直到合约被销毁。
  • 全局变量:这些变量在运行时会提供一些环境或者上下文的数据,但是我们并不能修改这些内容。

内存变量

Loading ~~

在上面的代码中,我们声明了两个内存变量,然后将他们相加,最后返回结果。这里需要注意的是,我们并没有声明任何的状态变量。
内存变量在函数运行结束后会被销毁,所以我们除了将结果返回外,没有其他方法在函数外访问到这些变量。

状态变量

那么内存变量的限制下,我们希望将运行结果储存起来,要如何做呢?这时候就需要用到状态变量了。

Loading ~~

情在编辑器编译后,先点击result()函数查看结果,然后点击add()函数,再点击result()函数查看结果,可以看到,状态变量的值已经发生了变化。

全局变量

全局变量是在运行时提供一些环境或者上下文的数据,比如我们常用的msg.sendermsg.valueblock.timestamp等等。

Loading ~~

常量

常量是一种固定的数据,这种数据在编译时就已经确定,不会随着合约的运行而改变。并且在读取常量时使用的GAS相比于变量要少很多。

Loading ~~

在上面的代码中,我们声明了一个常量和一个变量,然后将他们相加,最后返回结果。
常量广泛的用于合约的配置,比如我们可以用来声明一些合约的基本信息,任何不会改变的数据都可以用常量来声明。

不变量

不变量是常量的拓展,他具有和常量一样的性质,但是唯一不同的是,不变量可以在合约的构造函数中进行初始化赋值,而常量则不可以。

Loading ~~

我们需要知道的是,不变量具有和常量完全一样的性质,当你在调用不变量的时候,依然会节省gas。

习题

请将下方合约按照注释内容完善,难度:🌟🌟
Loading ~~