以太幣交易所 以太幣交易所
Ctrl+D 以太幣交易所
ads
首頁 > 瑞波幣 > Info

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

Author:

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

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

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

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

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

控制流

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

數據:一未知地址將價值約1074萬美元的SOL轉至Coinbase:金色財經報道,據Whale Alert監測,537,352枚SOL(價值約1074萬美元)從一未知地址轉至Coinbase。[2023/3/14 13:03:15]

if-else

for循環

while循環

Solana聯合創始人:比特幣需要改變股權證明共識以保持相關性:金色財經報道,Solana的聯合創始人之一阿納托利·雅科文科(AnatolyYakovenko)發表了一系列批評比特幣共識算法的聲明。在接受CNBC采訪時,Yakovenko表示,如果比特幣不改為權益證明(PoS)共識算法,它可能會失去采用。其他組織也攻擊了比特幣,暗示同樣的變化可能是解決一些人認為的缺點的可能解決方案。對此,雅科文科解釋說:如果您查看Solana的能源報告,單次Solana交易大約相當于兩次Google搜索的能源。我認為即使在權益證明網絡中也是最有效的網絡之一。Yakovenko進一步提到,按照他的觀點,未來人們使用的大部分網絡都將基于PoS共識。當被問及在這種情況下比特幣的未來時,Yakovenko表示:如果比特幣最終不轉向股權證明,那么沒有人會使用它。(news.bitcoin)[2022/5/1 2:43:57]

do-while循環

STEPN將向所有Solana創世鞋持有者空投BNBChain鞋盒:5月1日消息,Move to Earn應用STEPN宣布,Public Beta IV 測試計劃今日開始。作為提升用戶體驗的一部分,將為 SOLANA Genesis Sneaker 持有者(#1 - 10,000)提供獨家 BNBChain Sneaker 空投,每個 SOLANA Genesis Sneaker 將收到一個 BNBChain 鞋盒(#20,001 - 30,000)。據了解,空投將從北京時間 5 月 3 日 08:30PM 開始,持續時間 24 小時。[2022/5/1 2:43:33]

聲音 | VanEck數字資產戰略總監:希望SolidX獲得SEC批準:據FOX Business報道,VanEck的數字資產戰略總監Gabor Gurbacs告訴FOX Business,他希望加密創業公司SolidX能獲得美國證券交易委員會(SEC)的批準。他在周三的《倒計時》(Countdown to the Closing Bell)節目中接受獨家采訪時說:“我很清楚,美國想要一個比特幣交易所交易基金(bitcoin ETF),我們來這里就是為了建造它。”[2018/11/1]

三元運算符

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

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

Tags:SOLSOLIDLIDDITsol幣騙局SOLID幣ethylidenebusiness-credit-alliance-chain

瑞波幣
從節點到網絡:掌握 Web3 基礎知識_區塊鏈

Web3龐大而又復雜,結合了各種組件、技術和概念。無論你是Web3、區塊鏈和加密貨幣的新手還是老手,通過這篇稿子,你都將獲得一個關于支持Web3的各種組件的高層次概述,使你能夠理解每個組件的目的.

1900/1/1 0:00:00
CFTC起訴Ooki利用DAO逃避監管,并處以25萬美元罰款_OOKI

金色財經報道,美國商品期貨交易委員會在美國加利福尼亞州北區地方法院對OokiDAO提起訴訟,并對OokiDAO處以25萬美元罰款.

1900/1/1 0:00:00
一萬五千字報告教你如何抗擊區塊鏈詐騙_區塊鏈

作者:r0ckgh0st.eth&?cybercaf.ethSeeDAOIR導言:據安全數據顯示,今年以來有記錄的因詐騙和安全漏洞帶來的加密領域損失已近30億美元.

1900/1/1 0:00:00
CNN因終止NFT項目而被指涉嫌Rug Pull_CNN

10月11日消息,CNN已經宣布結束旗下的Web3項目并宣布“我們決定是時候與CNN的VaultNFT說再見了.

1900/1/1 0:00:00
《2022年Q3國內元宇宙投融資報告》發布_元宇宙

自從2021年,也就是“元宇宙元年”開始,大量互聯網公司陸續進入元宇宙賽道,全球投融資總額突破了百億元級別.

1900/1/1 0:00:00
區塊鏈行業的達摩克利斯之劍:隱私與監管_區塊鏈

隱私賽道為何一直受到頂級風投青睞?細數發展脈絡和前景。原文標題:《TheSwordofDamoclesinBlockchain:PrivacyandRegulation》撰文:JimmyQi、S.

1900/1/1 0:00:00
ads