二、基本类型及函数使用《2022 solidity8.+ 版本教程到实战》

发布于:2022-12-19 ⋅ 阅读:(190) ⋅ 点赞:(0)

一、基本变量类型

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);
}

调用后其结果如下:
在这里插入图片描述

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到