以太坊交易所 以太坊交易所
Ctrl+D 以太坊交易所
ads
首頁 > 幣安幣 > Info

Solidity極簡入門第十講:控制流、用solidity實現插入排序_DIT:SOLID

Author:

Time:1900/1/1 0:00:00

這一講,我們將介紹 solidity 中的控制流,然后講如何用 solidity 實現插入排序(InsertionSort),一個看起來簡單,但實際上很容易寫出 bug 的程序。

我最近在重新學 solidity,鞏固一下細節,也寫一個「Solidity 極簡入門」,供小白們使用(編程大佬可以另找教程),每周更新 1-3 講。

所有代碼和教程開源在 github: github.com/AmazingAng/WTFSolidity

Solidity 的控制流與其他語言類似,主要包含以下幾種:

if-else

OKX已下架USDT-Solana與USDC-Solana充提服務:11月17日消息,加密交易所OKX已于 11 月 17 日 11:00 (HKT) 下架USDC-Solana和USDT-Solana的充提服務。[2022/11/17 13:18:24]

for 循環

while 循環

do-while 循環

CME正在考慮推出SOL和ADA的期貨合約:金色財經報道,芝加哥商品交易所(CME)股票和加密貨幣產品主管Payal Shah在CryptoCompare數字資產峰會的小組討論中表示,CME正在“考慮”根據客戶的要求創建山寨幣期貨合約,例如Solana的SOL和Cardano的ADA。

Shah表示,推出山寨幣期貨將取決于解決與價格指數和監管相關的問題,CME現有的比特幣和以太坊期貨依賴于基于五個交易所的價格信息指數。自2017年12月推出比特幣期貨以來,CME已經推出了以太坊期權和期貨合約。此前報道,CME 3月份推出了微型比特幣和以太坊期權產品。(The Block)[2022/4/2 13:59:56]

三元運算符

三元運算符是 solidity 中唯一一個接受三個操作數的運算符,規則條件? 條件為真的表達式:條件為假的表達式。此運算符經常用作 if 語句的快捷方式。

Solana生態借貸協議Port Finance與Socean達成合作:2月6日消息,Solana生態借貸協議Port Finance與Solana算法流動性質押協議Socean達成合作。Port Finance將使用Socean Streams購買自己的流動性。Port Finance將購買10000美元的PORT-USDC Atrix LP代幣和10000美元的PORT-CASH Saros LP代幣。

2月8日,買家將可以出售PORT-USDC Atrix LP代幣和PORT-CASH Saros LP代幣,并購買b30PORT。[2022/2/6 9:34:20]

Solana市值排名加密貨幣第六位:金色財經報道,加密資產Solana(SOL)上周五在全球加密貨幣市場估值方面成功占據第六位,市場估值接近卡爾達諾。在撰寫本報告時,SOL每單位的交換價格超過203美元,在過去的一天里上漲了12.4%。七天的統計數據表明,過去一周SOLANA上漲了37.5%,在過去30天內,SOL上漲了68.2%。該加密資產的整體市值約為622億美元,距離超過卡達諾的市場估值還有6900萬美元,只有11%的距離。(news.bitcoin)[2021/10/23 20:50:37]

另外還有 continue(立即進入下一個循環)和 break(跳出當前循環)關鍵字可以使用。

寫在前面:

90% 以上的人用 solidity 寫插入算法都會出錯。插入排序

排序算法解決的問題是將無序的一組數字,例如 [2, 5, 3, 1],從小到大一次排列好。插入排序(InsertionSort)是最簡單的一種排序算法,也是很多人學習的第一個算法。它的思路很簡答,從前往后,依次將每一個數和排在他前面的數字比大小,如果比前面的數字小,就互換位置。示意圖:

插入排序

python 代碼

我們可以先看一下插入排序的 python 代碼:

改寫成 solidity 后有 BUG!

一共 8 行 python 代碼就可以完成插入排序,非常簡單。那么我們將它改寫成 solidity 代碼,將函數,變量,循環等等都做了相應的轉換,只需要 9 行代碼:

那我們把改好的放到 remix 上去跑,輸入 [2, 5, 3, 1]。BOOM!有 bug!改了半天,沒找到 bug 在哪。我又去 google 搜」solidity insertion sort」,然后發現網上用 solidity 寫的插入算法教程都是錯的,比如:Sorting in Solidity without Comparison

正確的 solidity 插入排序

花了幾個小時,在 Dapp-Learning 社群一個朋友的幫助下,終于找到了 bug 所在。solidity 中最常用的變量類型是 uint,也就是正整數,取到負值的話,會報 underflow 錯誤。而在插入算法中,變量 j 有可能會取到-1,引起報錯。

這里,我們需要把 j 加 1,讓它無法取到負值。正確代碼:

運行后的結果:

這一講,我們介紹了 solidity 中控制流,并且用 solidity 寫了插入排序。看起來很簡單,但實際很難。這就是 solidity,坑很多,每個月都有項目因為這些小 bug 損失幾千萬甚至上億美元。掌握好基礎,不斷練習,才能寫出更好的 solidity 代碼。

原文:《Solidity 極簡入門: 10. 控制流,用 solidity 實現插入排序》

來源:panews

PANews

媒體專欄

閱讀更多

金色早8點

Odaily星球日報

Bress

潘達看Web3

DeFi之道

區塊律動BlockBeats

比推 Bitpush News

Tags:SOLLIDDITSOLIDsolana幣的最新價格BolideRebasing LiquiditySOLID幣

幣安幣
a16z:需要監管的應是 Web3 應用 而非協議_WEB:SMT

互聯網的許多早期支持者主張永遠保持自由和開放,使其成為全人類的無邊界和無監管的工具。在過去的 20 年里,隨著政府對濫用行為的打擊,這一愿景失去了一些明確性.

1900/1/1 0:00:00
從應用走向協議 Gitcoin推出的Grants Protocol將如何改變Web3融資_TCOIN:Gitcoin

10 月 7 日,據官方推特,Gitcoin 將推出新產品 Grants Protocol,它是一個融資基礎設施,允許任何社區啟動自己的、包含社區決策的贈款計劃,目前正處于封閉測試階段.

1900/1/1 0:00:00
晚間必讀5篇 | FTX事件后的思考:加密行業將何去何從?_NAN:區塊鏈

1.FTX事件后的思考:加密行業將何去何從?隨著時間的流逝,我對加密行業的未來越來越不確定。在一段時間內,當涉及到提高對加密貨幣的認識或吸引新來者參與時,SBF對該行業來說是凈利好.

1900/1/1 0:00:00
支付巨頭的加密貨幣征途_ISA:ARE

“全球知名支付巨頭都在加密貨幣市場積極布局。Visa 自2015年便開始布局加密貨幣,2021年上半年加密貨幣相關的Visa卡消費活動更是超過10億美元;MasterCard的加密貨幣征途始于2.

1900/1/1 0:00:00
探索AIGC和Web3游戲的結合點:如何用AI講述Web3游戲的故事?_VER:區塊鏈技術適合女生嗎

原文:《探索 AIGC 和 Web3 游戲的結合點》 作者:隔夜的粥 近期人工智能生成內容 (AIGC) 爆火的背景下,Crypto 市場顯得頗有些涼意.

1900/1/1 0:00:00
Biteye 周年慶嘉賓金句集錦 邀您一起掉進Web3「兔子洞」_DAO:nbs幣最新消息

自 8 月 9 日來,Web3 學習型社區 Biteye 開啟了為期五周的「周年慶 & 品牌升級」主題活動,圍繞 DeFi、公鏈、Web3、NFT 和 DAO 五個領域.

1900/1/1 0:00:00
ads