🔮 Solidity变量指南:探寻状态、局部和全局三界之秘🌌
在Solidity的神秘大陆上,变量就像是散落在时间和空间中的宝石💎,每颗都有它独特的魔力和作用域。掌握这三种变量,是成为合约法师的重要一步。
### 1️⃣ 状态变量(State Variable)—— 链上的恒星⭐️
- 定义:状态变量就像是树根一样植根于区块链的土壤中。它们是合约结构中的常青树,坚如磐石。
- 特点:在合约的任何角落,它们都迸发着光彩,但每次变动都会激起Gas的波涛。
- 示例:
contract Variables {
uint public x = 1; // 这些是我坚不可摧的状态变量;
// ...
}
### 2️⃣ 局部变量(Local Variable)—— 函数的幻影🎩
- 定义:函数的暗影战士,行动迅速,随着函数的消逝而灰飞烟灭。
- 特点:它们敏捷地舞动在内存中,不留痕迹,经济又高效,消耗的Gas少之又少。
- 示例:
function bar() external pure returns (uint) {
uint xx = 1; // 局部变量,我来了又走,短暂如梦;
// ...
}
### 3️⃣ 全局变量(Global Variable)—— 世界之窗🌎
- 定义:这是Solidity提供的巫术工具,智者的知识,通往区块链世界的钥匙。
- 特点:如同星空中的指南针,指示交易和区块的秘密。它们毫无寒意,随手可得,无须任何祭品。
- 示例:
function global() external view returns (address, uint, bytes memory) {
address sender = msg.sender; // 全局变量,透露着宇宙的奥秘;
// ...
}
- 常用全球魔法:
- blockhash(uint blockNumber):揭示区块的秘密符文;
- block.coinbase:矿工的藏宝图;
- block.number:历史的卷轴;
- msg.sender:召唤师的真名;
- ...以及更多。
掌握状态、局部和全局变量,就如同握住Solidity魔法棒,数据在你手中轻盈舞动,合约编织着高效和安全的双重保障。在智能合约的编程艺术中,这些变量成就了你管理和操控数据的力量。
pragma solidity ^0.8.0;
contract Variables {
// 1. 状态变量(State Variable)
uint public x = 1;
uint public y;
string public z;
// 2. 局部变量(Local Variable)
function bar() external pure returns (uint) {
uint xx = 1;
uint yy = 3;
uint zz = xx + yy;
return zz;
}
// 3. 全局变量(Global Variable)
function global() external view returns (address, uint, bytes memory) {
address sender = msg.sender;
uint blockNum = block.number;
bytes memory data = msg.data;
return (sender, blockNum, data);
}
// 修改状态变量的函数
function foo() external {
x = 5;
y = 2;
z = "0xAA";
}
}