前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >从零构建以太坊(Ethereum)智能合约到项目实战——学习笔记10

从零构建以太坊(Ethereum)智能合约到项目实战——学习笔记10

作者头像
墨文
发布2020-02-28 14:54:09
5690
发布2020-02-28 14:54:09
举报
文章被收录于专栏:m0w3n

P57 、1-Solidity Types - 玩转 Solidity 数组 (Arrays)

学习目标

1、掌握Arrays的可变不可变的创建

2、深度理解可变数组和不可变数组之间的区别

3、二维数组

4、memory arrays的创建

5、bytes0~bytes32、bytes与byte[]对比

P58 、2-固定长度的数组(Arrays)系统讲解

固定长度类型数组的声明

代码语言:javascript
复制
pragma solidity ^0.4.4;

contract C{
    //数组的长度为5,数组里面的存储的值的类型为uint类型
    uint [5] T = [1,2,3,4,5];
}

通过Length方法获取数组长度遍历数组求总和

代码语言:javascript
复制
pragma solidity ^0.4.4;

contract C{
    //数组的长度为5,数组里面的存储的值的类型为uint类型
    uint [5] T = [1,2,3,4,5];
    
    //通过for循环计算数组内部的值的总和
    function numbers() constant public returns (uint){
        uint num = 0;
        for(uint i=0 ; i < T.length ; i++){
            num = num + T[i];
        }
        return num;
    }
}

尝试修改T数组的长度

代码语言:javascript
复制
pragma solidity ^0.4.4;

contract C{
    //数组的长度为5,数组里面的存储的值的类型为uint类型
    uint [5] T = [1,2,3,4,5];

    function setTLength(uint len) public {
        //报错
        T.length = len;
    }
}

PS:声明数组时,一旦长度固定,将不能在修改数组的长度。

尝试修改T数组内部值

代码语言:javascript
复制
pragma solidity ^0.4.4;

contract C{
    //数组的长度为5,数组里面的存储的值的类型为uint类型
    uint [5] T = [1,2,3,4,5];

    function setTIndex0Value() public {
        T[0] = 10;
    }
    
    //通过for循环计算数组内部的值的总和
    function numbers() constant public returns (uint){
        uint num = 0;
        for(uint i=0 ; i < T.length ; i++){
            num = num + T[i];
        }
        return num;
    }
}

PS:通过一个简单的试验可证明固定长度的数组只是不可修改它的长度,不过可以修改它内部的值,而bytes0~bytes32固定大小字节数组中,大小固定,内容固定,长度和字节均不可修改。

尝试通过push往T数组中添加值

代码语言:javascript
复制
pragma solidity ^0.4.4;

contract C{
    //数组的长度为5,数组里面的存储的值的类型为uint类型
    uint [5] T = [1,2,3,4,5];
    
    function pushUintToT() public {
        //报错
        T.push(6);
    }
}

PS:固定大小的数组不能调用push方法向里面添加存储内容。

P59 、3-可变长度的Arrays(上)

可变长度类型数组的声明

代码语言:javascript
复制
pragma solidity ^0.4.4;

contract C{
    //数组的长度为5,数组里面的存储的值的类型为uint类型
    uint [] T = [1,2,3,4,5];
    
    //通过for循环计算数组内部的值的总和
    function T_Length() constant returns(uint) {
        return T.length;
    }
}

通过Length方法获取数组长度遍历数组求总和

代码语言:javascript
复制
pragma solidity ^0.4.4;

contract C{
    //数组的长度为5,数组里面的存储的值的类型为uint类型
    uint [] T = [1,2,3,4,5];
    
    //通过for循环计算数组内部的值的总和
    function numbers() constant public returns (uint){
        uint num = 0;
        for(uint i=0 ; i < T.length ; i++){
            num = num + T[i];
        }
        return num;
    }
}

尝试修改T数组的长度

代码语言:javascript
复制
pragma solidity ^0.4.4;

contract C{
    //数组的长度为5,数组里面的存储的值的类型为uint类型
    uint [] T = [1,2,3,4,5];
    
    function setTLength(uint len) public {
        T.length = len;
    }
    function TLength() constant returns(uint){
        return T.length;
    }
}

PS:对可变长度的数组而言,可随时通过length修改数组的长度。

尝试通过push往T数组中添加值

代码语言:javascript
复制
pragma solidity ^0.4.4;

contract C{
    //数组的长度为5,数组里面的存储的值的类型为uint类型
    uint [] T = [1,2,3,4,5];
    
    function T_Length() constant public returns (uint){
        return T.length;
    }

    function pushUintToT() public {
        T.push(6);
    }
    
    //通过for循环计算数组内部的值的总和
    function numbers() constant public returns (uint){
        uint num = 0;
        for(uint i=0 ; i < T.length ; i++){
            num = num + T[i];
        }
        return num;
    }
}

PS:当往里面增加一个值,数组的个数就会加1,当求和时也会将新增的数字加起来。

P60 、4-可变长度的Arrays(下)

代码语言:javascript
复制
pragma solidity ^0.4.4;

contract C{
    uint [] T = new uint[](5);
    
    function C(){
        for(uint i=0;i<5;i++){
            T[i] = i+1;
        }
        for(i=0;i<5;i++){
            T.push(i+1);
        }
    }
    
    //通过for循环计算数组内部的值的总和
    function numbers() constant public returns (uint){
        uint num = 0;
        for(uint i=0 ; i < T.length ; i++){
            num = num + T[i];
        }
        return num;
    }
}

P61 、5-Solidity 二维数组

P62 、6-创建 Memory Arrays P63 、7-数组字面量 Array Literals 内联数组 Inline Arrays P64 、8-创建固定大小字节数组/可变大小字节数组 P65 、Solidity Types - 枚举(Enums) P66 、Solidity Types - Solidity 结构体(Structs) P67 、Solidity Types - Solidity 字典/映射(Mappings) P68 、集资(CrowdFunding)智能合约(Smart Contract)综合案例 P69 、单位(Units) 和 全局变量(Globally Available Variables) P70 、1-Solidity 元组(Tuples)- 什么是元组,元组能做什么 P71 、2-Solidity 元组(Tuples)的使用 P72 、1-truffle framework初体验 - 如何编写智能合约

truffle官网:https://truffleframework.com/

开发环境为:ubuntu

先安装nodejs,安装完查看版本

代码语言:javascript
复制
node --version
v10.12.0

安装truffle框架

代码语言:javascript
复制
# npm install -g truffle
# truffle version
Truffle v5.0.1 (core: 5.0.1)
Solidity v0.5.0 (solc-js)
Node v10.12.0

P73 、2-建立简易的加密代币 P74 、3-通过zeppelin-solidity建立标准代币部落币「P 、BLC」

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-01-31 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
区块链
云链聚未来,协同无边界。腾讯云区块链作为中国领先的区块链服务平台和技术提供商,致力于构建技术、数据、价值、产业互联互通的区块链基础设施,引领区块链底层技术及行业应用创新,助力传统产业转型升级,推动实体经济与数字经济深度融合。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档