Dart 函式 函式引數 匿名函式

2021-10-01 06:53:35 字數 4538 閱讀 3997

dart彙總這裡

main() 函式

函式是一等物件

匿名函式

返回值dart 是一門真正物件導向的語言, 甚至其中的函式也是物件,並且有它的型別 function 。 這也意味著函式可以被賦值給變數或者作為引數傳遞給其他函式。 也可以把 dart 類的例項當做方法來呼叫。

已下是函式實現的示例:

bool isnoble

(int atomicnumber)

isnoble

(atomicnumber)

如果函式中只有一句表示式,可以使用簡寫語法:

bool isnoble

(int atomicnumber)

=> _noblegases[atomicnumber]

!= null;

=> expr 語法是 的簡寫。 =

> 符號 有時也被稱為 箭頭 語法。

可選引數

可選引數可以是命名引數或者位置引數,但乙個引數只能選擇其中一種方式修飾。

命名可選引數

呼叫函式時,可以使用指定命名引數paramname: value。 例如:

enableflags

(bold:

true

, hidden:

false

);

定義函式是,使用來指定命名引數:

/// sets the [bold] and [hidden] flags ...

void

enableflags()

flutter 建立例項的表示式可能很複雜, 因此視窗小部件建構函式僅使用命名引數。 這樣建立例項的表示式更易於閱讀。

使用@required注釋表示引數是 required 性質的命名引數, 該方式可以在任何 dart **中使用(不僅僅是flutter)。

const

scrollbar

()

此時 scrollbar 是乙個建構函式, 當 child 引數缺少時,分析器會提示錯誤。

required被定義在metapackage。 無論是直接引入(import)package:meta/meta.dart,或者引入了其他 package,而這個 package 輸出(export)了meta,比如 flutter 的package:flutter/material.dart

位置可選引數

將引數放到中來標記引數是可選的:

string say

(string from, string msg,

[string device]

)return result;

}

下面是不使用可選引數呼叫上面方法 的示例:

assert

(say

('bob'

,'howdy')==

'bob says howdy'

);

下面是使用可選引數呼叫上面方法的示例:

assert

(say

('bob'

,'howdy'

,'smoke signal')==

'bob says howdy with a smoke signal'

);

預設引數值

在定義方法的時候,可以使用 = 來定義可選引數的預設值。 預設值只能是編譯時常量。 如果沒有提供預設值,則預設值為 null。

下面是設定可選引數預設值示例:

/// 設定 [bold] 和 [hidden] 標誌 ...

void

enableflags()

// bold 值為 true; hidden 值為 false.

enableflags

(bold:

true

);

不推薦: 舊版本**中可能使用的是冒號 (? 而不是 = 來設定引數預設值。 原因是起初命名引數只支援 : 。 這種支援可能會被棄用。 建議 使用 = 指定預設值。

下面示例演示了如何為位置引數設定預設值:

string say

(string from, string msg,

[string device =

'carrier pigeon'

, string mood])if

(mood != null)

return result;

}assert

(say

('bob'

,'howdy')==

'bob says howdy with a carrier pigeon'

);

list 或 map 可以作為預設值傳遞。 下面的示例定義了乙個方法dostuff(), 並分別指定引數listgifts的預設值。

void

dostuff(}

)

main() 函式

任何應用都必須有乙個頂級main()函式,作為應用服務的入口。main()函式返回值為空,引數為乙個可選的list

下面是 web 應用的main()函式:

void

main()

下面是乙個命令列應用的main()方法,並且使用了輸入引數:

// 這樣執行應用: dart args.dart 1 test

void

main

(list

arguments)

使用 args library 可以定義和解析命令列引數。

函式是一等物件

乙個函式可以作為另乙個函式的引數。 例如:

void

printelement

(int element)

var list =[1

,2,3

];// 將 printelement 函式作為引數傳遞。

list.

foreach

(printelement)

;

同樣可以將乙個函式賦值給乙個變數,例如:

var loudify =

(msg)

=>

'!!! $ !!!'

;assert

(loudify

('hello')==

'!!! hello !!!'

);

匿名函式

多數函式是有名字的, 比如main()printelement()。 也可以建立沒有名字的函式,這種函式被稱為 匿名函式, 有時候也被稱為 lambda 或者 closure 。 匿名函式可以賦值到乙個變數中, 舉個例子,在乙個集合中可以新增或者刪除乙個匿名函式。

匿名函式和命名函式看起來類似— 在括號之間可以定義一些引數或可選引數,引數使用逗號分割。

後面大括號中的**為函式體:

(

[[type] param1[

, …]])

;

下面例子中定義了乙個包含乙個無型別引數 item 的匿名函式。 list 中的每個元素都會呼叫這個函式,列印元素位置和值的字串。

var list =[,

'bananas'

,'oranges'];

list.

foreach

((item)

: $item');

});

如果函式只有一條語句, 可以使用箭頭簡寫。兩個函式是等價的。

list.

foreach

((item)

=>

print

('$: $item'))

;

返回值

所有函式都會返回乙個值。 如果沒有明確指定返回值, 函式體會被隱式的新增return null;語句。

foo()

assert

(foo()

== null)

;

作為引數的函式 匿名函式 高階函式

函式作為乙個變數傳入到了另乙個函式中,那麼該作為引數的函式的型別是 function1,即 引數型別 返回型別 object funparameter 1 map plus 中的 plus 就是將 plus 這個函式當做乙個引數傳給了 map,這裡代表從集合中 遍歷出來的乙個元素。plus 則代表的...

函式 匿名函式

匿名函式 沒有名稱的函式。匿名函式的使用 1 將其賦值給乙個函式 var show function show 2.匿名函式的自我執行 function hi 函式 無參,有參,帶返回值 帶有返回值的函式 var num function a,b 10,9 consloge.log num 例子 v...

Dart建構函式

2.構造函式呼叫父類建構函式的順序 3.建構函式傳遞 classname 普通建構函式 classname.identifier 命名建構函式 const classname 常量建構函式 factroy classname 工廠建構函式使用 var p1 point 2 2 dart2中,可以省略...