侧边栏壁纸
博主头像
秋码记录

一个游离于山间之上的Java爱好者 | A Java lover living in the mountains

  • 累计撰写 29 篇文章
  • 累计创建 40 个标签
  • 累计创建 185 个分类

玩以太坊链上项目的必备技能(流程控制-Solidity之旅八)

今天我们不讲三国,来讲讲 流程控制 关于什么是流程控制,想来您是知道的吧!可若您确实不晓得,那您看了这篇文或许对流程控制有了初步的了解。 Solidity 和其他语言一样,支持大部分流程控制语句,除了switch和被程序员界谈虎色变而其他语言又保留的goto

今天我们不讲三国,来讲讲 流程控制

关于什么是流程控制,想来您是知道的吧!可若您确实不晓得,那您看了这篇文或许对流程控制有了初步的了解。

Solidity 和其他语言一样,支持大部分流程控制语句,除了switch和被程序员界谈虎色变而其他语言又保留的goto

1、if-else

// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.0;


contract C  {

   function ifElseExam(uint8 age) external pure returns(uint8){
      if(age > 18){
         return 1;
      }else {
         return  0;
      }
   }

}

img

2、for

// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.0;


contract C  {

   function forLoopExam() external pure returns(uint){
      uint sum; //用于记录总和
      for(uint i = 0; i <= 10; i ++){
         sum += i;
      }
      return sum;
   }

}

img

3、while

// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.0;


contract C  {

   function whileExam() external pure returns(uint){
      //解构赋值 与golang多个赋值相似
      (uint sum,  uint i) = (0,0);
      while(i <= 10){
         sum += i;
         i ++;
      }
      return sum;
   }

}

img

4、do-while

// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.0;


contract C  {

   function doWhileExam() external pure returns(uint){
      //解构赋值 与golang多个赋值相似
      (uint sum,  uint i) = (0,0);

      do {
         sum += i;
         i ++;
      }
      while(i <= 10);

      return sum;
   }

}

img

当然咯,Solidity 也是支持continue以及break操作符的。

5、三元运算符 ? :

另外,Solidity 还支持三元运算符,其也是Solidity 唯一一个三元运算符,表达式 ? 若表达式为真则返回这个值 : 表达式为假便返回这个值

// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.0;


contract C  {

   /*
   * @title 比较两个值,若前一个大于后一个 则返回 1,小于便返回 -1,等于则返回 0
   * @param int a  第一个数
   * @param int b  第二个数
   * @return int  1(a > b), 0(a = b),-1(a < b)
   */
   function exam(int a,int b) external pure returns(int){
      return (a > b ? int(1) : a < b ? int(-1) : int(0));
   }

}

img