加密貨幣交易所 加密貨幣交易所
Ctrl+D 加密貨幣交易所
ads

Solidity極簡入門第十講:控制流、用solidity實現插入排序_SOL:SOLAPE價格

Author:

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

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

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

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

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

if-else

Solana基金會發布3月驗證者健康報告:擬招募質押生態系統負責人:金色財經報道,Solana基金會官方發布2023年3月驗證者健康報告,其中指出Solana是目前世界上節點數最多的權益證明網絡之一,也是中本聰系數分布最多的網絡之一,全球分布3000多個共識和RPC節點。此外,Solana基金會表示作為一個多驗證者客戶端網絡,目前已有兩個客戶端投產運行,第三個客戶端正在開發中。在過去的120天里,來自多個組織的104位核心貢獻者向Solana網絡的Github提供支持,Solana基金會還透露將會招募一位質押生態系統負責人。[2023/3/24 13:22:56]

for 循環

12月Solana鏈上NFT交易額超7500萬美元創Q4最高記錄:金色財經報道,據cryptoslam數據顯示,12月Solana鏈上NFT交易額達到75,391,207.42美元,創Q4最高記錄。此外,上個月Solana鏈上NFT銷售量達到850,624筆,平均單筆交易額約為88.63美元,獨立買家52,992個,獨立賣家77,987個。[2023/1/2 22:21:06]

while 循環

do-while 循環

Solana收益耕作平臺Cropper Finance已連接GenesysGo RPC節點:Solana鏈上收益耕作平臺Cropper Finance已經連接至GenesysGo RPC節點,可以明顯縮短在平臺上進行交互的響應時間。[2021/8/30 22:46:40]

三元運算符

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

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

Solana從OKEx和MXC籌集了4000萬美元的戰略投資:OKEx和MXC正在向Solana戰略投資基金注資4000萬美元,以引導其網絡上的開發。Solana團隊將與新的資助者一起工作,以“支持下一波殺手級的dApps”。(CoinTelegraph)[2021/3/25 19:18:20]

寫在前面:

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:SOLSOLIDDITLIDSOLAPE價格SolidexPussyCreditSOLID幣

以太坊最新價格
金色早報 | 中國數字藏品市場規模五年內預計達到280億元_區塊鏈:Solareum

▌ 報告:中國數字藏品市場規模五年內預計達到280億元金色財經報道,艾瑞咨詢發布《中國數字藏品行業研究報告》(后簡稱“報告”).

1900/1/1 0:00:00
Glassnode數據洞察:暴風雨前的平靜_比特幣:ODE

與高度波動的股票、信貸和外匯市場形成鮮明對比的是,最近?幾周加密貨幣市場一直保持非常穩定。隨著比特幣在許多傳統指標上得到支撐,我們在評估這里是否會形成真正的底部.

1900/1/1 0:00:00
以歐洲為中心的加密死胡同_SIU:CEL

我只想說:區塊鏈投入了大量資金,但相比之下,結果卻是可悲的。 Polynya在上圖的推文里完美地框定了這篇帖子:到目前為止,我們到目前為止所做的可能就是我們使用區塊鏈所取得的全部成果.

1900/1/1 0:00:00
Echo:以太坊的愿景_以太坊:以太坊幣現在的價格是多少

原文出版于 2018 年 11 月。三年過去,如果作者此時再撰寫一篇這樣的文章,無疑會增補不少內容,也會減少對某些話題的描述。但回顧這篇文章仍然是有意義的.

1900/1/1 0:00:00
LUNA vs. LUNC: 哪個是更糟糕的投資

Luna 于2018年推出,最初被開發為 Terra 的第一個本土代幣。他們把它稱為 LUNA.

1900/1/1 0:00:00
隱私計算加區塊鏈 助力數據可信治理實踐_區塊鏈:INU

近年來,區塊鏈技術應用和產業已經具備良好的發展基礎,在防偽溯源、供應鏈管理、司法存證、政務數據共享、民生服務等領域涌現了一批有代表性的區塊鏈應用.

1900/1/1 0:00:00
ads