二基本类型及函数使用《2022 solidity8.+ 版本教程到实战》
Posted 1_bit
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二基本类型及函数使用《2022 solidity8.+ 版本教程到实战》相关的知识,希望对你有一定的参考价值。
一、基本变量类型
solidity 中的基本变量类型与一般编程中类似:
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.0;
contract Hello
string public say="Hello 1_bit";
int public ival=-1;
uint public uval=1;
address public aval=0xd9145CCE52D386f254917e481eB44e9943F39138;
bool public isTrue=false;
从以上代码中可以看出,比较特殊的数据类型为 address,address 是一个地址类型,表示地址。
常量
一些不可改动的值可以定义为常量,通过合理的编写方式可使代码的 Gas 消耗降低,定义常量也将会降低 Gas,常量的定义使用 constant 例如以下代码:
uint public constant U_val=1
在solidity 中,定义常量时对常量名有一种规范,大写开头,下划线做连接。
二、函数
函数类型
在 solidity 中函数分为内部函数和外部函数,顾名思义 内部函数只能在当前合约内被调用 而 外部函数可以在外部调用;外部函数使用 external 标记 而 内部函数使用 internal 标记。下面是一个外部函数例子:
function testfun() external returns (int)
return 1;
函数格式
以上代码中 function 表示创建一个函数,testfun 是函数名,external 表示一个外部函数,returns 则表示返回值内容其 int 表示返回的类型。
在以上代码中,花括号内为函数体代码,在此用作演示,返回一个 1;但在编译后会发生一个警告:
pure 不读取、改变状态变量
此时警告为当前 function 的状态可以设置为 pure,这个pure 为一个修饰符,表示当前函数不改变也不读取状态变量(状态变量即永久存储在合约中的变量,不是局部或说一些即时销毁的变量),不需要矿工进行验证,这样函数就可以不用消耗 Gas ,那么此时直接加上 pure 即可:
此时部署合约后点击 testfun 即可得到对应的返回值:
view 读取但改变状态变量
此时若修改代码,返回对应的 ival 值将会发生报错:
因为 pure 表示不读取也不修改,那么此时已经读取了 ival就不能使用 pure了,应该改写为 view(view 也不消耗 Gas):
三、变量类型
在第二点中我们有说过什么是状态变量,除了状态变量还包括局部变量以及全局变量。
局部变量是指在某一个局部中的变量,例如在函数中创建一个变量,该变量在函数使用时才会占用内存,函数调用完毕后即该变量的内存销毁。
在 solidity 中全局变量值不用定义及有某值的变量,或者可以理解为“系统变量”,例如msg.sender、block.timestamp或者是block.number,其中msg.sender是当前合约中上一个上一个调用当前合约的对象、block.timestamp为当前区块时间戳、block.number为当前区块的号。
如下代码示例:
function osVal() external view returns(address,uint,uint)
address sender=msg.sender;
uint number=block.number;
uint timestamp = block.timestamp;
return (sender,number,timestamp);
调用后其结果如下:
以上是关于二基本类型及函数使用《2022 solidity8.+ 版本教程到实战》的主要内容,如果未能解决你的问题,请参考以下文章
二基本类型及函数使用《2022 solidity8.+ 版本教程到实战》
一基本remix环境及HelloWord contract《2022 solidity8.+ 版本教程到实战》
一基本remix环境及HelloWord contract《2022 solidity8.+ 版本教程到实战》
一基本remix环境及HelloWord contract《2022 solidity8.+ 版本教程到实战》