国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Kotlin基礎教程之Run,標簽Label,函數Function-Type

Kotlin基礎教程之Run,標簽Label,函數Function-Type

2020-10-31 23:46天命劍主 Java教程

這篇文章主要介紹了Kotlin基礎教程之Run,標簽Label,函數Function-Type的相關資料,需要的朋友可以參考下

kotlin基礎教程之run,標簽label,函數function-type

在java中可以使用{}建立一個匿名的代碼塊,代碼塊會被正常的執行,除了改變了作用域之外,似乎并沒有什么其他的作用。然而在kotlin中卻不能這么做,這是為什么呢?

其實,我們都知道一個函數一定與一個內存地址相關,而一個匿名的代碼塊其實也相當于是一個匿名的函數。在kotlin中一般使用run函數來運行一段匿名代碼塊。

如下:

Kotlin基礎教程之Run,標簽Label,函數Function-Type

在kotlin中使用標識符后跟@符號來定義一個標簽,使用@后跟標識符來引用一個標簽,run函數的語法初看起來似有一些怪異,其實run函數以一個函數作為參數,而一個匿名的代碼塊就可以是一個匿名函數,當我們在intellij idea中把鼠標光標放到匿名代碼塊的大括號上時,會顯示出匿名代碼塊對應的函數簽名

local final fun <anonymous> ():int defined in com.kotlin_learn.control_flow.fun_run

如圖:

Kotlin基礎教程之Run,標簽Label,函數Function-Type

local代表作用域,定義在函數內部,作用域僅為local,final代表不可變,<anonymous>即為匿名,()是參數列表,int是返回值,com.kotlin_learn.control_flow.fun_run是函數定義位置的完整路徑。

由此可見,run函數的參數,那段匿名代碼塊被編譯器轉換為了一個匿名函數是毫無疑問的。

當然run函數是可以有返回值的,所以匿名代碼塊也可以是有返回值的匿名函數。

每一個函數都與一個或多個地址相對應,而每一個標簽label也是與一個或多個地址相對應,所以函數本身即是標簽。

所以可以使用return@run之類的語法。

匿名函數雖然沒有函數名,然而我們可以定義一個具名標簽來代表這個函數,于是可以使用return@outer 2將2返回給i。

也許有人會有疑問,為什么不直接使用return 2呢,原因是return 將會從fun_run函數返回,而不是從匿名函數返回。

關于return和函數嵌套定義的問題下面還會說。

這段代碼的運行結果如下:

Kotlin基礎教程之Run,標簽Label,函數Function-Type

接下來說一說foreach函數,與其他語言中不同,在kotlin中foreach并不是一種語法,而是一類函數,foreach是iterator的函數,任何實現了iterator的類都可以使用foreach。foreach函數的參數也是一個函數,其參數是一個模板函數,可以是具名函數,匿名函數,lambda。foreach會對iterator迭代的每一個元素都調用一次傳入的函數。

之所以講到foreach,是為了熟悉標簽的用法和return的用法。

如下:

Kotlin基礎教程之Run,標簽Label,函數Function-Type

別忘了infix function call。

運行結果如下:

Kotlin基礎教程之Run,標簽Label,函數Function-Type

接下來說一說function type,討論一下函數。

對程序員來說,函數是很熟悉的,然而我們對函數就真的那么熟悉么?

函數也可以是類型,可以是變量,甚至常量。

如下:

Kotlin基礎教程之Run,標簽Label,函數Function-Type

在這段代碼中我們定義了幾個函數類型的變量和常量,并且在之間進行賦值等操作,其實和c++中的函數指針很相似,但是也有獨特的地方。比如嵌套函數定義,函數標簽的引用以及帶標簽的返回值等等。我們也看到了在一個匿名函數(end1代表的那個)中如何使用lambda表達式定義函數的參數列表和自動判斷的返回類型。

這段代碼運行結果如下:

Kotlin基礎教程之Run,標簽Label,函數Function-Type

剛才我們提到了函數嵌套定義,這是一個需要小心的地方。

看如下的代碼:

Kotlin基礎教程之Run,標簽Label,函數Function-Type

從java/c++一系出身的程序員(比如我:))很容易把這里的嵌套函數定義看成是匿名代碼塊的嵌套,以為程序會從外往內執行。從pascal/pl一系出身的程序員就不會有這種問題,千萬記住,函數雖然可以嵌套定義,但是如果沒有調用是不會從外向內執行的。

所以輸出很簡單:

Kotlin基礎教程之Run,標簽Label,函數Function-Type

我們也看到了return的用法,這里的f1,f2,f3雖然是內部定義的函數,但是依然可以作為標簽使用。

可見kotlin是一種集大成的語言,甚至借鑒了古老的unix腳本和pascal的語法,借鑒了很多語言的特性,再加上強大的編譯器(kotlin編譯器會幫你做很多東西,遠比其他語言做的多得多),使kotlin的代碼非常簡潔優雅而且編程相當靈活高效。

在kotlin中,太多的功能都是通過使用函數作為參數來實現,有的已經不能叫做語法,然而函數嵌套,infix function call,lambda,函數參數,可變參數列表,靈活的標簽,強大的return,自動類型判斷,range,iterator,操作符重載,省略,模板...這些太多的功能,導致kotlin的語法眼花繚亂,雖然有時看起來很優雅,但是也可能給人閱讀代碼帶來巨大的困難。

最后以一段沒什么卵用的代碼結束本篇。

Kotlin基礎教程之Run,標簽Label,函數Function-Type

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
原文鏈接:https://my.oschina.net/yuanhonglong/blog/469546

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 中文字幕欧美日韩 | 成人免费crm在线观看 | 久久99这里只有精品 | 一区二区三区动漫 | 91av在线电影 | 毛片色 | 成年人综合网 | 日韩一区精品 | 四虎影视免费看电影 | 在线亚洲欧美 | 中文字幕精品一区二区精品 | 免费看黄色电影 | av在线播放网址 | 日韩一区中文字幕 | 精品欧美乱码久久久久久1区2区 | 亚洲激情在线播放 | 欧美日韩国产一区二区三区 | 九九热免费观看 | 小视频在线 | yw193com尤物 | 中文av一区 | av在线一区二区 | 国产成年免费视频 | 欧美精品一区三区 | 精品一区二区三区四区 | 九九热在线视频 | 欧美午夜一区二区 | 一区二区三区影视 | 久久精品国产精品青草 | 日本黄色免费大片 | 91在线麻豆 | 久久久一区二区三区 | 日韩一区二区不卡 | 国产精品久久久久久久久 | 亚洲天堂一区 | 欧美一级片在线 | 国产免费av网站 | 亚洲精品福利在线 | av在线免费网址 | 91中文字幕在线观看 | 久久精品一区二区三区四区 |