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;
}

箭頭函數更加簡潔,省略了花括號,箭頭後面跟着表達式。結合匿名函數形成匿名箭頭函數。

今天的函數基礎就到這裏了。

共勉

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章