月亮链 月亮链
Ctrl+D收藏月亮链
首页 > LTC > 正文

SOL:Solidity极简入门第十讲:控制流、用solidity实现插入排序_wesendit币gate

作者:

时间:1900/1/1 0:00:00

这一讲,我们将介绍solidity中的控制流,然后讲如何用solidity实现插入排序,一个看起来简单,但实际上很容易写出bug的程序。

我最近在重新学solidity,巩固一下细节,也写一个「Solidity极简入门」,供小白们使用,每周更新1-3讲。

所有代码和教程开源在github:github.com/AmazingAng/WTFSolidity

这一讲,我们将介绍solidity中的控制流,然后讲如何用solidity实现插入排序,一个看起来简单,但实际上很容易写出bug的程序。

控制流

Solidity的控制流与其他语言类似,主要包含以下几种:

if-else

Solana生态借贷协议Jet Protocol发布V2测试版:8月9日消息,Solana生态借贷协议Jet Protocol发布V2测试版,已上线保证金系统Jet Margin、固定利率市场Jet Bond和固定期限市场。[2022/8/9 12:12:16]

for循环

while循环

Solana大规模盗币事件或因Slope钱包将私钥上传至服务器:8月4日消息,加密KOL foobar 发布推特称,Solana大规模攻击事件,看起来是 Slope 钱包向外部集成合作伙伴发送了明文私钥,受损的 Phantom 钱包来自 Slope 中使用的种子短语导入,受损的 ETH 钱包也来自种子短语重用。[2022/8/4 2:58:04]

do-while循环

三元运算符

三元运算符是solidity中唯一一个接受三个操作数的运算符,规则条件?条件为真的表达式:条件为假的表达式。此运算符经常用作if语句的快捷方式。

Solana去中心化交易平台Orca推出Whirlpools开发者计划:5月24日消息,Solana去中心化交易平台Orca推出Whirlpools开发者计划(Whirlpools Builders Program),开发者可在Whirlpools(集中流动性池)之上构建应用程序。

据悉,第一批开发者计划已开放申请,并持续到2022年6月30日,主要围绕使用户能够通过Whirlpools提供集中的流动性、通过有效的资本配置提高LP的收益和交易利率,补助金将为4000-20000ORCA,优秀项目将考虑提供高达20万枚ORCA的赠款。(Medium)[2022/5/24 3:38:06]

数据:3月Solana链上表现低迷,日均NFT销售量下降超70%:金色财经报道,据Dune Analytics数据显示,3月Solana链上表现低迷。在NFT方面,Solana链上日均NFT销售量出现大幅下跌,从2月份的2.7万笔跌至7000笔,跌幅超过70%。Solanart、Solsea和MagicEden三个Solana链上NFT市场交易量占到了Solana链上NFT总交易量的81%,但随着用户退出增多,3月这些NFT市场的日均唯一用户量已降至2000以下。

在DeFi方面,尽管按锁仓量排名Solana是第五大DeFi区块链,但链上现有的60多个DeFi协议锁仓量仍与2月底水平相当。虽然Solana链上总锁仓量一度推高至74亿美元,但很快又滑落至70亿美元下方,3月22日数据显示约为69亿美元。[2022/3/22 14:10:33]

另外还有continue和break关键字可以使用。

用solidity实现插入排序

写在前面:

90%以上的人用solidity写插入算法都会出错。插入排序

排序算法解决的问题是将无序的一组数字,例如,从小到大一次排列好。插入排序是最简单的一种排序算法,也是很多人学习的第一个算法。它的思路很简答,从前往后,依次将每一个数和排在他前面的数字比大小,如果比前面的数字小,就互换位置。示意图:

插入排序

python代码

我们可以先看一下插入排序的python代码:

改写成solidity后有BUG!

一共8行python代码就可以完成插入排序,非常简单。那么我们将它改写成solidity代码,将函数,变量,循环等等都做了相应的转换,只需要9行代码:

那我们把改好的放到remix上去跑,输入。BOOM!有bug!改了半天,没找到bug在哪。我又去google搜」solidityinsertionsort」,然后发现网上用solidity写的插入算法教程都是错的,比如:SortinginSoliditywithoutComparison

正确的solidity插入排序

花了几个小时,在Dapp-Learning社群一个朋友的帮助下,终于找到了bug所在。solidity中最常用的变量类型是uint,也就是正整数,取到负值的话,会报underflow错误。而在插入算法中,变量j有可能会取到-1,引起报错。

这里,我们需要把j加1,让它无法取到负值。正确代码:

运行后的结果:

总结

这一讲,我们介绍了solidity中控制流,并且用solidity写了插入排序。看起来很简单,但实际很难。这就是solidity,坑很多,每个月都有项目因为这些小bug损失几千万甚至上亿美元。掌握好基础,不断练习,才能写出更好的solidity代码。

原文:《Solidity极简入门:10.控制流,用solidity实现插入排序》

来源:panews

标签:SOLSOLIDLIDDITSOL币是越来越少吗SolidexBLID币wesendit币gate

LTC热门资讯
WEB3:Web3技术之数据合规重要性_WEB

?近年来,随着《数据安全法》《个人信息保护法》等法律的日臻完善,网络运行和数据要素的安全合规已经逐渐成为各大企业合规关注的重点,特别是对于数据驱动型的Web3行业来说.

1900/1/1 0:00:00
DAO:晚间必读 | 为什么以太坊是最好的选择?_DUCKDAO币

1.金色观察|V神论DAO:DAO不是公司其去中心化很重要最近,关于高度去中心化的DAO行不通的观点有很多讨论,为了保持竞争力,DAO治理最开始应该更接近于传统公司的治理.

1900/1/1 0:00:00
EOS:回顾9月加息会议:美联储第三次暴力加息后 还透露了什么重要信号?_WAS

这次美联储FOMC会议很有趣,一如既往,真正的「魔鬼」隐藏在细节中,让我们来看看一些最有趣的细微差别和市场影响。原文:Alf推特这次美联储FOMC会议很有趣.

1900/1/1 0:00:00
NFT:金色Web3.0日报 | 欧洲AML规则可能涉及DeFi、DAO和NFT_DEF

DeFi数据1.DeFi代币总市值:443.35亿美元 DeFi总市值数据来源:coingecko2.过去24小时去中心化交易所的交易量34.

1900/1/1 0:00:00
DAO:金色观察 | DAO不是公司:自治组织的去中心化很重要_TIM

特别感谢KarlFloersch和TinaZhen对本文早期版本的反馈和审阅。最近,关于高度去中心化的DAO行不通的观点有很多讨论,DAO治理应该开始更接近于传统公司的治理为了保持竞争力.

1900/1/1 0:00:00
DAO:监管层终于对DAO下手了 链上治理算违法吗_FTC

昨日,美国商品期货交易委员会在美国加州北区地方法院对Ooki协议运营组织OokiDAO提起诉讼,并对OokiDAO处以25万美元罚款.

1900/1/1 0:00:00