当前位置: 首页 > news >正文

【solidity基础】一文说清楚合约函数的大小事

在 Solidity 里,函数是合约的关键构成部分,用于执行特定任务或操作的代码块,可以包含逻辑、访问状态变量、进行计算,并且可以接受参数和返回值。

但是solidity 的函数与其他语言不太一样,经常会有同学搞混,这里开一篇文章完整介绍一下 solidity 函数的用法。

1. 函数定义与声明

function functionName(parameterType1 parameterName1, parameterType2 parameterName2, ...) visibility modifiers returns (returnType1, returnType2, ...) {// 函数体
}
  • function 关键字声明函数
  • functionName:函数的名称。
  • parameterType 和 parameterName:函数的参数,可包含多个参数,参数之间用逗号分隔。
  • visibility:函数的可见性,如 public、private、internal、external。
  • modifiers:可选的修饰符,如 pure、view、payable 等。
  • returns:指定函数的返回值类型,可返回多个值。

2. 函数的修饰符

2.1 函数的可见性

函数可见性修饰符可以用来修饰状态变量和函数,决定了函数的访问权限,具体如下:

  • public: 函数可以被合约内外的任何代码调用。默认为 public。
  • private:函数只能在定义它的合约内部被调用,在派生合约里也是无法访问的。
  • internal:函数只能在定义它的合约及其派生合约中被调用。
  • external:函数只能从合约外部调用,不能在合约内部直接调用,但可以使用 this.functionName() 的方式调用。

2.2 函数状态的可见性

函数状态可变性修饰符用于描述函数是否会修改合约的状态变量,主要用于定义函数的行为和特性。具体有以下几种:

  • pure:函数既不读取也不修改合约的状态变量(即完全不访问状态变量),通常用于执行纯数学计算等操作。

    • 不允许访问thismsg对象。
    • 可以在编译时被内联优化。
    • 不能发送以太币。
    function add(uint a, uint b) public pure returns (uint) {return a + b;
    }
    
  • view:函数只读取合约的状态变量,但不修改它们。

    • 可以调用其他 viewpure函数
    • 不允许修改状态变量
    • 不允许发送以太币
    contract MyContract {uint public myVariable = 10;function getMyVariable() public view returns (uint) {return myVariable;}
    }
    
  • payable:函数可以接收 Ether,当调用该函数时,可以附带一定数量的 Ether。

    • 允许接收以太币
    • 可以调用其他payable函数
    function calculate(uint a, uint b) public pure returns (uint sum, uint product) {sum = a + b;product = a * b;return (sum, product);
    }
    
  • virtaul:函数可以被派生合约重写覆盖

    • 在父合约中声明函数为 virtual,表示该函数可以在派生合约中被重写。
    • 派生合约中可以使用 override 关键字重写 virtual 函数。
    • virtual 函数可以有默认实现

相关文章:

  • openEuler 22.03 安装 Redis 6.2.9,支持离线安装
  • 微前端框架选型指南
  • [原创](现代Delphi 12指南):[macOS 64bit App开发]: [1]如何使用原生NSAlert消息框 (runModal模式)
  • M1 Mac pip3 install错误记录
  • 罗技K580蓝牙键盘连接mac pro
  • 【Java面试笔记:进阶】30.Java程序运行在Docker等容器环境有哪些新问题?
  • 网络安全之浅析Java反序列化题目
  • webrtc ICE 打洞总结
  • Kafka Producer的acks参数对消息可靠性有何影响?
  • Windows 中的 bat(批处理)文件处理使用教程典型实例和实战技巧
  • Chrome 136 H265 WebRTC 支持 正式版本已包含
  • JESD204B 探究
  • [FPGA VIDEO IP] VCU
  • SQL Server 数据库重命名
  • 数据转储(go)
  • 麒麟、UOS系统在线打开word文件并提取修订痕迹
  • SpringBoot多工程项目微服务install时如何不安装到本地仓库
  • word模板填充导出-(支持word导出、pdf导出)
  • Langchain+文本摘要-refine
  • 芯片软错误概率探究:基于汽车芯片安全设计视角
  • 航海王亚洲巡展、工厂店直销……上海多区推出“五五购物节”活动
  • 上海科创再出发:“造星”的城和“摘星”的人
  • 擦亮“世界美食之都”金字招牌,淮安的努力不止于餐桌
  • 事关广大农民利益,农村集体经济组织法5月1日起施行
  • 中国防疫队深入缅甸安置点开展灾后卫生防疫工作
  • 贵州茅台一季度净利268亿元增长11.56%,系列酒营收增近两成