[dart學習]第四篇:函數

 

接着學習dart的函數。windows

一、函數Function函數

dart是一種真正的面向對象的語言,一般一個函數也是Function類型的對象,這也就是說能夠把函數賦值給一個變量,或者做爲另外一個函數的入參進行傳遞。學習

咱們直接來看一個簡單的函數例子吧:spa

//定義一個函數,名字叫testFunc,,參數有兩個int,返回值也是int
int testFunc(int a, int b)    
{
  return a+b;
}
main() {
  var c=testFunc(2,4);      //調用剛纔定義的函數  
  print('Function test = $c');  //打印函數的返回值,注意:這裏不一樣於C語言的d%用法
}

函數的運行信息以下圖:3d

 

附:即使定義的函數沒有顯式聲明函數的返回類型,編譯器也能認,可是不建議你們那樣作。code

若是函數體只有一句表達式,那麼還能夠這樣簡介地定義函數:對象

int testFunc(int a, int b) => a+b;

 => expr; 語法就是 {return expr; } 的簡短寫法,一樣,這種寫法我的也不太推薦,咱們仍是要注意函數定義的易讀性。blog

函數的入參能夠是必須的,也能夠是可選擇的,相似於帶有默認值的參數,可選擇的參數必須放在必須的參數以後。element

<一> 可選參數cmd

可選參數能夠是位置參數或者命名參數。當定義函數的時候,可使用 {param1param2, …} 這種形式去指定命名參數,其實就是下邊這種形式:

  int testFunc({int a, int b})  //注意{}
  {
      return a+b;
  }

調用的時候能夠這樣調用:

main() {
  var c=testFunc(a: 2, b:4);
  print('Function test = $c');
}

 

位置參數看如下例子(有點相似於windows cmd 命令裏的可選參數):

String say(String from, String msg, [String device]) {
  var result = '$from says $msg';
  if (device != null) {
    result = '$result with a $device';
  }
  return result;
}

以上say函數的前兩個參數是必須的,從第三個開始是可選擇的參數,這些可選擇的參數都被包括在[]符號內。

這樣調用: 

main() {
  var c=say('Jack','Hello world');
  print(c);
}

運行結果爲:

若是咱們這樣調用:   var c=say('Jack','Hello world','windows');  ,那麼,運行結果將變爲:

<二>默認參數

默認參數相似於C/C++語言的默認參數,dart的默認參數也使用=進行賦值(推薦使用=)。命名參數或位置參數均可以有默認值,如上例能夠這樣修改:

int testFunc({int a=7, int b}) 
{
  return a+b;
}
main() {
  var c=testFunc(b:2);
  print('Function test = $c');
}

程序的運行結果爲:

這裏要特別指出一點:普通C/C++的默認賦值參數只能排在形參的最後,也就是說上例若是在C語言中testFunc函數只能是b有默認值,而a不能有默認值。可是因爲咱們使用了dart語言的命名參數特性,因此對有默認值形參的位置就沒有這些限制了。怎麼樣,dart仍是有本身獨特的強大之處吧。

位置參數的帶有默認值的形式就再也不贅述了,下邊直接貼一段例子你們理解消化一下就行:

// demo1
String say(String from, String msg, [String device = 'carrier pigeon', String mood]) { var result = '$from says $msg'; if (device != null) { result = '$result with a $device'; } if (mood != null) { result = '$result (in a $mood mood)'; } return result; } assert(say('Bob', 'Howdy') == 'Bob says Howdy with a carrier pigeon'); //demo2 void doStuff( {List<int> list = const [1, 2, 3], Map<String, String> gifts = const { 'first': 'paper', 'second': 'cotton', 'third': 'leather' }}) { print('list: $list'); print('gifts: $gifts'); }

<三>main函數

main函數是dart語言編寫的程序的頂層入口函數,返回值爲void,而且有一個可選擇的list參數。再也不細述。

<四>將函數做爲入參傳遞或賦值

直接看例子吧:

void printElement(int element) {
  print(element);
}
main()
{
  var list = [1, 2, 3];
  // Pass printElement as a parameter.
  list.forEach(printElement);  
}

再看一個將函數做爲變量進行賦值的:

int main()
{
  var loudify = (msg) => '!!! ${msg.toUpperCase()} !!!';  //複合語句,稍微有點複雜,你們結合前邊對  =>  的介紹進行理解
  print(loudify('hello'));
}

 

全部的函數都是有返回值的,若是程序裏沒有明確指明返回值,如 foo() {}   ,則默認返回 null;

相關文章
相關標籤/搜索