一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

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

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美高清在线精品一区 | 午夜亚洲一区二区福利 | 好姑娘完整版在线观看中文 | 国产黄色大片网站 | 亚洲不卡视频在线 | bt7086新片速递亚洲最新合集 | 成人依依网 | 美女叽叽 | 苍井空色欲迷墙 | 国产激情久久久久影院小草 | 欧美日韩精品一区二区三区视频播放 | 黄a在线观看 | 91亚洲一区二区在线观看不卡 | 亚洲人成在线观看一区二区 | 不卡一区二区三区卡 | gay台湾无套男同志可播放 | 亚洲精品AV无码喷奶水糖心 | 全黄一级裸片视频免费 | 无码精品一区二区三区免费视频 | 日韩欧美在线视频一区二区 | 日本在线观看视频 | 性欧美金发洋妞xxxxbbbb | 免费日韩 | 欧美综合另类 | 四虎1515h永久 | 特级毛片免费观看视频 | 国产成人精品福利色多多 | 爱情岛论坛自拍永久入口 | 精品手机在线1卡二卡3卡四卡 | 国产香蕉一区二区在线观看 | 欧美在线视频一区在线观看 | 国内外成人在线视频 | 国产成人亚洲综合网站不卡 | 精品久久久麻豆国产精品 | 亚洲国产欧美在线人成 | 国产精品欧美日韩一区二区 | 韩国女主播在线大尺无遮挡 | 五月激情丁香婷婷综合第九 | 99久久一区二区精品 | 久久精品在现线观看免费15 | 国产精品视频久久 |