技术入门 | Solidity编程语言 : 布尔型和整型
1. HelloWorld
智能合约就像是一份合同一样,你书写的每个代码都是合同的内容。所以合约一经部署,合约内容就无法修改,好比你和别人签苹写了合同之后,是没法再修改的。这也是正是基于区块链不可篡改的特性。 在通常的编程语言中,一般会使用标准输出来打印“Hello World”,Solidity作为一门智能合约编程语言,是有别与一般的编程语言,他是基于以太坊,并且是用来编写“合约”的。所以这里不再使用“HelloWorld”作为示例,而是使用Solidity官网中的一个入门示例。
pragma solidity >=0.4.0 <0.6.0;
contract SimpleStorage {
uint storedData;
function set(uint x) public {
storedData = x;
}
function get() public view returns (uint) {
return storedData;
}
}
以上代码就是一个使用Solidity编写的名为SimpleStorage的合约。
- 第一行代码是用来指定Solidity的语言版本,pragma solidity是固定格式,后边加上版本号,版本号通过范围来确定的,即大等于0.4.0,小于0.6.0。在网上会经常看到^0.4.21这样的书写方式,这种格式是支持在0.5.2及之前的版本。比如在remix-ide环境中编写pragma solidity ^0.5.3,则会提示编译错误:browser/Untitled.sol:3:1: ParserError: Source file requires different compiler version (current compiler is 0.5.2+commit.1df8f40c.Emscripten.clang - note that nightly builds are considered to be strictly less than the released version。
- 第二代码创建名为SimpleStorage的合约。contract 是关键字,SimpleStorage为合约名称。这个类似于java的类定义一样,class Person{},比较容易理解。
- 第三行代码定了一个无符号整数storedData,这个状态变量将会保存在区块链上,好比写入数据库进行了持久化,什么时候都可以进行读取。
- 定义set方法,对状态变量storedData进行赋值,其中public是关键定,修饰set方法可以被合约外部调用。
- 定义get方法,返回状态变量storedData的值,对于返回值的书写稍有不同,关键字是returns,而不是return,另外返回值可以是多个,使用圆括号包起来。 这就是一个简单的Solidity编写的合约了,有编程经验的人很容易理解。
2. 布尔型和整型
2.1 布尔型
bool类型同其他语言一样,取值为true或false, 其运算操作有!、||、&&、!=、==,注意这里并没有|、&。pragma solidity >=0.4.22 <0.6.0; contract EgBool { bool isOne; bool isTwo; function operation() public { isOne = true; if (isOne){ // dosomething }
if (!isOne){ // dosomething }
if (isOne || isTwo ){ // dosomething }
if (isOne && isTwo ){ // dosomething }
if (isOne != isTwo ){ // dosomething }
if (isOne == isTwo ){ // dosomething } } }
2.2 整型
整型包含无符号uint和有符号int两种类型,每种类型有多种长度,比如uint8、uint64、int128等等,长度范围是8至256,相差8个长度,8,16,24,32…256。其中uint和uint256一样,int和int256一样。运算操作有比较、位操作和算术操作三种。- 比较操作:<= , < , == , != , >= , >。
- 位操作: &(与) , |(或) , ^ (异或), ~ (非)。
- 算术操作:+ , - , * , /, % , (乘方,求幂) ,<<(左移) , >>(右移)其中左移和右移操作,a<<b,可以理解为a乘以2的b次方,表示为a*2b,同理右移a>>b表示为a/2**b。
pragma solidity >=0.4.22 <0.6.0;
contract EgInt {
int i = 0;
int8 i8 = -1;
int256 i256 = 256; uint ui = 0;
uint ui8 = 1;
uint256 ui256 = 256;
function operation() public {
if ( i < i8 || i <= i8 || i == i8 || i != i8 || i > i8 || i >= i8 ){
//dosomeing
}
int a;
int b;
int c;
c = a & b;
c = a | b;
c = a ^ b;
c = ~ b;
c = a + b;
c = a - b;
c = a * b;
c = a / b;
c = a % b;
c = a << b;
c = a >> b;
//c = a**b;
uint d;
uint e;
uint f;
f = d**e;
//c = d**e;
}
}
注意:
- 有符号整数是不能够使用"**"操作。
- 有符号和无符号不能进行类型转换,不能同时参数运算,比如c = d + e。
作者:感谢HPB 蓝莲花团队整理供稿。
汪晓明博客: http://wangxiaoming.com/
汪晓明:HPB芯链创始人。十余年金融大数据、区块链技术开发经验,曾参与创建银联大数据。主创区块链教学视频节目《明说》30多期,编写了《以太坊官网文档中文版》,并作为主要作者编写了《区块链开发指南》,在中国区块链社区以ID“蓝莲花”知名。
위믹스3.0 최초의 DAO ‘원더다오’, 노드 카운슬 파트너 합류
위믹스3.0 최초의 DAO ‘원더다오’, 노드 카운슬 파트너 합류 l 탈중앙화 자율조직 형태로 결성…구성원 모두가 위믹스3.0 운영에 참여 가능l 스마트 컨트랙트 기반 모듈화 ...
[주간톡톡] 양의 탈을 쓴 늑대는 양일까? 늑대일까?
주간톡톡은 한주간의 블록체인 소식을 재구성해 독자들과 재미있게 이야기해보는 코너입니다. 이번주는 페이스북의 스테이블 코인 프로젝트 '디엠(Diem)'에 대해 알아보겠습니다. 그럼 ...
IBM, 블록체인 와인 추적 서비스 '빈어슈어(Assure)' 공개
IBM이 재배지부터 매장까지 와인 공급망을 추적할 수 있는 블록체인 기반 플랫폼을 공개했다.10일(현지시간) 발표에 따르면 IBM은 와인 모니터링 업체 e프로브넌스(eProven...