Dart基础学习03--方法的使用
1.本文主要講一下Dart中的方法是怎么定義的,下面先看一個簡單的例子:
void printNumber(num number) {print('The number is $number.'); }2.雖然Dart的編程規(guī)范推薦定義方法是要明確變量類型,但其實上面的代碼我們完全可以寫作:
printNumber(number) { // Omitting types is OK.print('The number is $number.'); }本人建議還是使用第一種吧,代碼的可讀性比較強。
3.如果方法的方法體只有一個表達式,如上面這段代碼,可以寫成:
void printNumber(num number) =>print('The number is $number.');這樣是不是很高大上呢?有種lambda表達式的感覺。這里需要注意的是當方法體是一個聲明語句的時候就不能這樣使用了,如下面這段代碼就無法使用這種簡寫:
printNumber(number) { // Omitting types is OK.var N = number * 2 ; }4.Dart中方法的定義也十分簡單:
printNumber(2333);5.Dart方法的參數(shù)有兩種類型,必須參數(shù)和可選參數(shù),其中必須參數(shù)定義在參數(shù)列表的前面部分,可選參數(shù)定義在參數(shù)列表的剩余部分。
可選參數(shù)
可選參數(shù)又可以分為:可選命名參數(shù)和可選位置參數(shù)。同一個參數(shù)只能是可選命名參數(shù)或可選位置參數(shù),不能兼具兩者的功能。
同時可選參數(shù)可以設(shè)定默認值,如沒有設(shè)定默認值則相當于null。
可選命名參數(shù)
可選命名參數(shù)顧名思義,就是在給其賦值的時候通過參數(shù)名來賦值。
可選命名參數(shù)使用{param1, param2, …}這種形式定義,如下:
可選命名參數(shù)使用:設(shè)置默認值。
可選命名參數(shù)的調(diào)用方式如下:
可選位置參數(shù)
可選位置參數(shù)與可選命名參數(shù)類似,不過它是通過位置來賦值的。
可選位置參數(shù)使用[]包裹可選位置參數(shù)列表,與可選命名參數(shù)不同的是可選位置參數(shù)通過=來設(shè)置默認值:
需要注意的是在調(diào)用包含可選位置參數(shù)的方法時,一定要根據(jù)可選位置參數(shù)的位置進行賦值。
main方法
在Dart中所有的程序都必須包含main方法來作為程序的入口。main方法的返回值是void并且它有一個List類型的可選參數(shù)。下面是Dart在Web應用中的主函數(shù)寫法:
void main() {querySelector("#sample_text_id")..text = "Click me!"..onClick.listen(reverseText); } 注意:..操作符可以用于對單個對象進行多重操作。下面這個例子是Dart在命令行程序中的使用范例:
void main(List<String> arguments) {print(arguments);assert(arguments.length == 2);assert(int.parse(arguments[0]) == 1);assert(arguments[1] == 'test'); }方法即對象
在Dart中你可以將方法作為參數(shù)傳遞給另一個方法:
printElement(element) {print(element); }var list = [1, 2, 3];// Pass printElement as a parameter. list.forEach(printElement);同樣的,可以將方法賦值給一個變量:
var loudify = (msg) => '!!! ${msg.toUpperCase()} !!!'; assert(loudify('hello') == '!!! HELLO !!!');語法范圍
在Dart中方法可以嵌套,并且內(nèi)層方法可以訪問外層方法定義的變量:
var topLevel = true;main() {var insideMain = true;myFunction() {var insideFunction = true;nestedFunction() {var insideNestedFunction = true;assert(topLevel);assert(insideMain);assert(insideFunction);assert(insideNestedFunction);}} }語法閉包
閉包的作用是即使方法在原先聲明范圍外使用,方法內(nèi)部的變量都是可訪問的:
Function makeAdder(num addBy) {return (num i) => addBy + i; }main() {// 創(chuàng)建一個+2方法.var add2 = makeAdder(2);// 創(chuàng)建一個+4方法.var add4 = makeAdder(4);assert(add2(3) == 5);assert(add4(3) == 7); }在上面這段代碼中,add2,add4這兩個方法在main方法中使用,但他們卻可以訪問addBy 這個變量。這就是語法閉包的意思。
方法的等價判斷
下面這個例子用于展示頂層方法,靜態(tài)方法和類成員方法(實例方法)的等效判斷:
foo() {} // A top-level functionclass SomeClass {static void bar() {} // A static methodvoid baz() {} // An instance method }main() {var x;// Comparing top-level functions.x = foo;assert(foo == x);// Comparing static methods.x = A.bar;assert(A.bar == x);// Comparing instance methods.var v = new A(); // Instance #1 of Avar w = new A(); // Instance #2 of Avar y = w;x = w.baz;// These closures refer to the same instance (#2),// so they're equal.assert(y.baz == x);// These closures refer to different instances,// so they're unequal.assert(v.baz != w.baz); }返回值
所有的Dart方法都有返回值,若在代碼中沒有返,則返回值為null。
Dart的方法基本使用就講到這里,更多的Dart學習內(nèi)容和相關(guān)源碼都會在github上的DartNovel開源項目進行同步,歡迎關(guān)注。
轉(zhuǎn)載于:https://www.cnblogs.com/zqlxtt/p/4825414.html
總結(jié)
以上是生活随笔為你收集整理的Dart基础学习03--方法的使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 采用Flume实时采集和处理数据
- 下一篇: 环境变量与文件查找