欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Kotlin基礎(chǔ)教程之Run,標簽Label,函數(shù)Function-Type

 更新時間:2017年05月27日 10:28:55   作者:天命劍主  
這篇文章主要介紹了Kotlin基礎(chǔ)教程之Run,標簽Label,函數(shù)Function-Type的相關(guān)資料,需要的朋友可以參考下

Kotlin基礎(chǔ)教程之Run,標簽Label,函數(shù)Function-Type

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

其實,我們都知道一個函數(shù)一定與一個內(nèi)存地址相關(guān),而一個匿名的代碼塊其實也相當于是一個匿名的函數(shù)。在Kotlin中一般使用run函數(shù)來運行一段匿名代碼塊。

如下:

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

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

如圖:

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

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

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

每一個函數(shù)都與一個或多個地址相對應(yīng),而每一個標簽Label也是與一個或多個地址相對應(yīng),所以函數(shù)本身即是標簽。

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

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

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

關(guān)于return和函數(shù)嵌套定義的問題下面還會說。

這段代碼的運行結(jié)果如下:

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

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

如下:

別忘了infix function call。

運行結(jié)果如下:

接下來說一說function type,討論一下函數(shù)。

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

函數(shù)也可以是類型,可以是變量,甚至常量。

如下:

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

這段代碼運行結(jié)果如下:

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

看如下的代碼:

從Java/C++一系出身的程序員(比如我:))很容易把這里的嵌套函數(shù)定義看成是匿名代碼塊的嵌套,以為程序會從外往內(nèi)執(zhí)行。從Pascal/PL一系出身的程序員就不會有這種問題,千萬記住,函數(shù)雖然可以嵌套定義,但是如果沒有調(diào)用是不會從外向內(nèi)執(zhí)行的。

所以輸出很簡單:

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

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

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

最后以一段沒什么用的代碼結(jié)束本篇。

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關(guān)文章

  • 教你如何用Java根據(jù)日期生成流水號

    教你如何用Java根據(jù)日期生成流水號

    這篇文章主要介紹了教你如何用Java根據(jù)日期生成流水號,文中有非常詳細的代碼示例,對正在學習java的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-04-04
  • Ubuntu搭建Java開發(fā)環(huán)境筆記

    Ubuntu搭建Java開發(fā)環(huán)境筆記

    這篇文章主要介紹了Ubuntu搭建Java開發(fā)環(huán)境筆記,本文講解了JDK安裝、MyEclipse安裝及第一個Hello world程序等內(nèi)容,需要的朋友可以參考下
    2015-03-03
  • 教你怎么用IDEA快速生成注釋文檔

    教你怎么用IDEA快速生成注釋文檔

    這篇文章主要介紹了教你怎么用IDEA快速生成注釋文檔,文中有非常詳細的代碼示例,對正在學習IDEA操作的小伙伴們有很好地幫助,需要的朋友可以參考下
    2021-05-05
  • mybatis 新增返回id的實現(xiàn)

    mybatis 新增返回id的實現(xiàn)

    Mybatis插入數(shù)據(jù)時,可以通過兩種方式返回生成的ID,兩種方式都需要在實體類中提供userId的getter和setter方法,本文就詳細的介紹一下這兩種方法,感興趣的可以了解一下
    2024-09-09
  • Springboot啟用多個監(jiān)聽端口代碼實例

    Springboot啟用多個監(jiān)聽端口代碼實例

    這篇文章主要介紹了Springboot啟用多個監(jiān)聽端口代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-06-06
  • SpringBoot實現(xiàn)Server-Sent Events(SSE)的使用完整指南

    SpringBoot實現(xiàn)Server-Sent Events(SSE)的使用完整指南

    使用SpringBoot實現(xiàn)Server-Sent Events(SSE)可以有效處理實時數(shù)據(jù)推送需求,具有單向通信、輕量級和高實時性等優(yōu)勢,本文詳細介紹了在SpringBoot中創(chuàng)建SSE端點的步驟,并通過代碼示例展示了客戶端如何接收數(shù)據(jù),適用于實時通知、數(shù)據(jù)展示和在線聊天等場景
    2024-09-09
  • 使用IntelliJ IDEA調(diào)式Stream流的方法步驟

    使用IntelliJ IDEA調(diào)式Stream流的方法步驟

    本文主要介紹了使用IntelliJ IDEA調(diào)式Stream流的方法步驟,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • Java?面向?qū)ο笸ㄟ^new揭開對象實例化

    Java?面向?qū)ο笸ㄟ^new揭開對象實例化

    各位鐵汁們大家好呀,我們上次博客講了,通過?Student?student1?=?new?Student();就可以實例化一個對象,這個對象就有Student類中的所以成員變量。可是?對象student1?和?類Student到底是怎樣建立聯(lián)系的,在內(nèi)存中到底發(fā)生了什么
    2022-04-04
  • SpringSecurity實現(xiàn)訪問控制url匹配

    SpringSecurity實現(xiàn)訪問控制url匹配

    本文主要介紹了SpringSecurity實現(xiàn)訪問控制url匹配,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-08-08
  • IntelliJ IDEA 刷題利器 LeetCode 插件詳解

    IntelliJ IDEA 刷題利器 LeetCode 插件詳解

    這篇文章主要介紹了IntelliJ IDEA 刷題利器 LeetCode 插件,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08

最新評論