火星链 火星链
Ctrl+D收藏火星链

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

作者:

时间: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链上NFT销售总额突破27亿美元,创历史新高:金色财经报道,据cryptoslam最新数据显示,Solana链上NFT销售总额已突破27亿美元,创历史新高,本文撰写时达到2,705,489,017美元,链上交易量为13,957,944笔。 当前 Solana 区块链上交易额最大的 NFT 项目是 Solana Monkey Business,“淡定熊”Okay Bears当前交易额排名第二,,Degenerate Ape Academy位列第三。[2022/10/11 10:30:37]

for循环

Solana启动6000万美元投资基金,将专注巴西、俄罗斯、印度和乌克兰市场:根据周三的公告,Solana基金会启动四个战略投资基金,总额为6000万美元,以促进新兴市场中Solana生态系统的发展。这四只基金将专注于四个市场,分别是:巴西、俄罗斯、印度和乌克兰。这笔资金将用于支持区块链应用程序的开发,包括DeFi,NFT市场和网络安全。(CoinDesk)[2021/5/12 21:55:29]

while循环

do-while循环

Solana因未知问题停止生产区块:金色财经报道,UTC时间12月4日13:46(北京时间21:46),由于一个未知的问题,Solana主网Beta集群在插槽53,180,900处停止生产区块,这阻止了任何新交易的确认。根据官方Medium帖子,Solana团队正在与验证者社区积极合作,以重新启动网络。Solana区块链资源管理器确认当前未生产任何区块。[2020/12/5 14:03:49]

三元运算符

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

LBank Solar QNUT售卖LBK专场认购结束 下单总价值超1亿LBK:LBank Solar QNUT售卖LBK专场已于3月23日17:00(UTC+8)结束,共有2216人下单申购,下单总价值超过1亿LBK,总成交金额超过6333万LBK,认购成交比例为62.34%,超额部分将退回。成交部分的LBK将实际用于销毁。LBank将根据个人申购金额占总下单金额的比例进行实际认购额度的分发。QNUT/USDT交易对将于同日19:00开通。更多详情请关注LBank官网公告。[2020/3/23]

另外还有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

标签:SOLLIDSOLIDDITsolana币最新消息MOSOLIDSOLID币wesendit币gate

币安app官方下载最新版热门资讯
TFI:NFT 借贷指南:点对点的 NFTfi 和点对池的 BendDAO

作者:WilliamM.Peaster来源:Bankless去年年底,当NFT主导加密领域时,几乎没有人预料到这一点.

1900/1/1 0:00:00
COI:现在谁拥有以太坊?

以太坊合并已经过去一周多了,涟漪已经开始显现。加密碳评级研究所(CCRI)委托发布的一份报告显示,能源使用量下降了,甚至超过了预期.

1900/1/1 0:00:00
IBOX:对不起 你购买的数字藏品真的上链了吗?

原标题:对不起,数藏真的不配我是数藏圈内人。准确点,我自认为我还算个数藏圈内人。比如微信里躺着的N个数藏群;又比如能够无缝对接上圈内的热门话题;前一阵,我还写了几篇还算有见地的文章。我是傲慢的.

1900/1/1 0:00:00
比特币价格:熊市之下 比特币和美股的相关性究竟如何?

本文来自caia,原文作者:VettaFiResearch副主任RoxannaIslamOdaily星球日报译者|Moni 在当前宏观市场动荡的情况下,“相关性”是一个需要认真考虑的因素.

1900/1/1 0:00:00
BIT:以欧洲为中心的加密死胡同

我只想说:区块链投入了大量资金,但相比之下,结果却是可悲的。 Polynya在上图的推文里完美地框定了这篇帖子:到目前为止,我们到目前为止所做的可能就是我们使用区块链所取得的全部成果.

1900/1/1 0:00:00
DAPP:DApp这么火 是手机App的升级版吗?

作者:JackyLHH智能手机的普及和移动互联网的爆发,让我们更加离不开各种手机应用程序:微信、支付宝、抖音、手机淘宝、微博、网易云音乐……除了我们日常使用的各种App外.

1900/1/1 0:00:00