solidity学习笔记01-基础知识

solidity学习笔记01-基础知识

最近在学习solidity语言,感谢b站先锋教育的视频和郑建勋老师的讲解,参考视频:链接: https://www.bilibili.com/video/BV1St411a7Pk?p=1.
对应视频:P1-P7

基础知识这块知识点很少,也学了一段时间了,老师讲的细节有所遗忘,学习笔记做的也不是很好,所以直接把学习代码粘过来,之后的笔记会有一些注释。

1.Helloword:view+pure

下面展示 Helloworld.sol

pragma solidity ^0.4.0;

contract Helloworld {
     
    
    string Myname = "vae";
    
    //view:不能修改状态变量,即不能修改区块链上的代码;只能读取状态变量
    function getName() view public returns(string){
     
        
        return Myname;
    }
    
    function setName(string _newName) public {
     
        
        Myname = _newName;
    }
    //pure(永久):读都不会读取状态变量,可以理解为传进去在传出来,不消耗gas
    function pureTest(string _newName) pure returns(string) {
     
        
        return _newName;
    }
}
  1. 注意函数的声明格式,一些关键字(还是叫标识符来着,傻傻分不清楚)比如view、public等在定义时如果没添加编译不会报错,而且会提醒你,并且不影响程序运行。
  2. 关键字pure:不能修改状态变量,即不能修改区块链上的代码;只能读取状态变量
  3. 关键字view:读都不会读取状态变量,可以理解为传进去在传出来,不消耗gas
    补充(僵尸大战):如果一个 view 函数在另一个函数的内部被调用,而调用函数与 view 函数的不属于同一个合约,也会产生调用成本。这是因为如果主调函数在以太坊创建了一个事务,它仍然需要逐个节点去验证。所以标记为 view 的函数只有在外部调用时才是免费的。

2.Boolean

下面展示 Boolean.sol
这块比较简单,和之前学的语言基本没差,大体看一下就行;另外我的代码和老师的大体一致,有一些一看就懂的没往上写,也有一些做了点小修改。

pragma solidity ^0.4.0;

contract BooleanTest{
     
    //1.初始化时不赋值,默认false
    bool _a = false;
    bool _b = true;
    int num1 = 100;
    int num2 = 200;
    
    //一些简单判断
    function getBool() returns(bool){
     
        
        return _a;
        
    }
    
    function getBool2() returns(bool){
     
        
        return !_a;
    }
    
    function equal(int _n1,int _n2) pure returns(bool){
     
        
        return _n1 == _n2;
    }
    
    function and(bool _b1,bool _b2) pure returns(bool){
     
        
        return _b1 && _b2;
    }
    
    function or(bool _b1,bool _b2) returns(bool){
     
        
        return _b1 ||_b2;
    }
    
}

3.Math

下面展示 Math.sol
本代码讲解整型特性与运算、底层位运算、整数溢出与异常处理、整型字面量。
整型字面量:solidity在计算过程中的中间值,支持任意的精度,如小数。不会发生溢出操作。
只有在将计算结果赋值给特定类型的时候,才会发生截断溢出等操作。

pragma solidity ^0.4.0;

//本代码讲解整型特性与运算、底层位运算、整数溢出与异常处理、整型字面量
contract math{
     
    
    uint num1 = 3;//int256
    uint num2 = 4;//uint256
    
    function add(uint a,uint b) pure public returns(uint){
     
        return a+b;
    }
    
    uint8 a=3;
    uint8 b=4;
    //位运算时a,b的二进制数进行位运算
    function and_B() view public returns(uint){
     
        
        return a & b;
    }
     function or_B() view public returns(uint){
     
        
        return a | b;
    } 
    function no_B() view public returns(uint){
     
        
        return -b;
    } 
    function yihuo_B() view public returns(uint){
     
        
        return a ^ b;
    }
    function lm_B() view public returns(uint){
     
        
        return a <<1;
    } 
    function rm_B() view public returns(uint){
     
        
        return a >>1;
    }
    
    //溢出
    function flow(uint8 _a) pure public returns(uint8){
     
        
        _a++;
        return _a;
    }
    //整型字面量
    function intergerTest() pure public returns(uint){
     //整形字面量

        uint num = (2**900+1)-2**900;
        return num;
    }
}

再次感谢郑建勋老师的讲解。

你可能感兴趣的:(敲呀敲代码,区块链)