這一講,我們將介紹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的各種組件的高層次概述,使你能夠理解每個組件的目的.
1900/1/1 0:00:00金色財經報道,美國商品期貨交易委員會在美國加利福尼亞州北區地方法院對OokiDAO提起訴訟,并對OokiDAO處以25萬美元罰款.
1900/1/1 0:00:00作者:r0ckgh0st.eth&?cybercaf.ethSeeDAOIR導言:據安全數據顯示,今年以來有記錄的因詐騙和安全漏洞帶來的加密領域損失已近30億美元.
1900/1/1 0:00:0010月11日消息,CNN已經宣布結束旗下的Web3項目并宣布“我們決定是時候與CNN的VaultNFT說再見了.
1900/1/1 0:00:00自從2021年,也就是“元宇宙元年”開始,大量互聯網公司陸續進入元宇宙賽道,全球投融資總額突破了百億元級別.
1900/1/1 0:00:00隱私賽道為何一直受到頂級風投青睞?細數發展脈絡和前景。原文標題:《TheSwordofDamoclesinBlockchain:PrivacyandRegulation》撰文:JimmyQi、S.
1900/1/1 0:00:00