Solidity基礎教程5——邏輯語句

本教程使用的開發(fā)環(huán)境是一款在線編譯器——ChainIDE够颠,具體的使用方法在之前的文章當中已經(jīng)有講解過熙侍,有需要的同學可以自行查看。

網(wǎng)址:https://eth.chainide.com/

序言

智能合約是不可修改的代碼履磨,同時也是涉及到資金蛉抓、決策、事件的程序剃诅,需要具備非常高的穩(wěn)定性巷送。

它就好像我們在日常使用中對商品分級一樣,有商業(yè)級矛辕、工業(yè)級笑跛、軍用品級。作為一個需要非常穩(wěn)定功能的語言聊品,solidity對邏輯語句的要求是能穩(wěn)定實現(xiàn)代碼的邏輯飞蹂,同時不出現(xiàn)歧義。

它沿用了C和JS的一些語言特性翻屈,但是又有略微的不同陈哑,今天就來向大家一個個介紹一下。

條件語句

在程序當中,判斷條件是最容易出現(xiàn)的邏輯情況惊窖,soliditiy的if條件語句與其他基本相同刽宪,但要注意的是,solidity不支持類似于c語言內(nèi)的switch功能爬坑。

if&&else

if (條件表達式) {
   被執(zhí)行語句(如果條件為真)
} else {
   被執(zhí)行語句(如果條件為假)
}

if (條件表達式 1) {
   被執(zhí)行語句(如果條件 1 為真)
} else if (條件表達式 2) {
   被執(zhí)行語句(如果條件 2 為真)
} else if (條件表達式 3) {
   被執(zhí)行語句(如果條件 3 為真)
} else {
   被執(zhí)行語句(如果所有條件為假)
}

作為程序語言當中最基礎的條件判斷語句纠屋,它會非常經(jīng)常出現(xiàn)在程序當中。當有多個else if條件嵌套時盾计,要注意每個條件之間的關系售担,盡量避免出現(xiàn)存在交集的條件表達式。

還有一點與其他程序語言不一樣的是署辉,在其他語言當中往往會有while(1)族铆,if(1)這種寫法,但是soilidity當中不支持不同類型默認轉(zhuǎn)換為布爾型的這種寫法哭尝,所以在編譯時會報錯哥攘。

循環(huán)結(jié)構

for循環(huán)

作為程序里最基本的循環(huán),for循環(huán)在solidity當中的應用非常的廣泛材鹦。由于缺乏一個簡便的數(shù)組賦值方式逝淹,在對變長數(shù)組賦值時往往會用到for循環(huán)。

    uint[] a;
    function for_example(uint number) public 
    {
        for(uint i=0; i<number;i++)
        {
            a.push(i);
        }
    }

    function output_a() view public returns(uint[] memory)
    {
        return a;
    }

在例程當中桶唐,演示了一個對不定長數(shù)組進行添加值的操作栅葡,通過數(shù)組自帶的push函數(shù)進行對a數(shù)組值的添加,在output_a當中獲得當前a數(shù)組的內(nèi)容尤泽。

由于a數(shù)組是在函數(shù)外定義的欣簇,此時的a的儲存位置為storage,因此每次調(diào)用for_example的時候a數(shù)組內(nèi)的值是會不斷累加的坯约。

tips:大家可以看到熊咽,在這個示例當中我把對數(shù)組的內(nèi)容修改和對數(shù)組內(nèi)容的查看分成了兩個部分,這也是solidity的語言特性之一闹丐。

while和do……while

除了for循環(huán)以外横殴,我們在程序內(nèi)調(diào)用最多的還有while循環(huán),while循環(huán)和do……while循環(huán)的最大區(qū)別是先進行循環(huán)卿拴,還是先進行條件語句判斷衫仑。

while(表達式){
   程序語句
}

do{
  程序語句
}while(表達式)

在表達式為true時才會進入循環(huán)或者重復下一個循環(huán),如果表達式的值為false則跳出循環(huán)巍棱。

break和continue

前面寫了關于循環(huán)的內(nèi)容,這里講一些關于如何跳出循環(huán)的方式蛋欣。

break表示的是跳出這一層循環(huán)航徙,直接從break這里停止,下面的程序就不會運行了陷虎。continue表示的是跳出這一次循環(huán)到踏,也就是重新從頭開始循環(huán)杠袱。

在有多層循環(huán)嵌套的情況下,關鍵字的作用效果取決于它在哪一層循環(huán)的作用域內(nèi)窝稿,這里我使用一個例子做一下講解楣富。

    function multi_circulation() public pure returns(uint,uint)
    {
        uint d;
        uint b=0;
        for(uint i=0;i<10;i++)
        {
            d=0;
            while(d<10)
            {
                d++;
                b++;
                if(b%5==0)
                {
                    break;
                }
            }
        }
        return (d,b);      //d為5,b為45
    }

在這個函數(shù)當中伴榔,我們定義了兩個變量纹蝴,分別是d和b。在for循環(huán)內(nèi)有一個i=4時跳過本次循環(huán)的語句踪少,因此for循環(huán)只執(zhí)行了9次塘安。

表面上來看,d的值控制著內(nèi)部的while循環(huán)援奢,但實際上每次都是里面的條件語句觸發(fā)從而跳出循環(huán)兼犯,每次b的值+5后就會跳出while循環(huán)。

如果對流程不清楚的同學可以自己再模擬一下集漾。

tips:除了break和continue以外切黔,還有一種方式可以跳出循環(huán),如果是在函數(shù)內(nèi)具篇,使用return (程序語句)可以直接返回函數(shù)的值纬霞。

結(jié)語

基礎教程部分即將就要結(jié)束了,在基礎教程當中我們學習了關于合約結(jié)構栽连、值類型险领、運算、映射和邏輯語句的部分秒紧。

在基礎教程的最后绢陌,我們將使用一個實際的例子來帶大家將這些內(nèi)容結(jié)合到應用場景里,幫助大家更好地理解solidity熔恢。

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末脐湾,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子叙淌,更是在濱河造成了極大的恐慌秤掌,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鹰霍,死亡現(xiàn)場離奇詭異闻鉴,居然都是意外死亡,警方通過查閱死者的電腦和手機茂洒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門孟岛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事渠羞〗锓。” “怎么了?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵次询,是天一觀的道長荧恍。 經(jīng)常有香客問我,道長屯吊,這世上最難降的妖魔是什么送巡? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮雌芽,結(jié)果婚禮上授艰,老公的妹妹穿的比我還像新娘。我一直安慰自己世落,他們只是感情好淮腾,可當我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著屉佳,像睡著了一般谷朝。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上武花,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天圆凰,我揣著相機與錄音,去河邊找鬼体箕。 笑死专钉,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的累铅。 我是一名探鬼主播跃须,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼娃兽!你這毒婦竟也來了菇民?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤投储,失蹤者是張志新(化名)和其女友劉穎第练,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體玛荞,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡娇掏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了勋眯。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片婴梧。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡壁涎,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出志秃,到底是詐尸還是另有隱情,我是刑警寧澤嚼酝,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布浮还,位于F島的核電站,受9級特大地震影響闽巩,放射性物質(zhì)發(fā)生泄漏钧舌。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一涎跨、第九天 我趴在偏房一處隱蔽的房頂上張望洼冻。 院中可真熱鬧,春花似錦隅很、人聲如沸撞牢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽屋彪。三九已至,卻和暖如春绒尊,著一層夾襖步出監(jiān)牢的瞬間畜挥,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工婴谱, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蟹但,地道東北人。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓谭羔,卻偏偏與公主長得像华糖,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子口糕,可洞房花燭夜當晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容