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

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

Author:

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

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

我最近在重新學solidity,鞏固一下細節,也寫一個「Solidity極簡入門」,供小白們使用,每周更新1-3講。

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

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

控制流

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

Solana生態收益聚合器Tulip Protocol暫停存款,用戶可取款:11月14日消息,Solana生態收益聚合器和杠桿收益耕作平臺Tulip Protocol宣布,在鏈上流動性穩定/改善之前,已暫停貸款存款、新增杠桿頭寸和whirlpool存款。用戶仍然可以從lending/whirlpool策略取款,以及管理/平倉杠桿頭寸。[2022/11/14 13:02:45]

if-else

for循環

Solana生態去中心化衍生品交易平臺Drift Protocol上線alpha版本主網:據官方公告,Solana生態去中心化衍生品交易平臺Drift Protocol宣布封閉alpha版本主網現在已經上線。[2021/10/25 20:55:51]

while循環

do-while循環

三元運算符

Solana鏈上開放流動性協議SenSwap Devnet已上線:據官方消息,Solana鏈上用于代幣交換的開放流動性協議SenSwap在推特上表示,SenSwap Devnet已上線,開放時間持續至8月20日。[2021/7/26 1:16:28]

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

另外還有continue和break關鍵字可以使用。

用solidity實現插入排序

動態 | SEC撤銷Blockchain Solutions的證券注冊:在美國證券交易委員會(SEC)暫時中止Blockchain Solutions證券交易后不久,SEC已發布針對該公司的行政訴訟結果。SEC在文件中表示,Blockchain Solutions同意根據1934年《證券交易法》第12(j)條的規定進行證券定單調查和撤銷注冊。自2018年6月30日以來,該公司尚未向SEC提交任何定期報告。撤銷證券注冊自2019年10月8日起生效。(financefeeds)[2019/10/9]

寫在前面:

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

Tags:SOLDITLIDSOLIDSolrise FinanceCreditcoinethylideneSOLID價格

FTT
金色早報 | 比特幣哈希率達到 321.15 EH/s 的歷史新高_比特幣:區塊鏈

頭條 ▌比特幣哈希率達到321.15EH/s的歷史新高金色財經報道,Watcher.Guru發推表示,比特幣哈希率達到321.15EH/s的歷史新高.

1900/1/1 0:00:00
晚間必讀 | 詳解全球 Top10 加密風投機構_ETH:以太坊

1.金色觀察|NFTFi終極指南NFT是一種投資還是一種數字收藏品——對于那些活躍在行業的人來說,這是我最喜歡的問題之一.

1900/1/1 0:00:00
HuobiGlobal控股股東完成股份出售_GLO:OBI

全球頂級虛擬資產交易所HuobiGlobal今天宣布,HuobiGlobal控股股東公司已向百域資本旗下基金轉讓所持有的全部HuobiGlobal股份.

1900/1/1 0:00:00
Layerzero:常被誤認為跨鏈橋的協議層產品_LAYER:ERO

在剛剛過去的這輪長達兩年的牛市中,市場不但見證了多鏈生態的迅速崛起,更直接目睹了眾多跨鏈橋產品的迅速爆發.

1900/1/1 0:00:00
金色早報 | Huobi Global控股股東完成股份出售_OBI:USD

頭條 ▌HuobiGlobal控股股東完成股份出售金色財經報道,HuobiGlobal今天宣布,HuobiGlobal控股股東公司已向百域資本旗下基金轉讓所持有的全部HuobiGlobal股份.

1900/1/1 0:00:00
探討公鏈競爭格局 誰更有優勢?_MOS:SOL

原文標題:《公鏈競爭II——隨想》原文作者:Maco,W3.Hitchhiker;修訂:Evelyn,W3.Hitchhiker 前言 基于上一篇對二線公鏈對比的報告,結合最新Delphi奶文.

1900/1/1 0:00:00
ads