本教程使用的開發(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熔恢。