Solidity函数中pure、view、constant的用法

news/2024/7/7 14:35:32 标签: 区块链, solidity
soliditypublicinternalprivateexternal_0">1.solidity为函数提供了四种访问权限:public,internal,private,external
  • public:公共函数,内部正常访问,外部正常访问,子类可以继承
  • internal:内部函数,内部正常访问,外部无法访问,子类可以继承
  • private: 私有函数,内部正常访问,外部无法访问,子类无法继承
  • external: 外部函数,内部不能访问,外部正常访问,子类可继承
solidity_5">2.solidity函数的格式为:

function 函数名(参数) public|private|internal|external pure|view|constant 无返回值|returns (返回值类型)。

pragma solidity ^0.5.0;

contract math{
    // int uint
    
    uint numa = 100;
    uint numb = 200;
    
    // uint numc = 2;
    
    // function add() view public returns(uint){
    //     return numa + numb;
    // }
    
    function add(uint a, uint b) pure public returns(uint){
        return a+b;
    }
    
    
    function sub(uint a, uint b) pure public returns(uint){
        return a-b;
    }
    
    function mul(uint a, uint b) pure public returns(uint){
        return a*b;
    }
    
    function div(uint a, uint b) pure public returns(uint){
        return a/b;
    }
    
    function mod(uint a, uint b) pure public returns(uint){
        return a%b;
    }
    
    function squ(uint a,uint b) pure public returns(uint){
        return a**b;
    }
    
    uint8 a = 3;
    uint8 b = 4;
    
    function weiyu() view public returns(uint){
        return a&b;
    }

    function weihuo() view public returns(uint){
        return a|b;
    }
        
    function weifan() view public returns(uint){
        return ~a;
    }
    
    function weiyihuo() view public returns(uint){
        return a^b;
    }
    
    function zuoyi() view public returns(uint){
        return a<<1;
    }
        
    function youyi() view public returns(uint){
        return a>>1;
    }
}
  • 当函数有返回值,函数中正常来讲需要有 pure|view|constant关键字 如果没有返回值,在调用函数过程中,需要主动去调用底层的call()方法。当函数返回值为全局变量或属性时,可以使用view或者constant view可以理解成constant的新版本,可以简单理解成他们俩等价pure 。如果只是纯粹的返回一个值,直接使用pure反之,使用view或者constant即可。

  • 在Solidity中constant、view、pure三个函数修饰词的作用是告诉编译器,函数不改变/不读取状态变量,这样函数执行就可以不消耗gas了(是完全不消耗!),因为不需要矿工来验证,所以用好这几个关键词很重要!

  • 这三个关键词有什么区别和联系,简单来说,在Solidity v4.17之前,只有constant,后来有人嫌constant这个词本身代表变量中的常量,不适合用来修饰函数,所以将constant拆成了view和pure。view的作用和constant一模一样,可以读取状态变量但是不能改;pure则更为严格,pure修饰的函数不能改也不能读状态变量,否则编译通不过。

参考:
[1] http://shaolinbit.com/2018/02/06/blockchain-solidity-qx/
[2] https://www.cnblogs.com/huahuayu/p/8604873.html


http://www.niftyadmin.cn/n/1204076.html

相关文章

Python类__call__()方法

__call__()&#xff1a;Python中&#xff0c;只要在创建类型的时候定义了__call__()方法&#xff0c;这个类型就是可调用的。 Python中的所有东西都是对象&#xff0c;其中包括Int/str/func/class这四类&#xff0c;它们都是对象&#xff0c;都是从一个类创建而来的。元类就是创…

基于以太坊的智能合约开发教程[Solidity] 第一篇:Solidity智能合约基础实战

第一篇&#xff1a;Solidity智能合约基础实战 第一节 实现自己的第一个智能合约 1. 描述一个对象有两种方式 ①属性、状态 ②行为 2.代码 pragma solidity ^0.5.0;contract HelloWorld{string Myname "lynn";function getName() public view returns(string){…

Flask框架web开发 第一章 Flask入门(在windows系统下)

Flask框架web开发&#xff08;第一章&#xff09; 使用web框架的优点&#xff1a;避免重复造轮子。 一. Flask入门 1.虚拟环境使用virtualenv创建&#xff0c;检查是否安装&#xff1a; virtualenv --version 2.安装虚拟环境 pip install virtualenv pip install virtualen…

Microsoft AI - Custom Vision

概述 前几天的 Windows Developer Day 正式发布了 Windows AI Platform&#xff0c;而作为 Windows AI Platform 的模型定义和训练&#xff0c;更多还是需要借助云端来实现。Azure 无疑是一个很好的选择。 Azure 作为微软近几年主推的云服务&#xff0c;在 AI 和 Machine Learn…

Flask框架web开发 第二章 Jinja2模板引擎(在windows系统下)

1.Jinja2模板引擎 &#xff08;1&#xff09;模板 在前面的示例中&#xff0c;视图函数的主要作用是生成请求的响应&#xff0c;这是最简单的请求。实际上&#xff0c;视图函数有两个作用&#xff1a;处理业务逻辑和返回响应内容。在大型应用中&#xff0c;把业务逻辑和表现内…

Oracle11g Data Guard物理备用数据库搭建与配置(第1部分 主数据库实例创建)

环境准备 在我的测试环境中&#xff0c;准备了两台CentOS7.4虚拟机&#xff0c;并同时都安装了Oracle11gR2的11.2.0.1.0企业版的数据库软件&#xff0c;其中只有主服务器创建一个数据库实例&#xff0c;备用服务器仅安装Oracle数据库软件。主数据库(DB1)OSCentOS7.4Hostnamehmd…

Flask框架web开发 第三章 Web表单(在windows系统下)

1.普通的表单验证 Web表单 Web 表单是 Web 应用程序的基本功能。 它是HTML页面中负责数据采集的部件。表单有三个部分组成&#xff1a;表单标签、表单域、表单按钮。表单允许用户输入数据&#xff0c;负责HTML页面数据采集&#xff0c;通过表单将用户输入的数据提交给服务器。…

webservice初识,SOAP1.1版本

客户端与服务端模式&#xff0c;非web端发布 1.1 【Jax-ws第一个例子】 1.1.1 第一步&#xff1a;服务端开发 编写SEI(Service Endpoint Interface)&#xff0c;SEI在webservice中称为portType&#xff0c;在java中称为接口。代码如下&#xff1a; /** * 天气查询服务…