二基本类型及函数使用《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.+ 版本教程到实战》

三流程控制及循环《2022 solidity8.+ 版本教程到实战》

三流程控制及循环《2022 solidity8.+ 版本教程到实战》