一文带你玩转以太坊智能合约中的三种变量


theme: cyanosis

highlight: an-old-hope

本文正在参加「金石计划 . 瓜分6万现金大奖」

什么是变量

在计算机语言中,变量是用于跟踪几乎所有类型信息的简单工具。它可以保存程序运行时用户输入的数据、特定运算的结果以及要在窗体上显示的一段数据等。

智能合约中的三种变量

  • 状态变量 – 变量值永久保存在合约存储空间中的变量。
  • 局部变量 – 变量值仅在函数执行过程中有效的变量,函数退出后,变量无效
  • 全局变量 – 保存在全局命名空间,用于获取区块链相关信息的特殊变量。
  • 注:Solidity 是一种静态类型语言,这意味着需要在声明期间指定变量类型。

为什么要使用变量

Solidity 是一门编程语言,而编程可以理解为通过对变量进行操作、存储来实现功能,所以没有变量就没有可以用来操作的对象,并且变量能够把程序中准备使用的每一段数据都赋予一个名字(尽量简短且故名见意),因此它们是十分有用且有必要的。很简单的一个例子:变量就像是一个染色器,什么数据进去就会被染成什么颜色。

如何使用变量

在solidity中,我们需要展示三种变量的使用方法。

状态变量

变量值永久保存在合约存储空间中的变量。如果将下列合约成功部署到以太坊主网上,那么该状态变量storedData将永久存储在以太坊主网上。这和其他编程语言几乎是一样。 solidity pragma solidity ^0.6.0; contract SolidityTest { uint storedData; // 定义状态变量 constructor() public { //函数构造器,一个合约只能声明一个 storedData = 10; // 使用状态变量,给其赋值数字10 } } 注: 由上面的代码可知,我们一般将状态变量声明在函数体外,且一般都是在创建合约的下面集中声明。在我们创建一个函数时,需要声明变量一般都会把状态变量声明放到最上面,和其他函数的状态变量一起。

局部变量

变量值仅在函数执行过程中有效的变量,函数退出后,变量无效。函数参数是局部变量。 solidity pragma solidity ^0.6.0; contract SolidityTest { uint storedData; // 定义状态变量 constructor() public { storedData = 10; // 使用状态变量,给其赋值数字10 } function getResult() public view returns(uint){ uint a = 1; // 定义局部变量 uint b = 2; uint result = a + b; return result; // 访问局部变量 } } 注:当我们把合约部署后,局部变量a、b并不会永久存储到以太坊主网上去。

全局变量

全局变量是solitity最有特色也是最考验我们记忆力的变量了,这些变量是全局工作区中存在的特殊变量,提供有关区块链和交易属性的信息。这是我在中文文档中截取的部分全局变量使用的意义。

image.png solidity pragma solidity ^0.6.0; contract SolidityTest { uint storedData; // 定义状态变量 constructor() public { storedData = 10; // 使用状态变量,给其赋值数字10 } function getResult() public view returns(uint){ uint a = 1; // 定义局部变量 uint b = 2; uint result = a + b; return result; // 访问局部变量 } function getAllVis()public view returns(){ return block.number; //返回当前区块号 } } - 注:为了方便理解,可以把这些变量和函数理解为Solidity 语言层面的(原生) API

命名变量规则

  1. 不能使用关键字作为变量名
  2. 以字母或者下划线开头,不能使用数字作为开头
  3. 区分大小写,字母一样,大小写不一样的相当于不同的变量名。

猜你喜欢

转载自blog.csdn.net/y943711797/article/details/132972203