solidity基本語法 - 值類型

Value Types

值類型是指當(dāng)傳遞這些類型時(shí),傳遞的是類型的取值袄膏。

bool

bool類型的取值位true,false,其用法和主流的語言類似。

int/uint

int 表示256位整形和無符號(hào)整形,還可以使用int8藤韵,int16...uint256* 表示8位,16位熊经。泽艘。。256位整形镐依。

uint8,uint16...uint256類似的使用方法類似匹涮。

fixed/ufixed

fixed 和其他語言中的 float,double表示的含義類似,代碼中使用方法如下:

 fixedMxN decimal;

其中M表示位寬槐壳,必須位8的整數(shù)倍然低,N表示十進(jìn)制小數(shù)部分的位數(shù)。

address

address類型位的位寬位20個(gè)字節(jié)(160 bits),和區(qū)塊鏈上的地址長度一致脚翘。 address 類型還包含幾個(gè)成員可以被訪問:

  • balance - 獲取該地址的余額
  • transfer - 向該地址發(fā)送ether(以wei位單位)
  • send - 和transfer功能類似灼卢,區(qū)別在于如果發(fā)送失敗send方法返回false,transfer方法會(huì)發(fā)生錯(cuò)誤
  • call/delegatecall/callcode - 這幾個(gè)函數(shù)較為底層来农,后續(xù)章節(jié)單獨(dú)介紹

下面是一個(gè)例子:

pragma solidity ^0.4.23;

contract AddressTest {
    
    event Transfered(address to, uint amount);
    event Sent(address to, uint amount, bool successed);

    //Get the ether balance of a certian address
    function getBalanceOf(address _addr) public view returns(uint) {
        return _addr.balance;
    }
    
    //Get the ether balance of this very contract
    function getBalance() public view returns(uint) {
        return address(this).balance;
    }

    //Transfer to a specific address from this contract
    function transferTo(address to, uint amount) public payable {
        to.transfer(amount);
        emit Transfered(to,amount);
    }
    
    //Send to a specific address from this contract
    function sendTo(address to, uint amount) public  payable {
        bool result = to.send(amount);
        emit Sent(to,amount,result);
    }
    
    //Fallback function used to accept ether
    function () payable public {  
    }
}

代碼執(zhí)行結(jié)果這里不貼出鞋真,有興趣的同學(xué)可以自行通過remix-ide做相應(yīng)實(shí)驗(yàn)。

bytesN

固定長度字節(jié)可以使用bytes1, bytes2, bytes3, …, bytes32 分別表示沃于,其中bytes1 可以使用byte代替涩咖。

Literals

Address Literals

任何十六進(jìn)制的字符串,凡是能通過地址合法性檢查(address checksum test)繁莹,就會(huì)被認(rèn)為是地址檩互,例如:

0xdCad3a6d3569DF655070DEd06cb7A1b2Ccd1D3AF

Rational and Integer Literals

整形字量可以使用十進(jìn)制整數(shù)表示,例如:50咨演,999等闸昨,solidity中不支持八進(jìn)制數(shù)據(jù)表示。solidity支持十進(jìn)制小數(shù)薄风,例如3.5饵较,99.9都是合法的有理數(shù)字面量,科學(xué)計(jì)數(shù)法也同樣支持遭赂,例如2e10循诉,2e-2,2.5e2也是合法的。

String Literals

String Literals 和多數(shù)語言類似撇他,solidity中‘’“”都可以用于表示String Literals.

Hexadecimal Literals

Solidity 通過hex前綴表示16進(jìn)制字面量茄猫,16進(jìn)制字面量可以作為字符串使用,例如hex''4142434445"表示“ABCDE”.

下面是一個(gè)關(guān)于字面量的例子:

pragma solidity ^0.4.23;

contract LiteralTest {
    
    event IntValue(int value);
    event StringValue(string value);

    function testRationalLiteral() public {
        // Next line compiles even the 2**8 - 2**6 - 2**6 is 127 whitch is greater than the biggest positive number of int8 
        int8 x = (2**8 - 2**6 - 2**6 -1); 
        //Next line should get a error since the final result is greater than 127
        //int8 x = (2**8 - 2**6 - 2**6); 
        emit IntValue(x);
    }

    function testHexLiteral() public  {
        //Value of the event is "ABCDE..."
        emit StringValue(hex"414243444546474849");
    }
}

Enum

Enum和java中的Enum類似困肩,可以用于定義取值范圍有限的類型划纽。Solidity 中Enum可以和整形顯式的相互轉(zhuǎn)換,整形再轉(zhuǎn)換成enum時(shí)锌畸,編譯器/EVM會(huì)檢查取值范圍阿浓,如果范圍有誤則會(huì)產(chǎn)生一個(gè)錯(cuò)誤。 下面是一個(gè)例子:

pragma solidity ^0.4.23;

contract EnumTest {
    
    event UintValue(uint value);
    event EnumValue(Status status);
    
    enum Status {ACTIVE,SUSPENDED}
    
    function enumTest() public {
        Status s1 = Status.ACTIVE;
        //0 will be emited
        emit UintValue(uint(s1));
        
        Status s2 = Status(1);
        //1 will be emited
        emit EnumValue(s2);
        
        //Next line will get an compile time error for 2 is out of range
        //Status s2 = Status(2);
        
        uint x = 4 - 4;
        Status s3 = Status(x);
        //0 will be emited
        emit EnumValue(s3);

        // x = 4 - 2;
        //The next line will get an run time error for x is out of range
        // Status s4 = Status(x);
    }  
}

Function Types

函數(shù)類型也是值類型的一種蹋绽,和C語言中的函數(shù)指針類似,用于指向一個(gè)函數(shù)筋蓖,可以用于實(shí)現(xiàn)回掉等功能卸耘。函數(shù)類型的細(xì)節(jié)會(huì)在后續(xù)文章中單獨(dú)描述。

參考資料

solidity官方文檔
參考代碼

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末粘咖,一起剝皮案震驚了整個(gè)濱河市蚣抗,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖翰铡,帶你破解...
    沈念sama閱讀 210,914評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件钝域,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡锭魔,警方通過查閱死者的電腦和手機(jī)例证,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來迷捧,“玉大人织咧,你說我怎么就攤上這事∧铮” “怎么了笙蒙?”我有些...
    開封第一講書人閱讀 156,531評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長庆锦。 經(jīng)常有香客問我捅位,道長,這世上最難降的妖魔是什么搂抒? 我笑而不...
    開封第一講書人閱讀 56,309評(píng)論 1 282
  • 正文 為了忘掉前任艇搀,我火速辦了婚禮,結(jié)果婚禮上燕耿,老公的妹妹穿的比我還像新娘中符。我一直安慰自己,他們只是感情好誉帅,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評(píng)論 5 384
  • 文/花漫 我一把揭開白布淀散。 她就那樣靜靜地躺著,像睡著了一般蚜锨。 火紅的嫁衣襯著肌膚如雪档插。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,730評(píng)論 1 289
  • 那天亚再,我揣著相機(jī)與錄音郭膛,去河邊找鬼。 笑死氛悬,一個(gè)胖子當(dāng)著我的面吹牛则剃,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播如捅,決...
    沈念sama閱讀 38,882評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼棍现,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了镜遣?” 一聲冷哼從身側(cè)響起己肮,我...
    開封第一講書人閱讀 37,643評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后谎僻,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體娄柳,經(jīng)...
    沈念sama閱讀 44,095評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評(píng)論 2 325
  • 正文 我和宋清朗相戀三年艘绍,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了赤拒。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,566評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡鞍盗,死狀恐怖需了,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情般甲,我是刑警寧澤肋乍,帶...
    沈念sama閱讀 34,253評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站敷存,受9級(jí)特大地震影響墓造,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜锚烦,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評(píng)論 3 312
  • 文/蒙蒙 一觅闽、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧涮俄,春花似錦蛉拙、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至苞尝,卻和暖如春畸肆,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背宙址。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評(píng)論 1 264
  • 我被黑心中介騙來泰國打工轴脐, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人抡砂。 一個(gè)月前我還...
    沈念sama閱讀 46,248評(píng)論 2 360
  • 正文 我出身青樓大咱,卻偏偏與公主長得像,于是被迫代替她去往敵國和親注益。 傳聞我的和親對(duì)象是個(gè)殘疾皇子徽级,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評(píng)論 2 348

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