国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

智能合約語言Solidity教程系列1 - 類型介紹

andycall / 2751人閱讀

摘要:本文首發(fā)于深入淺出區(qū)塊鏈社區(qū)原文鏈接智能合約語言教程系列地址類型介紹原文已更新,請讀者前往原文閱讀現(xiàn)在的中文文檔,要么翻譯的太爛,要么太舊,決定重新翻譯下。枚舉類型應(yīng)至少有一名成員。

本文首發(fā)于深入淺出區(qū)塊鏈社區(qū)
原文鏈接:智能合約語言 Solidity 教程系列2 - 地址類型介紹原文已更新,請讀者前往原文閱讀

現(xiàn)在的Solidity中文文檔,要么翻譯的太爛,要么太舊,決定重新翻譯下。
尤其點名批評極客學(xué)院名為《Solidity官方文檔中文版》的翻譯,機器翻譯的都比它好,大家還是別看了。

寫在前面

Solidity是以太坊智能合約編程語言,閱讀本文前,你應(yīng)該對以太坊、智能合約有所了解,
如果你還不了解,建議你先看以太坊是什么
Solidity教程會是一系列文章,本文是第一篇:介紹Solidity的變量類型。
Solidity 系列完整的文章列表請查看分類-Solidity。

本文前半部分是參考Solidity官方文檔(當前最新版本:0.4.20)進行翻譯,后半部分是結(jié)合實際合約代碼實例說明類型的使用(僅針對專欄訂閱用戶)。

類型

Solidity是一種靜態(tài)類型語言,意味著每個變量(本地或狀態(tài)變量)需要在編譯時指定變量的類型(或至少可以推倒出類型)。Solidity提供了一些基本類型可以用來組合成復(fù)雜類型。

Solidity類型分為兩類:

值類型(Value Type) - 變量在賦值或傳參時,總是進行值拷貝。

引用類型(Reference Types)

值類型(Value Type)

值類型包含:

布爾類型(Booleans)

整型(Integers)

定長浮點型(Fixed Point Numbers)

定長字節(jié)數(shù)組(Fixed-size byte arrays)

有理數(shù)和整型常量(Rational and Integer Literals)

字符串常量(String literals)

十六進制常量(Hexadecimal literals)

枚舉(Enums)

函數(shù)類型(Function Types)

地址類型(Address)

地址常量(Address Literals)

函數(shù)類型及地址類型(Address)有多帶帶的博文,請點擊查看。
布爾類型(Booleans)

布爾(bool):可能的取值為常量值truefalse

布爾類型支持的運算符有:

!邏輯非

&& 邏輯與

|| 邏輯或

== 等于

!= 不等于

注意:運算符&&||是短路運算符,如f(x)||g(y),當f(x)為真時,則不會繼續(xù)執(zhí)行g(shù)(y)。

整型(Integers)

int/uint: 表示有符號和無符號不同位數(shù)整數(shù)。支持關(guān)鍵字uint8uint256 (以8步進),
uintint 默認對應(yīng)的是 uint256int256

支持的運算符:

比較運算符: <=, < , ==, !=, >=, > (返回布爾值:true 或 false)

位操作符: &,|,^(異或),~(位取反)

算術(shù)操作符:+,-,一元運算-,一元運算+,,/, %(取余數(shù)), **(冪), << (左移位), >>(右移位)

說明:

整數(shù)除法總是截斷的,但如果運算符是字面量(字面量稍后講),則不會截斷。

整數(shù)除0會拋異常。

移位運算的結(jié)果的正負取決于操作符左邊的數(shù)。x << y 和 x 2*y 是相等, x >> y 和 x / 2*y 是相等的。

不能進行負移位,即操作符右邊的數(shù)不可以為負數(shù),否則會拋出運行時異常。

注意:Solidity中,右移位是和除等價的,因此右移位一個負數(shù),向下取整時會為0,而不像其他語言里為無限負小數(shù)。

定長浮點型(Fixed Point Numbers)

注意:定長浮點型 Solidity(發(fā)文時)還不完全支持,它可以用來聲明變量,但不可以用來賦值。

fixed/ufixed: 表示有符號和無符號的固定位浮點數(shù)。關(guān)鍵字為ufixedMxNufixedMxN
M表示這個類型要占用的位數(shù),以8步進,可為8到256位。
N表示小數(shù)點的個數(shù),可為0到80之間

支持的運算符:

比較運算符: <=, < , ==, !=, >=, > (返回布爾值:true 或 false)

算術(shù)操作符:+,-,一元運算-,一元運算+,*,/, %(取余數(shù))

注意:它和大多數(shù)語言的float和double不一樣,M是表示整個數(shù)占用的固定位數(shù),包含整數(shù)部分和小數(shù)部分。因此用一個小位數(shù)(M較小)來表示一個浮點數(shù)時,小數(shù)部分會幾乎占用整個空間。

定長字節(jié)數(shù)組(Fixed-size byte arrays)

關(guān)鍵字有:bytes1, bytes2, bytes3, ..., bytes32。(以步長1遞增)
byte代表bytes1。

支持的運算符:

比較符: <=, <, ==, !=, >=, > (返回bool)

位操作符: &, |, ^ (按位異或),~(按位取反), << (左移位), >> (右移位)

索引(下標)訪問: 如果x是bytesI,當0 <= k < I ,則x[k]返回第k個字節(jié)(只讀)。

移位運算和整數(shù)類似,移位運算的結(jié)果的正負取決于操作符左邊的數(shù),且不能進行負移位。
如可以-5<<1, 不可以5<<-1

成員變量:
.length:表示這個字節(jié)數(shù)組的長度(只讀)。

變長(動態(tài)分配大小)字節(jié)數(shù)組(Dynamically-sized byte array)

bytes:動態(tài)分配大小字節(jié)數(shù)組, 參見Arrays,不是值類型!

string:動態(tài)分配大小UTF8編碼的字符類型,參看Arrays。不是值類型!

根據(jù)經(jīng)驗:
bytes用來存儲任意長度的字節(jié)數(shù)據(jù),string用來存儲任意長度的(UTF-8編碼)的字符串數(shù)據(jù)。
如果長度可以確定,盡量使用定長的如byte1到byte32中的一個,因為這樣更省空間。

有理數(shù)和整型常量(Rational and Integer Literals)
也有人把Literals翻譯為字面量

整型常量是有一系列0-9的數(shù)字組成,10進制表示,比如:8進制是不存在的,前置0在Solidity中是無效的。

10進制小數(shù)常量(Decimal fraction literals)帶了一個., 在.的兩邊至少有一個數(shù)字,有效的表示如:1., .11.3.

科學(xué)符號也支持,基數(shù)可以是小數(shù),指數(shù)必須是整數(shù), 有效的表示如: 2e10, -2e10, 2e-10, 2.5e1

數(shù)字常量表達式本身支持任意精度,也就是可以不會運算溢出,或除法截斷。但當它被轉(zhuǎn)換成對應(yīng)的非常量類型,或者將他們與非常量進行運算,則不能保證精度了。
如:(2*800 + 1) - 2*800的結(jié)果為1(uint8整類) ,盡管中間結(jié)果已經(jīng)超過計算機字長。另外:.5 * 8的結(jié)果是4,盡管有非整形參與了運算。

只要操作數(shù)是整形,整型支持的運算符都適用于整型常量表達式。
如果兩個操作數(shù)是小數(shù),則不允許進行位運算,指數(shù)也不能是小數(shù)。

注意:
Solidity對每一個有理數(shù)都有一個數(shù)值常量類型。整數(shù)常量和有理數(shù)常量從屬于數(shù)字常量。所有的數(shù)字常表達式的結(jié)果都屬于數(shù)字常量。所以1 + 2和2 + 1都屬于同樣的有理數(shù)的數(shù)字常量3

警告:
整數(shù)常量除法,在早期的版本中是被截斷的,但現(xiàn)在可以被轉(zhuǎn)為有理數(shù)了,如5/2的值為 2.5

注意:
數(shù)字常量表達式,一旦其中含有常量表達式,它就會被轉(zhuǎn)為一個非常量類型。下面代碼中表達式的結(jié)果將會被認為是一個有理數(shù):

uint128 a = 1;
uint128 b = 2.5 + a + 0.5;

上述代碼編譯不能通過,因為b會被編譯器認為是小數(shù)型。

字符串常量

字符串常量是指由單引號,或雙引號引起來的字符串 ("foo" or "bar")。字符串并不像C語言,包含結(jié)束符,"foo"這個字符串大小僅為三個字節(jié)。和整數(shù)常量一樣,字符串的長度類型可以是變長的。字符串可以隱式的轉(zhuǎn)換為byte1,...byte32 如果適合,也會轉(zhuǎn)為bytes或string。

字符串常量支持轉(zhuǎn)義字符,比如n,xNN,uNNNN。其中xNN表示16進制值,最終轉(zhuǎn)換合適的字節(jié)。而uNNNN表示Unicode編碼值,最終會轉(zhuǎn)換為UTF8的序列。

十六進制常量(Hexadecimal literals)

十六進制常量,以關(guān)鍵字hex打頭,后面緊跟用單或雙引號包裹的字符串,內(nèi)容是十六進制字符串,如hex"001122ff"。
它的值會用二進制來表示。

十六進制常量和字符串常量類似,也可以轉(zhuǎn)換為字節(jié)數(shù)組。

枚舉(Enums)

在Solidity中,枚舉可以用來自定義類型。它可以顯示的轉(zhuǎn)換與整數(shù)進行轉(zhuǎn)換,但不能進行隱式轉(zhuǎn)換。顯示的轉(zhuǎn)換會在運行時檢查數(shù)值范圍,如果不匹配,將會引起異常。枚舉類型應(yīng)至少有一名成員。下面是一個枚舉的例子:

pragma solidity ^0.4.0;

contract test {
    enum ActionChoices { GoLeft, GoRight, GoStraight, SitStill }
    ActionChoices choice;
    ActionChoices constant defaultChoice = ActionChoices.GoStraight;

    function setGoStraight() {
        choice = ActionChoices.GoStraight;
    }

    // Since enum types are not part of the ABI, the signature of "getChoice"
    // will automatically be changed to "getChoice() returns (uint8)"
    // for all matters external to Solidity. The integer type used is just
    // large enough to hold all enum values, i.e. if you have more values,
    // `uint16` will be used and so on.
    function getChoice() returns (ActionChoices) {
        return choice;
    }

    function getDefaultChoice() returns (uint) {
        return uint(defaultChoice);
    }
}
代碼實例

通過合約代碼實例說明類型的使用,請訂閱區(qū)塊鏈技術(shù)查看。

參考視頻

我們也推出了目前市面上最全的視頻教程:深入詳解以太坊智能合約語言Solidity
目前我們也在招募體驗師,可以點擊鏈接了解。

參考文檔

Solidity官方文檔-類型

深入淺出區(qū)塊鏈 - 系統(tǒng)學(xué)習(xí)區(qū)塊鏈,打造最好的區(qū)塊鏈技術(shù)博客。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/24086.html

相關(guān)文章

  • 智能合約語言Solidity教程系列2 - 地址類型介紹

    摘要:地址類型的成員屬性及函數(shù)這里是地址類型相關(guān)成員的快速索引用來查詢賬戶余額,用來發(fā)送以太幣以為單位。因此,為了保證安全,必須檢查的返回值,如果交易失敗,會回退以太幣。 本文首發(fā)于深入淺出區(qū)塊鏈社區(qū)原文鏈接:智能合約語言 Solidity 教程系列2 - 地址類型介紹原文已更新,請讀者前往原文閱讀 Solidity教程系列第二篇 - Solidity地址類型介紹. Solidity 系列完...

    binaryTree 評論0 收藏0
  • 智能合約語言 Solidity 教程系列4 - 數(shù)據(jù)存儲位置分析

    摘要:狀態(tài)變量合約內(nèi)聲明的公有變量還有一個存儲位置是,用來存儲函數(shù)參數(shù),是只讀的,不會永久存儲的一個數(shù)據(jù)位置。稱這個為狀態(tài)改變,這也是合約級變量稱為狀態(tài)變量的原因。 本文首發(fā)于深入淺出區(qū)塊鏈社區(qū)原文鏈接:智能合約語言 Solidity 教程系列4 - 數(shù)據(jù)存儲位置分析原文已更新,請讀者前往原文閱讀 Solidity教程系列第4篇 - Solidity數(shù)據(jù)位置分析。 寫在前面 Solidity...

    Galence 評論0 收藏0
  • 智能合約語言Solidity教程系列5 - 數(shù)組介紹

    摘要:還需注意的一點是,定長數(shù)組,不能與變長數(shù)組相互賦值,我們來看下面的代碼無法編譯已經(jīng)計劃在未來移除這樣的限制。的變長數(shù)組,可以通過給賦值調(diào)整數(shù)組長度。的變長數(shù)組不支持。 本文首發(fā)于深入淺出區(qū)塊鏈社區(qū)原文鏈接:智能合約語言Solidity教程系列5 - 數(shù)組介紹原文已更新,請讀者前往原文閱讀 Solidity 教程系列第5篇 - Solidity 數(shù)組介紹。Solidity 系列完整的文章...

    draveness 評論0 收藏0
  • 區(qū)塊鏈技術(shù)學(xué)習(xí)指引

    摘要:引言給迷失在如何學(xué)習(xí)區(qū)塊鏈技術(shù)的同學(xué)一個指引,區(qū)塊鏈技術(shù)是隨比特幣誕生,因此要搞明白區(qū)塊鏈技術(shù),應(yīng)該先了解下比特幣。但區(qū)塊鏈技術(shù)不單應(yīng)用于比特幣,還有非常多的現(xiàn)實應(yīng)用場景,想做區(qū)塊鏈應(yīng)用開發(fā),可進一步閱讀以太坊系列。 本文始發(fā)于深入淺出區(qū)塊鏈社區(qū), 原文:區(qū)塊鏈技術(shù)學(xué)習(xí)指引 原文已更新,請讀者前往原文閱讀 本章的文章越來越多,本文是一個索引帖,方便找到自己感興趣的文章,你也可以使用左側(cè)...

    Cristic 評論0 收藏0
  • 智能合約語言Solidity教程系列3 - 函數(shù)類型

    摘要:本文首發(fā)于深入淺出區(qū)塊鏈社區(qū)原文鏈接智能合約語言教程系列函數(shù)類型原文已更新,請讀者前往原文閱讀教程系列第三篇函數(shù)類型介紹。函數(shù)類型函數(shù)也是一種類型,且屬于值類型。但以此相反,合約中函數(shù)本身默認是的,僅僅是當作類型名使用時默認是的。 本文首發(fā)于深入淺出區(qū)塊鏈社區(qū)原文鏈接:智能合約語言Solidity教程系列3 - 函數(shù)類型原文已更新,請讀者前往原文閱讀 Solidity 教程系列第三篇 ...

    qylost 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<