首页 > 其他分享 >Solidity极简入门#8. 变量初始值

Solidity极简入门#8. 变量初始值

时间:2023-02-01 17:00:12浏览次数:31  
标签:极简 Solidity 变量 初始值 mapping 默认值 public delete

变量初始值

在solidity中,声明但没赋值的变量都有它的初始值或默认值。这一讲,我们将介绍常用变量的初始值。

值类型初始值

  • boolean: false
  • string: ""
  • int: 0
  • uint: 0
  • enum: 枚举中的第一个元素
  • address: 0x0000000000000000000000000000000000000000 (或 address(0))
  • function
  • internal: 空白方程
  • external: 空白方程

可以用public变量的getter函数验证上面写的初始值是否正确:

bool public _bool; // false
string public _string; // ""
int public _int; // 0
uint public _uint; // 0
address public _address; // 0x0000000000000000000000000000000000000000

enum ActionSet { Buy, Hold, Sell}
ActionSet public _enum; // 第1个内容Buy的索引0

function fi() internal{} // internal空白方程
function fe() external{} // external空白方程

引用类型初始值

  • 映射mapping: 所有元素都为其默认值的mapping
  • 结构体struct: 所有成员设为其默认值的结构体
  • 数组array
  • 动态数组: []
  • 静态数组(定长): 所有成员设为其默认值的静态数组

可以用public变量的getter函数验证上面写的初始值是否正确:

// Reference Types
uint[8] public _staticArray; // 所有成员设为其默认值的静态数组[0,0,0,0,0,0,0,0]
uint[] public _dynamicArray; // `[]`
mapping(uint => address) public _mapping; // 所有元素都为其默认值的mapping
// 所有成员设为其默认值的结构体 0, 0
struct Student{
uint256 id;
uint256 score;
}
Student public student;

delete操作符

delete a会让变量a的值变为初始值。

// delete操作符
bool public _bool2 = true;
function d() external {
delete _bool2; // delete 会让_bool2变为默认值,false
}

在remix上验证

  • 部署合约查看值类型、引用类型的初始值
  • 值类型、引用类型delete操作后的默认值

总结

这一讲,我们介绍了solidity中变量的初始值。变量被声明但没有赋值的时候,它的值默认为初始值。不同类型的变量初始值不同,delete操作符可以删除一个变量的值并代替为初始值。

标签:极简,Solidity,变量,初始值,mapping,默认值,public,delete
From: https://blog.51cto.com/sleep666/6031694

相关文章

  • Solidity极简入门#5. 变量数据存储和作用域
    Solidity中的引用类型引用类型(ReferenceType):包括数组(array),结构体(struct)和映射(mapping),这类变量占空间大,赋值时候直接传递地址(类似指针)。由于这类变量比较复杂,占用存储空间......
  • H5页面获取微信用户openid极简攻略
    背景之前每次写到获取openid就觉得特别麻烦,网上很多代码段会把一部分功能分开写,确实相对合理,但是对于复制粘贴代码来说依赖越少越方便,所以根据自己的经验做了一个极简的......
  • 区块链特辑——solidity语言基础(七)
    Solidity语法基础学习十、实战项目(二):3.项目实操:ERC20代币实战①转账篇总发行量函数totalSupply()return(uint256)·回传代币的发行总量·使用状态变量uint256_to......
  • 区块链特辑——solidity语言基础(六)
    Solidity语法基础学习十、实战项目(二):1.实战准备:ERC20代币接口ERC20TokenInterface接口InterfaceIName{……}·关键字:interface·宣告一个接口,定义了需要满足......
  • 批量操作初始化序列初始值
    DECLARE TYPEtsiISRECORD( tVARCHAR2(100), sVARCHAR2(100), ivarchar2(100)); tsiTemptsi; maxIdvarchar2(20); BEGIN fortsiTempin( select'T_xxx......
  • Solidity 中编写内联汇编(assembly)
    汇编相关知识介绍什么是汇编?任何以高级语言(例如C,Go或Java)编写的程序,在执行之前都将先编译为“汇编语言”。但是什么是汇编?汇编(也称为汇编语言)是指可使用​​汇编器​​转......
  • Laravel Valet - macOS 极简主义者的开发环境
    1.Lar**elValet介绍2.Lar**elValet安装3.测试Lar**elValet4.PHP版本5.服务站点6.定制Valet驱动7.Valet常用命令1.Lar**elValet介绍Lar**elValet 是m......
  • Tapdata Cloud 场景通关系列:数据入湖仓之 MySQL → Doris,极简架构,更实时、更简便
    【前言】作为中国的“Fivetran/Airbyte”,TapdataCloud自去年发布云版公测以来,吸引了近万名用户的注册使用。应社区用户上生产系统的要求,TapdataCloud3.0将正式推......
  • solidity部分修饰符的使用以及合约的部分调用方法
    Viewpure修饰符:使用view与pure不需要gweiview:不能修改链上数据只能访问pure:不能访问链上数据,被修饰的方法里的变量只能在方法内使用contract ViewPureExample{ ......
  • solidity结构以及部分方法
    合约结构://SPDX-License-Identifier:GPL-3.0 //或者UNLICENSED表示非开源,无法审核 pragmasolidity>=0.4.0<0.9.0; //solidity版本设置import"name1.sol";/......