Solidity-变量

文章介绍了Solidity编程语言中变量命名的规则,包括不能使用保留关键字,变量名需以字母或下划线开头,以及区分大小写。同时,讲解了三种类型的变量:状态变量(存储在合约中)、局部变量(函数作用域内有效)和全局变量(如blockhash和msg.sender等)。此外,还展示了如何在智能合约中声明和使用这些变量。
摘要由CSDN通过智能技术生成

Solidity 变量名

在为变量命名时,请记住以下规则。

  • 不应使用 Solidity 保留关键字作为变量名。例如,breakboolean变量名无效。
  • 不应以数字(0-9)开头,必须以字母或下划线开头。例如,123test是一个无效的变量名,但是_123test是一个有效的变量名。
  • 变量名区分大小写。例如,Namename是两个不同的变量。

Solidity 支持三种类型的变量:

  • 状态变量 – 变量值永久保存在合约存储空间中的变量。
  • 局部变量 – 变量值仅在函数执行过程中有效的变量,函数退出后,变量无效。
  • 全局变量 – 保存在全局命名空间,用于获取区块链相关信息的特殊变量。

Solidity 是一种静态类型语言,这意味着需要在声明期间指定变量类型。每个变量声明时,都有一个基于其类型的默认值。没有undefinednull的概念。

状态变量

变量值永久保存在合约存储空间中的变量。

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

contract Demo1 {
    

    function getResult() public pure returns (uint) {
        // 这是一行注释,类似于C++中的注释

        /**
        * 这是多行注释
        * 类似于C语言中的注释
        */
        uint a = 1;
        uint b = 2;
        uint result = a + b;
        return result;
    }
}
contract SolidityTest {
    uint storedData; // 状态变量
    constructor() public {
        storedData = 10; // 使用状态变量
    }
    function getResult1() public view returns (uint) {
        uint a = 1; // 局部变量
        uint b = 2;
        uint result = a + b;
        return result; // 访问局部变量
    }

    function getResult2() public view returns (uint) {
        uint a = 1; // 局部变量
        uint b = 2;
        uint result = a + b;
        return storedData; // 访问状态变量
    }
}

局部变量

变量值仅在函数执行过程中有效的变量,函数退出后,变量无效。函数参数是局部变量。

实例如下:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
contract SolidityTest {
   uint storedData; // 状态变量
   constructor() public {
      storedData = 10;   
   }
   function getResult() public view returns(uint){
      uint a = 1; // 局部变量
      uint b = 2;
      uint result = a + b;
      return storedData; // 访问状态变量
   }
}

全局变量

这些是全局工作区中存在的特殊变量,提供有关区块链和交易属性的信息。

名称返回
blockhash(uint blockNumber) returns (bytes32)给定区块的哈希值 – 只适用于256最近区块, 不包含当前区块。
block.coinbase (address payable)当前区块矿工的地址
block.difficulty (uint)当前区块的难度
block.gaslimit (uint)当前区块的gaslimit
block.number (uint)当前区块的number
block.timestamp (uint)当前区块的时间戳,为unix纪元以来的秒
gasleft() returns (uint256)剩余 gas
msg.data (bytes calldata)完成 calldata
msg.sender (address payable)消息发送者 (当前 caller)
msg.sig (bytes4)calldata的前四个字节 (function identifier)
msg.value (uint)当前消息的wei值
now (uint)当前块的时间戳
tx.gasprice (uint)交易的gas价格
tx.origin (address payable)

交易的发送方

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值