solidity语言学习——(一)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/The_Reader/article/details/83063180

Solidity简介

Solidity是一门编写智能合约的高级语言,它的语法接近于javaScript,是一种面向对象的语言,以太坊做区块链2.0的典型代表,Solidity在以太坊中是撰写智能合约最受欢迎的语言,因此今天我们就和大家介绍一下这个作为智能合约开发中最主流的语言。

Solidity是运行在EVM(ethereum虚拟机)上的一门语言。它虽然跟javaScript很相似,但是呢,它作为编写一种只运行在网络中去中心化合约的高级语言,又有着很多不同之处(Address类型,payable关键字,分布式特点等等。)。

那么让我们抓紧学起来吧

在学习一门语言开始之处,必须得让它helloworld一下,否则就久违这门语言了。

那么它的开发环境是哪个ide呢,介于学习之初,那么就从特简单方便的ide开始。在线的浏览器编译运行就可以。

百度搜索remix。

如果你点进去发现地址栏只是http://remix.ethereum.org/#optimize=false这样的,而不是http://remix.ethereum.org/#optimize=false&version=soljson-v0.4.25+commit.59dbf8f1.js

那么恭喜你,网络不好,入坑了,你可以重新进,多进入几次也许可以,或者翻墙进吧。

进入成功后的

红色笔圈的是代码区,黄色荧光笔圈的是控制台。 

那么让我们来个Hello World吧

Hello World

代码为:

pragma solidity ^0.4.16;

contract Hello_World{
    function Hello()returns(string){
        return ("Hello world");
    }
}

 操作为:

 

这就ok了, 虽然说这样是看不到效果的,但是这个合约发不出去,它就代表着,这是一种规范,协议。

 还有就是可以看到右上角account中的eth值会改变,由100eth变为99999...。这就说明gas的产生。

solidity注释

单行注释为:“//”;

多行注释为:“/**/”;

文档注释为:“///”;

值类型与引用类型

值传递:就是复制,并不对对原数据进行更改,相信学过一门语言的同学,都知道传参时为什么有点要用指针有的要用值了吧。这里一个意思的。

引用传递:它就像是一个文件创建了一个快捷方式,可以操作可以更改。

值类型:整型,布尔,定长数组,地址,枚举,函数。

引用类型:不定长数组,字符串,数组,结构体。

注:在有些时候,一些复杂的数据类型在copy时也会占用很大的内存,这时就该使用引用类型。

整形

整形跟其他语言一样分为有符号与无符号,int与uint

但要注意的是,solidity整形的步长为8,因为占用内存的大小的原因,并也与手续费gas挂钩。所以这个整形内存分配分的比较细。也就是说,你定义一个uint8与定义一个uint16占用的内存大小不一样,收取的手续费也是不一样的,当然uint16收取的比较多,所以在solidity这门语言中,在已经确定一个整型数据的上限后,定义整型时,最好定义与其大小相近的那个类型,比如说:

pragma solidity ^0.4.16;

contract Hello_World{
   
   function Hello0(uint8 a,uint8 b)view returns(uint8){
       return(a+b);
   }
   
    function Hello1(uint8 a,uint8 b) view returns(uint8){
        return (a-b);
    }
}

我要定义一个uint8,值为255,如果我要对这个数据操作让其加1或者以上,那么定义uint8的话,就会存在内存上溢,会出错,结果会为0.这样的话就不合适.这样的话就定义它为uint16,如果它的操作在256以内,则可以定义为uint8.

还有就是结果4,是因为数据加上5或者以上的数减去这个类型的上限而得出的结果。

还有就是下溢,当定义的数据为uint8 值为0,而又对它操作让其减1,这样的话是不是就存在问题。这个问题就是内存下溢。会出现错误的结果,结果为255.它是因为uint8上限减1得到的。

solidity中,它不支持8进制。

猜你喜欢

转载自blog.csdn.net/The_Reader/article/details/83063180