区块见闻 区块见闻
Ctrl+D收藏区块见闻

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

作者:

时间:

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

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

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

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

控制流

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

SEC将SOL、ADA、MATIC、FIL、ATOM、SAND等列为证券:6月5日消息,SEC 在针对 Binance 的诉讼文件中提到,被列为证券的加密货币包括但不限于 BNB、BUSD 以及以下各种加密资产:SOL、ADA、MATIC、FIL、ATOM、SAND、MANA、ALGO、AXS 和 COTI。[2023/6/6 21:17:46]

if-else

for循环

Solana生态钱包Phantom正式上线Android版本:金色财经消息,Solana生态钱包Phantom宣布其Android版本正式上线,用户现已可登陆Google Play商店进行下载,并计划在未来几个月内围绕NFT推出新功能。[2022/4/19 14:32:45]

while循环

do-while循环

21Shares宣布在SIX Swiss Exchange上线Solana ETP等产品:3月10日消息,ETP发行商21Shares宣布在SIX Swiss Exchange上线以瑞士法郎计价的Cardano、Polkadot、Ripple、Solana ETP。

21Shares声称,其实物支持的Ripple XRP ETP是首个Ripple ETP产品,交易代码为AXRP。(Cryptoglobe)[2022/3/10 13:49:27]

三元运算符

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

研究:Solana自动做市商性能领先于以太坊等主流公链:3月3日消息,Dragonfly Research的一项实验通过测试六种主流区块链的自动做市商性能,最终发现Solana的Orca DEX在每秒交易数方面明显领先。Orca DEX每秒管理273.34笔交易,每590毫秒创建一个新区块。BNB Chain紧随其后,在PancakeSwap上每秒交易数为194.6笔,其次是Polygon、Avalanche、Celo,最后是以太坊。

研究人员“GM”的一篇博客文章认为,虽然以太坊EVM兼容链上构建了一个丰富的生态系统,但结果表明,如果你现在想要真正的高性能,你必须关注EVM之外的领域。在这篇博文的早期版本中还建议用户最终需要“放弃EVM”(此部分内容现已被删除)。GM的结论是,随着时间的推移,其他Layer 1区块链将超越EVM兼容链。(Cointelegraph)[2022/3/3 13:34:38]

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

标签:SOLDITSOLIDLIDsolanium币前景StarCreditsVSolidusLido Staked ETH

火币网下载官方app热门资讯
WEB3:浅谈Zk和Optimistic Rollups:原理、区别和前景_以太坊币今日价格行情非小号

如何理解Zk和OptimisticRollups的前景和区别? 撰写:Salazar.eth推文编译:深潮TechFlow人们说,如果能有一个更新,能将ETHL1的TPS提高100倍.

比特币:首次开通社交账号亲自招聘人才 周星驰都在关注的Web3 你知道是什么吗?_web3域名怎么使用

60岁的“星爷”周星驰要进军元宇宙了?谁能想到,向来低调的他首次注册社交账号,竟是为了发布一条招人信息,挑选的还不是新片男女主角,而是Web3人才,一脚跨界到了互联网科技领域.

WEB:为什么说第二代Optimistic?Rollup是Layer2的未来?_WEB3

原文标题:《ForesightVentures:第二代OptimisticRollup》原文作者:msfew.

SOLID:观点:注定失败的XEN与对以太坊的利好_SOLID价格

吴说作者?|?刘全凯 本期编辑?|?ColinWu近几日,自称是谷歌第21号员工JackLevin创立的项目XENCrypto在海内外社区引起了FOMO.

加密货币:宏观拐点何时到来?从美国CPI和中期选举分析_AETH币

原文:《宏观与通胀叙事下,我们正处在市场的哪一阶段?》作者:JerryShang流动性匮乏的市场,正在等待美联储的信号.

区块链:模块化区块链Celestia完成5500万美元融资_SHO

10月20日消息,模块化区块链网络Celestia完成5500万美元融资,BainCapitalCrypto和PolychainCapital领投.