美文网首页
solidity基本语法总结

solidity基本语法总结

作者: 攻城老狮 | 来源:发表于2020-07-25 14:27 被阅读0次
  1. solidity的三种修饰符

view: 可以自由调用,因为它只是“查看”区块链的状态而不改变它
pure: 也可以自由调用,既不读取也不写入区块链
payable: 常常用于将代币发送给合约地址。

  1. 布尔运算
buer.png
  1. 整型特性与运算
整型.png
  1. 位运算
位运算.png

注意:

  • 在做相关的运算时,需要注意是否会溢出的问题;除零等异常问题
  • 在solidity中,字面值会先计算再赋值,为了更好的保留精度
  1. 固定长度的字节数组(静态)
固定长度字节数组.png
  1. 固定长度字节数组的扩充和压缩
固定长度字节数组扩充压缩.png
  1. 动态的字节数组
mmapping2.png
  1. 固定长度的字节数组与动态数组的转换
固定长度字节数组与动态数组转换.png
  1. 修改string类型的数据


    string.png

说明:
* 字符串可以使用单引号或者双引号
* 中文在string中使用utf8的编码方式存储,占用3个byte
* 特殊字符占1个byte

  1. 将动态bytes字节数组转换为string类型
动态bytes转换维string.png
  1. 将固定长度的字节数组转换为string类型
固定长度字节数组转换string.png
  1. 定长数组
定长数组.png
  1. 动态数组
动态数组.png
  1. 二维数组
    说明:
    1. solidity的二维数组与其他语言不同,[2] [3]表示3行2列,而其他语言为2行3列。
    2. 在遍历数组的时候又会转变成普通的存储情况。比较奇怪。
    3. 二维动态数组与一维数组类似,可以改变其数组长度。
二维数组.png
  1. 数组字面值
数组字面值.png
  1. 结构体的两种初始化方法
pragma solidity ^0.4.17;

contract StructTest{
    struct student{
        uint id;
        string name;
        mapping(uint=>string) map;
    }
    //默认为storage类型,只能通过storage类型操作结构体中的mapping类型数据
    student storageStu; 
    //mapping类型可以不用在定义时候赋值,而其他类型不赋值则报错
    function init() pure public returns(uint,string){
        student memory stu = student(110,"yorick");
        return (stu.id,stu.name);
    }
    
    function init2() pure public returns(uint,string){
        student memory stu = student({name:"jerry",id:233});
        return (stu.id,stu.name);
    }
    
    function init3() public returns(uint,string,string){
        student memory stu = student({name:"tom",id:666});
        //通过storage类型的变量操作结构体中的mapping
        storageStu = stu;
        storageStu.map[1] = "helloworld";
        return (storageStu.id,storageStu.name,storageStu.map[1]);
    }
    //形参为结构体变量时,为memory类型,并且必须使用internal修饰函数。赋值时也需要指定为memory,否则报错
    function test(student stu) internal {
        //error
        //student s = stu;
    }
}

总结:

  1. 动态bytes的初始化
    new bytes() 可以获取bytes的长度,内容。也可以修改长度和内容。
  2. string
    不能够直接获取长度和内容,需要转换为bytes。注意其中中文占3个字节。
  3. 固定长度字节数组之间的转换
    缩小截断右边内容,扩充在右侧补零。
  4. 固定长度字节数组和动态字节数组之间的转换
    可以使用for循环动态添加元素
  5. 将动态bytes转换为string
    可以直接使用string做强制类型转换。
  6. 将固定长度的字节数组转换为string
    可以先将其转换为动态字节数组,再用string做强制类型转换。

相关文章

  • solidity基本语法总结

    solidity的三种修饰符 view: 可以自由调用,因为它只是“查看”区块链的状态而不改变它pure: 也可以...

  • ETH智能合约测试

    ETH的智能合约一般用Solidity语言编写,懂点基本solidity语法会更好地测试 测试中需要用到的工具: ...

  • solidity教程-简介

    title: solidity教程-简介tags: solidity,eth Solidity是一种语法类似Ja...

  • solidity基本语法 - 值类型

    Value Types 值类型是指当传递这些类型时,传递的是类型的取值。 bool bool类型的取值位true,...

  • solidity 基本语法 - 引用类型

    引用类型 引用类型和值类型相对,在传递时,并不拷贝一份新的数据,而是传递是指向同一份数据的引用。下面看一个例子: ...

  • solidity基本语法学习

    view / pure 的区别view的作用和constant一模一样,可以读取状态变量但是不能改;pure则更为...

  • TW homework-1

    Markdown基本语法总结

  • Solidity概述

    Solidity概述 Solidity 是用于编写智能合约(smart contract)的语言,从语法上和pyt...

  • 基本语法总结

    五大成分: 主语:谓语动词前的成分谓语:实意动词、系动词、助动词(表明时态)、情态动词宾语:在实意动词之后的成分表...

  • 零基础学习以太坊开发-solidity开发环境安装

    介绍 Solidity是一种语法类似JavaScript的高级语言。前面已经用Solidity演示过智能合约代码。...

网友评论

      本文标题:solidity基本语法总结

      本文链接:https://www.haomeiwen.com/subject/traplktx.html