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

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

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 性关系免费视频 | 国产在线成人精品 | 九九精品国产 | 亚洲视频第一页 | 国产亚洲精品看片在线观看 | 亚洲伦理一区 | 久久精品嫩草影院免费看 | 精品无码久久久久久久久 | 国产一区风间由美在线观看 | 四虎最新免费网址 | 成人精品mv视频在线观看 | 国产1区精品 | 红色播放器 | 贵妇的私人性俱乐部 | 国产亚洲欧美成人久久片 | 娇妻被健身教练挺进小说阅读 | 91亚洲视频在线观看 | 国产一卡二卡3卡4卡更新 | 国产99精品视频 | 四虎影视永久免费视频观看 | 成人国产网站v片免费观看 成人国产精品视频 | 小小水蜜桃免费影院 | 麻豆最新 | 欧美白虎逼 | 男女乱淫真视频播放网站 | 四虎网址在线 | 99久久久久国产精品免费 | 国产欧美一区视频在线观看 | 国产喂奶300部 | 男人狂躁女人下半身 | 小草视频免费观看在线 | 亚洲欧美综合在线观看 | 国产美女屁股直流白浆视频无遮挡 | 青青国产在线视频 | 69日本xxⅹxxxxx19 | 欧美一卡2卡3卡无卡 | 女bbwxxxx非洲黑人 | 交换余生在线播放免费 | 猫咪av| 全黄毛片 | 二区三区在线观看 |