Flutter 之 Dart 基础 ----- 函数

前言

上一篇我们了解到Dart的变量声明方式和区别以及一些常见操作,也都比较的基础。我们今天再来讲一讲。

在Dart语言中,函数(方法)相当于一个对象。定义函数的方法,也跟Java非常类似,
不过也有一些区别。比如返回类型跟参数类型可以省略,不过我自己还是比较建议显示去指定类型。毕竟
代码可读性和调试会方便点。看一下代码,两个函数的效果是一样的。

main() {
  String s1 = printStr("李雷");
  print('s1:'+s1);
 
}
String printStr(String name){
    return "hello,$name";
}
printStr(name){
    return "hello,$name";
}
  

这里需要注意的是Dart中,函数都有返回值,没有指定返回值的时候,函数会返回null。如果跟Java 一样
用 void 指定返回值的话,那这个函数就不会返回值了。

参数
在讲参数之前,我们先来看看一段java代码,在java中,我们方法名字相同,而参数不同,
返回类型可以相同也可以不同。这种,我们叫做重载。

public void test(int a){
    System.out.println("test2");
}   
 
   
public String test(int a,String s){
    System.out.println("test3");
    return "returntest3";
}   

而在Dart中,实现这种场景就简单的多了,因为Dart支持可选参数,可选参数又分为两种,命名可选参数和位置可选参数。
命名可选参数
命名可选参数是用花括号定义参数,如果给参数设置了默认值,则该参数就是可选的,如果调用
的时候没传入参数,则使用默认值。我们看一下代码:

main() {
  String s1 = printStr(name:"李雷",score:98);
  print('s1:'+s1);
  String s2 = printStr2(name:"李华");//只传入一个参数即可
  print('s2:'+s2);
}
String printStr({String name,int score}){
    return "name is $name"+"score is $score";
}

String printStr2({String name,int score = 100}){//设置参数默认值
    return "name is $name"+"score is "+score.toString();
}

位置可选参数
位置可选参数是用中括号定义参数,中括号里面的参数是可选的。我们看一下代码:

main() {
  String s1 = printStr2("李华");//只传入一个参数即可
  print('s1:'+s1);
}


String printStr2(String name,[int score]){//未设置默认值
  if(score == null){//需要判断
    return "name is $name";
  }else{
    return "name is $name"+"score is "+score.toString();
  }
    
}

String printStr2(String name,[int score = 100]){//设置参数默认值
    return "name is $name"+"score is "+score.toString();
}

注意,这两种可选类型有一个区别,调用的时候需要注意。命名可选参数中传递的参数无需按顺序传参,需要
用冒号对应;位置可选参数中传递的参数必须按照顺序传递。

匿名函数
匿名函数与普通函数基本一样,也有参数,方法体,只是省去了方法名而已。我们看看代码:

main() {
  //匿名函数
  var func = (String name,int score){
   return "name is $name"+"score is "+score.toString();
  };
  String s1 = func("李雷",98);
  print('s1:'+s1);
}

箭头函数
箭头函数实际上跟Java8的lambda表达式相似,只是一个语法糖,我自己个人不是很常使用这种写法,
不过当函数体中只包含一个语句时,再结合匿名函数使用,这种写法还是很香的。我们看下代码:

main() {
  add(num x, num y) => x + y;//箭头函数,等价于下面普通方法
  print(add(50,50));   
  var s1 = (int x,int y) =>  x * y;//匿名函数结合箭头函数使用
  print(s1(50,50));
}

add(num x, num y){//普通方法
    return x + y;
}

箭头函数更加简洁,省略了花括号,箭头后面跟着表达式。结合匿名函数形成匿名箭头函数。

今天的函数基础就到这里了。

共勉

你可能感兴趣的:(Flutter)