1. 程式人生 > >Kotlin 從學習到 Android 第五章 返回和跳轉

Kotlin 從學習到 Android 第五章 返回和跳轉

在 Kotlin 中,有三種返回和跳轉語句:

  • return 從最近的一個封閉函式或匿名函式中返回;
  • break 跳出最近的封閉迴圈;
  • continue 繼續執行最近封閉迴圈的下一步;

上面這三個表示式也能夠作為其他表示式的一部分:

val s = person.name ?: return

break 和 continue 標籤

在 Kotlin 中任何表示式都可以使用標籤,標籤的格式為:標籤名@,例如,[email protected][email protected] 等。使用標籤時,我們只需把標籤放在表示式前面即可,一般和表示式有一個空格的距離:

// 再 i = 10 時跳出整個迴圈
[email protected]
for (i in 1..100) { for (j in 1..10) { if (i == 10) [email protected] else println("$i : $j") } }

使用標籤的 return

一般情況下,Kotlin 中的 return 和 java 中的 return 效果一樣,都是結束最近的封閉函式:

var ints = arrayListOf<Int>(0 ,1 ,2, 3)
fun foo() {// 並不會打印出任何值
    ints.forEach {
        if (it == 0) return
        print(it)
    }
} 

但是,當 return 後面跟上標籤時,表示符合判斷條件後終止標籤所標記的表示式,類似於 break 的作用:

var ints = arrayListOf<Int>(0 ,1 ,2, 3)
fun foo() {
    ints.forEach [email protected] {
        if (it == 0) [email protected]
        print(it)
    }
}

[email protected] 是後面表示式的標籤,當 it == 0 時,終止表示式 {…} ,ints.forEach 繼續執行,所以列印結果是 123

然而,更多情況下我們使用匿名標籤,其標籤名和 lambda 表示式中函式的名稱一樣:

fun foo() {
    ints.forEach {
        if (it == 0) [email protected]
        print(it)
    }
}

或者,我們也可以使用一個匿名函式來代替 lambda 表示式,這樣這個 return 的作用就是終止當前的匿名函式:

fun foo() {
    ints.forEach(fun(value: Int) {
        if (value == 0) return
        print(value)
    })
}

當需要返回值時,我們可以這麼寫:

[email protected] 1

這句話的意思是:表示式 @a 的返回結果是 1 ,而不是返回一個有標記的表示式 (@a 1)。

相關推薦

Kotlin 學習Android 返回

在 Kotlin 中,有三種返回和跳轉語句: return 從最近的一個封閉函式或匿名函式中返回; break 跳出最近的封閉迴圈; continue 繼續執行最近封閉迴圈的下一步; 上面這三個表示式也能夠作為其他表示式的一部分: val s = pe

《C++ Primer Plus》學習筆記—— 迴圈關係表示式(一)

本章內容: for迴圈和while迴圈 表示式和語句 運算子組合 複合語句 逗號運算子以及關係運算符 typedef工具 字元輸入方法get() 檔案尾條件 巢狀迴圈和二維陣列 計算機除了儲存資料外,還可以做很多其他工作。可以對資料進

《C++ Primer Plus》學習筆記—— 迴圈關係表示式(二)

while迴圈 while迴圈是沒有初始化和更新部分的for迴圈,它只有測試條件和迴圈體。 while (test-condition) { body; } //當test-condition為true,即不為0時,執行迴圈體。 編寫延時迴圈 long wai

《C++ Primer Plus》學習筆記—— 迴圈關係表示式(三)

迴圈與文字輸入 迴圈完成的一項最常見最重要的任務:逐字元地讀取來自檔案或鍵盤的文字。 cin物件支援三種不同模式的單字元輸入,其使用者介面各不相同。 使用原始的cin進行輸入: 通過迴圈來讀取鍵盤的文字輸入,則必須有辦法停止讀取。 一種方法是選擇某個特殊的字元(哨兵

《C++ Primer Plus》學習筆記—— 迴圈關係表示式(四)

程式設計練習 1.編寫一個要求使用者輸入兩個整數的程式。該程式將計算並輸出這兩個整數之間(包括這兩個整數)所有整數的和。這裡假設先輸入較小的整數。例如,如果使用者輸入的是2和9,則程式將指出2~9之間的所有整數的和為44. #include <iostream>

-分支

字元測試函式 在ctype.h標頭檔案中 (1) isxdigit() 是否是十六進位制數字,即 “0123456789ABCDEF” (2) isdigit() 是否是是數字,即 “0123456789” (3) isalpha() 是否是英文字母

《第一行程式碼Android學習總結 詳解廣播機制

一、廣播機制簡介         Android提供了一系列API,允許程式自由的傳送和接收廣播,同時每個程式都可以對自己感興趣的廣播進行註冊,該程式便可以只接受來自於系統或其他應用程式的自己關心的廣播內容。 標準廣播:    

增強學習筆記 蒙特卡洛方法

兩個 width 重要 思想 後者 src 兩種方法 預測 eps 5.1 蒙特卡洛預測 分為兩種:First-Visit MC和Every-Visit MC,前者用的更多。後者用於函數近似和Eligibility Traces 5.2 蒙特卡洛評估action valu

機器學習實戰Logistic回歸

表示 article err () tail mat cycle col transpose def gradAscent(dataMatIn, classLabels): dataMatrix = mat(dataMatIn) #co

CLR via C#學習筆記--基元類型、引用類型值類型-編程語言的基元類型

語法 是我 strong new 完全 type 風格 基本類 直接映射 5.1 編程語言的基元類型 FCL類型 使用以下語法分配一個整數 System.Int32 a=new System.Int32(); 這種語法較為繁瑣,C#允許換用如下所示的語法 int a=

CLR via C#學習筆記--引用類型值類型

引用類型 tro 生成 形式 編譯 就是 type 完全匹配 成員 5.2 引用類型和值類型 使用引用類型 CLR支持兩種類型:引用類型和值類型。雖然FCL的大多數類型都是引用類型,但程序員用的最多的還是值類型。 引用類型總是從托管堆分配,C#的new操作符返回對象內存地址

CLR via C#學習筆記--值類型的裝箱拆箱

總結 一行 other 對象的引用 返回對象 line 集合類 args math 5.3 值類型的裝箱和拆箱 裝箱 值類型比引用類型“輕”,原因是他們不作為對象在托管堆中分配,不被垃圾回收,也不通過指針進行引用。 但許多時候都需要獲取對值類型實例的引用。例如,假定要創建A

CLR via C#學習筆記--使用接口更改已裝箱值類型中的字段

就是 nal static 正常 led 垃圾回收 版本 poi over 5.3.1 使用接口更改已裝箱值類型中的字段(以及為什麽不應該這麽做) 下面通過一些例子來驗證自己對值類型、裝箱、拆箱的理解程度。 使用正常方法的代碼演示 internal struct Poin

CLR via C#學習筆記--對象相等性同一性

有助於 equals 轉型 lean 默認 object類 虛方法 nbsp 機制 5.3.2 對象相等性和同一性 開發人員經常寫代碼比較對象。例如,有時要將對象放到集合,寫代碼對集合中的對象排序、搜索或比較。 本節將討論相等性和同一性謀害將討論如何定義正確實現了對象相等性

吳恩達機器學習)--特徵縮放學習率

一、特徵縮放  ----(1) 對於我們假設的式子(1),可能存在這樣一種情況就是有些資料遠大於另一些資料(eg:x_1>>x_2) 比如房子價格的例子: 房子的面積要遠大於房子的層數和房間數。在這種情況下可以看下圖,所產生的等高線的圈會很窄,在做梯度下降

《機器學習》 周志華學習筆記 神經網路(課後習題) python實現

1.神經元模型 2.感知機與多層網路 3.誤差逆傳播演算法 (A)BP演算法:最小化訓練集D上的累積誤差 標準BP演算法:更新規則基於單個Ek推導而得 兩種策略防止過擬合:(1)早停(通過驗證集來判斷,訓練集誤差降低,驗證集誤差升高)(2) 正則化:在誤差目標函式中引入描述網

Tensorflow 實戰Google深度學習框架 5.2.1Minister數字識別 原始碼

1 import os 2 import tab 3 import tensorflow as tf 4 5 print "tensorflow 5.2 " 6 7 from tensorflow.examples.tutorials.mnist import input

Tensorflow 實戰Google深度學習框架 5.2.1Minister數字識別 源代碼

sting var initial testin def after depend reduce sky 1 import os 2 import tab 3 import tensorflow as tf 4 5 print "tensorflow

強化學習導論 蒙特卡洛模擬

這一章講蒙特卡洛方法在強化學習中的應用。 在這一章,我們將接觸第一個用於估計value functions,並發現最優policies的方法。和前幾章不一樣的是,這次假設我們並非完全知道環境的動態資訊(轉移概率啦那些)。蒙特卡洛方法只需要經驗知識,即:來自線上或者模擬環境互動過程的樣本序列(包括

《快樂的Linux命令列》學習記錄——使用命令

這一章的命令主要是指: • type –說明怎樣解釋一個命令名 • which –顯示會執行哪個可執行程式 • man –顯示命令手冊頁 • apropos –顯示一系列適合的命令 • info –顯示命令 info • whatis –顯示一個命令的簡潔描述