以太坊solidity学习记录(五)函数入门

本文是关于以太坊Solidity编程的学习记录,涵盖了函数重载、传入参数、返回参数、变量作用域、constant修饰符、构造函数、modifier函数、简单继承、修饰符权限、getter函数以及合约销毁等多个关键知识点,通过实例解析了每个概念的使用和特点。
摘要由CSDN通过智能技术生成

个人目录

以太坊solidity学习记录(一)新版在线remix编译器的使用(2020.4.27)
以太坊solidity学习记录(二)基础操作整理
以太坊solidity学习记录(三)基础数据操作
以太坊solidity学习记录(四)地址与交易
以太坊solidity学习记录(五)函数入门
以太坊solidity学习记录(六)内存与结构体

1.函数重载

结论:
1.函数重载是指函数命名相同,但需要满足以下两个条件之一
a.函数传入参数类型不同
b.函数传入参数数量不同
2.如果函数多个参数都匹配,那么会报错
3.address因为实际存储的也是uint160
代码

pragma solidity ^0.4.0;


contract funtest{
   
    
    
    /*function fun0() {
        
    }
    
    
    function fun0() {
        
    }*/
      uint public test= 0;
      
    function fun1(uint num1,uint num2) {
   
        test = 10;
    }
    
    
    function fun1(uint num1) {
   
        test = 20;
    }
    
    
    function fun2(uint a) {
   
        test = 100;
    }
    
    
    function fun2(string a) {
   
         test = 200;
    }
    
    
    
    function fun3(address a) {
   
        test=1000;
    }
    
    
    function fun3(uint160 a){
   
        test=2000;
    }
    
    
    
    
    function fun4(uint8 a){
   
         test=10000;
    }
    
    
    function fun4(uint16 a){
   
        test=20000;
    }
    
    
    
    
    function fun1test() public view returns(uint){
   
        fun1(1,2);
        return test;
    }
    
     function fun2test() public view returns(uint){
   
        fun2('asdasd');
        return test;
    }
    
    function fun3test() public view returns(uint){
   
        fun3(0x2e805eC48BdFBc458e7446058F94a315896A1cF6);
        //仅使用address类型,可以运行并运行address参数的重载函数
        return test;
    }
    
    //function fun3test2() public view returns(uint160){
   
        //uint160  如果转化成uint160类型并运行,那么报错          
        //temp=uint160(0x2e805eC48BdFBc458e7446058F94a315896A1cF6);
        //fun3(temp);
        //return temp;
    //}
    
    
    
    
    function fun4test() public view returns(uint){
   
        fun4(256);
        return test;
    }
   
    
    function reset() public{
   
        test = 0;
    }
    

}

运行结果
在这里插入图片描述

2.函数传入参数

结论:
1.可以直接对传入参数里面的命名来进行对应命名。这样可以调整顺序
2.格式
函数名({类型1:value1,类型2:value2,…,类型n:valuen})需要打{},而且等号(=)换成冒号(:)
3.使用时必须传入所有参数,否则报错

contract nametest{
   
    
    uint public num;
    string public teststring;
    
    function setvalue(uint num1,string teststring1){
   
        num=num1;
        teststring = teststring1;
    }
    
    function test1(){
   
        setvalue(1,'a');
    }
    
    function test2(){
   
        setvalue({
   num1:1,teststring1:'a'});
    }
    
    function test3(){
   
        setvalue({
   teststring1:'a',num1:1});
    }
    
    //function wrongtest4(){
   
    //    setvalue({teststring1:'a'});
    //}
    
}

运行结果:
其他的可以自行点击test1,test2,test3看结果
在这里插入图片描述

3.函数返回参数

结论:
1.solidity可以有多个返回值,可以命名(类型1 value1,类型2 value2,....,类型n valuen),可以直接赋值,如value1=111;,赋值之后return里面对应参数也会修改,可以不用return。
2.return语句后面可以接表达式,如uint类型 return (value1+value2, value1*value2);
3.可以直接接具体数值,如uint类型 return (1+2,1*2,'teststring');

代码

contract returntest{
   
    function test1() public view returns(uint8 num1,uint8 num2,string teststring){
   
        num1=1;
        num2=2;
        teststring='hello';//直接赋值,最后可以看到返回值就是赋的值
    }
    
    function test2() public view returns(uint8 num1,uint8 num2,string teststring){
   
        return (10,20,'hello2');//可以直接进行返回
    }
    
    function test3() public view returns(uint8 num1,uint8 num2,string teststring){
   
        num1=1;
        num2=2;
        teststring='hello';
        return (10,20,'hello2');//如果又赋值又返回,那么以最后为准
    }
    
    function test4() public view returns(uint8 num1,uint8 num2,string teststring1,string teststring2){
   
        teststring1='testnb1';
        teststring2='testnb2';
        //return (10+20,10*20,'hello2',teststring1+teststring2);//solidity不支持string直接连接
        return (10+20,10*20,teststring1,teststring2);
    
  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值