【Solidity学习笔记】从Hello world开始认识Solidity

从最简单的智能合约代码Hello world开始:

pragma solidity ^0.4.17;
contract hello {
    string greeting;
    function hello(string _greeting) public {
        greeting = _greeting;
    }
    function say() constant public returns (string) {
        return greeting;
    }
}
1、版本声明

pragma solidity 0.4.17;

  • 第一行代码是必须的,否则编译器将不知道该如何选择编译器,以及编译器版本。
  • pragma是关键词,代表程序开始,solidity 代表本智能合约是由Solidity语言所撰写。
  • 0.4.17代表的是编译器版本。
  • pragma 是 pragmatic information 的简称,solidity 中沿用 C ,C++ 等中的编译指令概念,用于告知编译器 如何 编译。

注意:从0.4.9起可以在前面不打^,0.4.8/0.4.7等版本还是需要打^,编译器版本向下兼容。

2、定义合约名称

contract hello {
...
}

Solidity中Contract和面向对象语言中的类很相像。有带持久数据的变量,以及能改变这些变量的function。在不同的Contract实例中调用一个function,将会执行一个在EVM(以太坊虚拟机)中的function调用。

  • 由此可见,Solidity中的智能合约和传统面向对象语言中的类很相像,因此有构造函数,有继承,有变量,
    有function,也有抽象类等等传统概念;
  • 由Solidity所写的智能合约,经过编译后就会由EVM来部署执行;
  • Solidity语言是一种类JS的语言,因此很多编码规范和JS很相似。
3、定义状态变量

string greeting;

  • 定义一个字符串变量,在合约中也称状态变量。
  • Solidity是一个静态类型语言,因此每个变量在使用前都需要定义它的类型,uint/int/string/var
4、定义构造函数

function hello(string _greeting) public {
...
}

  • 这是合约的构造函数,与合约名(类名)同名,类似php早期版本的构造函数;
  • 参数为string类型变量,public为函数作用域修饰符,在写法上与php不同,在Solidity中是写在函数的参数后面。
  • 关于编码风格,greeting = _greeting;鼓励在操作符中有一个空格。
  • 补充注意:合约在创建时调用构造函数,之后调用合约方法时,不再运行构造函数。
5、定义其它业务逻辑方法

function say() constant public returns (string) {
...
}

函数名后面带上constant,即为常函数,这类函数将承诺自己不修改区块链上任何状态。
访问器(Accessor)方法默认被标记为constant。当前编译器并未强制一个constant的方法不能修改状态。但建议大家对于不会修改数据的标记为constant。

更多学习可参考:http://solidity-cn.readthedocs.io/zh/develop/introduction-to-smart-contracts.html

你可能感兴趣的:(【Solidity学习笔记】从Hello world开始认识Solidity)