前言
上一篇我們瞭解到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;
}
箭頭函數更加簡潔,省略了花括號,箭頭後面跟着表達式。結合匿名函數形成匿名箭頭函數。
今天的函數基礎就到這裏了。
共勉