- Solidity 教程
- Solidity - 首页
- Solidity - 概述
- Solidity - 环境搭建
- Solidity - 基本语法
- Solidity - 第一个应用
- Solidity - 注释
- Solidity - 数据类型
- Solidity - 变量
- Solidity - 变量作用域
- Solidity - 运算符
- Solidity - 循环
- Solidity - 条件语句
- Solidity - 字符串
- Solidity - 数组
- Solidity - 枚举
- Solidity - 结构体
- Solidity - 映射
- Solidity - 类型转换
- Solidity - 以太币单位
- Solidity - 特殊变量
- Solidity - 样式指南
- Solidity 函数
- Solidity - 函数
- Solidity - 函数修饰符
- Solidity - view 函数
- Solidity - pure 函数
- Solidity - 回退函数 (Fallback Function)
- 函数重载
- 数学函数
- 加密函数
- Solidity 常用模式
- Solidity - 提款模式
- Solidity - 访问限制
- Solidity 高级
- Solidity - 合约
- Solidity - 继承
- Solidity - 构造函数
- Solidity - 抽象合约
- Solidity - 接口
- Solidity - 库
- Solidity - 汇编
- Solidity - 事件
- Solidity - 错误处理
- Solidity 有用资源
- Solidity - 快速指南
- Solidity - 有用资源
- Solidity - 讨论
Solidity - 变量
Solidity 支持三种类型的变量。
状态变量 (State Variables) − 值永久存储在合约存储中的变量。
局部变量 (Local Variables) − 值仅在函数执行期间存在的变量。
全局变量 (Global Variables) − 存在于全局命名空间中,用于获取有关区块链信息的特殊变量。
Solidity 是一种静态类型语言,这意味着在声明期间需要指定状态变量或局部变量的类型。每个声明的变量都根据其类型具有默认值。没有“未定义”或“空”的概念。
状态变量
值永久存储在合约存储中的变量。
pragma solidity ^0.5.0; contract SolidityTest { uint storedData; // State variable constructor() public { storedData = 10; // Using State variable } }
局部变量
值仅在其定义的函数内可用的变量。函数参数始终是该函数的局部变量。
pragma solidity ^0.5.0; contract SolidityTest { uint storedData; // State variable constructor() public { storedData = 10; } function getResult() public view returns(uint){ uint a = 1; // local variable uint b = 2; uint result = a + b; return result; //access the local variable } }
示例
pragma solidity ^0.5.0; contract SolidityTest { uint storedData; // State variable constructor() public { storedData = 10; } function getResult() public view returns(uint){ uint a = 1; // local variable uint b = 2; uint result = a + b; return storedData; //access the state variable } }
使用Solidity 第一个应用章节中提供的步骤运行上述程序。
输出
0: uint256: 10
全局变量
这些是存在于全局工作区中的特殊变量,它们提供有关区块链和交易属性的信息。
名称 | 返回值 |
---|---|
blockhash(uint blockNumber) returns (bytes32) | 给定区块的哈希值 - 仅适用于最近的 256 个区块(不包括当前区块) |
block.coinbase (address payable) | 当前区块矿工的地址 |
block.difficulty (uint) | 当前区块难度 |
block.gaslimit (uint) | 当前区块 gas 限制 |
block.number (uint) | 当前区块编号 |
block.timestamp (uint) | 自 Unix 纪元以来的当前区块时间戳(以秒为单位) |
gasleft() returns (uint256) | 剩余 gas |
msg.data (bytes calldata) | 完整的 calldata |
msg.sender (address payable) | 消息发送者(当前调用者) |
msg.sig (bytes4) | calldata 的前四个字节(函数标识符) |
msg.value (uint) | 随消息发送的 wei 数 |
now (uint) | 当前区块时间戳 |
tx.gasprice (uint) | 交易的 gas 价格 |
tx.origin (address payable) | 交易发送者 |
Solidity 变量命名
在 Solidity 中命名变量时,请记住以下规则。
您不应使用任何 Solidity 保留关键字作为变量名。这些关键字将在下一节中提及。例如,break 或 boolean 变量名无效。
Solidity 变量名不能以数字 (0-9) 开头。它们必须以字母或下划线开头。例如,123test 是无效的变量名,但 _123test 是有效的变量名。
Solidity 变量名称区分大小写。例如,Name 和 name 是两个不同的变量。
广告