• 国酒茅台·国之栋梁 希望工程圆梦行动获第十二届人民企业社会责任奖年度案例奖 2019-12-06
  • 湖州日报社党委书记、社长沈振建祝贺人民日报创刊70周年 2019-12-06
  • 是什么时候颠覆了“文艺应当为千千万万劳动人民服务”这一社会主义文艺路线的?!那一股“伤痕潮”功不可灭,可惜的是“旧伤痕”已经烟灭,取代其的是“挖根潮”。留给工农 2019-11-24
  • 我国居民人均预期寿命又提高了 2017年提高至76.7岁 2019-11-24
  • 《格萨尔》史诗藏译汉16册完成终审 2019-11-10
  • 干惊天动地事  做崇德守廉人 2019-10-20
  • 新一代宝马8系首发亮相 运动旗舰正式回归 2019-10-20
  • 全纪录600名工人为“重庆铁路咽喉”动手术  奋战7个通宵为旅客节约1小时 2019-10-19
  • 共享单车押金安全受关注 部分平台已引入银行存管 2019-10-16
  • 视频--江苏频道--人民网 2019-10-16
  • 回复@看着就想笑:历史至今的客观事实是奴隶主剥削奴隶、封建地主剥削农奴、资本家剥削雇佣劳动者、师傅剥削徒弟都是建立在私有制基础上的,而且小私有和他人联合顾工生 2019-10-14
  • 把党的十九大精神全面落实在重庆大地上——华龙网 2019-10-06
  • 高一年级组“经典永流传”诵读比赛精彩回顾—wydzx.blog的博客—强国博客—人民网 2019-10-06
  • 欢迎访问《南开管理评论》官方网站! 2019-10-04
  • 新华网评:秉“真诚”之态 谋共同发展 2019-10-04
  • 青海麻将258 www.jncff.tw 青海麻将258 > 上网技巧 > 电脑小技巧 > Solidity教程之视图函数 虚函数讲解

    Solidity教程之视图函数 虚函数讲解

    时间:2019-11-04 17:42 作者:QQ地带 我要评论

    Solidity 系列完整的文章列表请查看分类 - Solidity。
     
    写在前面
    Solidity 是以太坊智能合约编程语言,阅读本文前,你应该对以太坊、智能合约有所了解,
    如果你还不了解,建议你先看以太坊是什么
     
    欢迎订阅区块链技术专栏阅读更全面的分析文章。
     
    视图函数(View Functions)
    一个函数如果它不修改状态变量,应该声明为 view 函数,不过下面几种情况认为是修改了状态:
     
    写状态变量
    触发事件(events)
    创建其他的合约
    使用 selfdestruct。
    call 调用附加了以太币
    调用了任何没有 view 或 pure 修饰的函数
    使用了低级别的调用(low-level calls)
    使用了包含特定操作符的内联汇编
    看一个例子:
     
    pragma solidity ^0.4.16;
     
    contract C {
        uint public data = 0;
     
        function f(uint a, uint b) public view returns (uint) {
            return a * (b + 42) + now;
        }
     
        // 错误做法,虽然可以编译通过
        function df(uint a) public view  {
            data = a;
        }
    }
    有几个地方需要注意一下:
     
    声明为 view 和声明为 constant 是等价的,constant 是 view 的别名,constant 在计划 Solidity 0.5.0 版本之后会弃用(constant 这个词有歧义,view 也更能表达返回值可视)。
    访问函数都被标记为 view。
    当前编译器并未强制要求声明为 view,但建议大家对于不会修改状态的函数的标记为 view。
     
    纯函数(Pure Functions)
    函数可以声明为 pure,表示它即不读取状态,也不修改状态,除了上一节介绍的几种修改状态的情况,以下几种情况被认为是读取了状态:
     
    读状态变量
    访问了 this.balance 或 \
    .balance
    访问了 block, tx, msg 的成员 (msg.sig 和 msg.data 除外).
    调用了任何没有 pure 修饰的函数
    使用了包含特定操作符的内联汇编
    看一个例子:
     
    pragma solidity ^0.4.16;
     
    contract C {
        function f(uint a, uint b) public pure returns (uint) {
            return a * (b + 42);
        }
    }
    尽管 view 和 pure 修饰符编译器并未强制要求使用,view 和 pure 修饰也不会带来 gas 消耗的改变,但是更好的编码习惯让我们跟容易发现智能合约中的错误。

    标签: Solidity
    顶一下
    (0)
    0%
    踩一下
    (0)
    0%

    Google提供的广告

  • 国酒茅台·国之栋梁 希望工程圆梦行动获第十二届人民企业社会责任奖年度案例奖 2019-12-06
  • 湖州日报社党委书记、社长沈振建祝贺人民日报创刊70周年 2019-12-06
  • 是什么时候颠覆了“文艺应当为千千万万劳动人民服务”这一社会主义文艺路线的?!那一股“伤痕潮”功不可灭,可惜的是“旧伤痕”已经烟灭,取代其的是“挖根潮”。留给工农 2019-11-24
  • 我国居民人均预期寿命又提高了 2017年提高至76.7岁 2019-11-24
  • 《格萨尔》史诗藏译汉16册完成终审 2019-11-10
  • 干惊天动地事  做崇德守廉人 2019-10-20
  • 新一代宝马8系首发亮相 运动旗舰正式回归 2019-10-20
  • 全纪录600名工人为“重庆铁路咽喉”动手术  奋战7个通宵为旅客节约1小时 2019-10-19
  • 共享单车押金安全受关注 部分平台已引入银行存管 2019-10-16
  • 视频--江苏频道--人民网 2019-10-16
  • 回复@看着就想笑:历史至今的客观事实是奴隶主剥削奴隶、封建地主剥削农奴、资本家剥削雇佣劳动者、师傅剥削徒弟都是建立在私有制基础上的,而且小私有和他人联合顾工生 2019-10-14
  • 把党的十九大精神全面落实在重庆大地上——华龙网 2019-10-06
  • 高一年级组“经典永流传”诵读比赛精彩回顾—wydzx.blog的博客—强国博客—人民网 2019-10-06
  • 欢迎访问《南开管理评论》官方网站! 2019-10-04
  • 新华网评:秉“真诚”之态 谋共同发展 2019-10-04
  • 平特肖公式论坛 开元棋牌官方网站 意甲积分榜 捕鱼游戏快速涨分小技巧 快乐赛车历史开奖记录 重庆时时彩开奖网站 2345彩票游戏 江西快3走势图基本图 体彩内蒙古11选5开奖结果 羽毛球场规则