Kotlin kembali, putus, lanjutkan Kata kunci

1. Ikhtisar

Dalam tutorial ini, kita akan membahas penggunaan ekspresi lompatan struktural di Kotlin.

Sederhananya, Kotlin memiliki tiga ekspresi lompatan struktural: kembali, putus, lanjutkan. Di bagian selanjutnya, kita akan membahas fungsinya dengan dan tanpa label.

2. Label di Kotlin

Ekspresi apa pun di Kotlin dapat ditandai dengan label.

Kami membuat label dengan menggunakan pengenal diikuti dengan tanda " @" . Misalnya, [email dilindungi] , [email dilindungi] adalah label yang valid.

Untuk memberi label ekspresi, kita cukup menambahkan label di depannya:

[email protected] for (i in 1..10) { // some code }

3. Pernyataan Istirahat

Tanpa label, break mengakhiri loop penutup terdekat.

Mari kita lihat contohnya:

@Test fun givenLoop_whenBreak_thenComplete() { var value = "" for (i in "hello_world") { if (i == '_') break value += i.toString() } assertEquals("hello", value) }

Alternatifnya, kita bisa menggunakan break dengan label, yang mengakhiri loop yang ditandai dengan label itu:

@Test fun givenLoop_whenBreakWithLabel_thenComplete() { var value = "" [email protected] for (i in 'a'..'d') { for (j in 1..3) { value += "" + i + j if (i == 'b' && j == 1) [email protected]_loop } } assertEquals("a1a2a3b1", value) }

Dalam kasus ini, loop luar diakhiri ketika variabel i dan j masing-masing sama dengan “b” dan “1”.

4. Pernyataan Lanjutkan

Selanjutnya, mari kita lihat kata kunci lanjutkan , yang juga dapat kita gunakan dengan atau tanpa label.

Tanpa label, lanjutkan akan melanjutkan ke iterasi berikutnya dari loop penutup:

@Test fun givenLoop_whenContinue_thenComplete() { var result = "" for (i in "hello_world") { if (i == '_') continue result += i } assertEquals("helloworld", result) }

Di sisi lain, ketika kita menggunakan lanjutkan dengan label yang menandai sebuah loop, itu akan melanjutkan ke iterasi berikutnya dari loop itu:

@Test fun givenLoop_whenContinueWithLabel_thenComplete() { var result = "" [email protected] for (i in 'a'..'c') { for (j in 1..3) { if (i == 'b') [email protected]_loop result += "" + i + j } } assertEquals("a1a2a3c1c2c3", result) }

Dalam contoh ini, kami telah menggunakan terus melewatkan satu iterasi dari loop berlabel outer_loop.

5. Pernyataan Pengembalian

Tanpa label, itu kembali ke fungsi penutup terdekat atau fungsi anonim:

@Test fun givenLambda_whenReturn_thenComplete() { var result = returnInLambda(); assertEquals("hello", result) } private fun returnInLambda(): String { var result = "" "hello_world".forEach { if (it == '_') return result result += it.toString() } //this line won't be reached return result; }

Return juga berguna ketika kita ingin menerapkan logika lanjutkan pada fungsi anonim :

@Test fun givenAnonymousFunction_return_thenComplete() { var result = "" "hello_world".forEach(fun(element) { if (element == '_') return result += element.toString() }) assertEquals("helloworld", result) }

Dalam contoh ini, pernyataan return akan kembali ke pemanggil dari kesenangan anonim, yaitu loop forEach .

Dalam kasus ekspresi lambda, kita juga bisa menggunakan return dengan label untuk mendapatkan hasil yang serupa:

@Test fun givenLambda_whenReturnWithExplicitLabel_thenComplete() { var result = "" "hello_world".forEach [email protected]{ if (it == '_') { [email protected] } result += it.toString() } assertEquals("helloworld", result) }

Alternatifnya, kita juga bisa kembali menggunakan label implisit :

@Test fun givenLambda_whenReturnWithImplicitLabel_thenComplete() { var result = "" "hello_world".forEach { if (it == '_') { // local return to the caller of the lambda, i.e. the forEach loop [email protected] } result += it.toString() } assertEquals("helloworld", result) }

Dalam contoh di atas, pernyataan return juga akan kembali ke pemanggil lambda - loop forEach .

Akhirnya, return bisa digunakan dengan label untuk menerapkan logika break ke ekspresi lambda dengan mengembalikan ke label di luar :

@Test fun givenAnonymousFunction_returnToLabel_thenComplete() { var result = "" run [email protected]{ "hello_world".forEach { if (it == '_') [email protected] result += it.toString() } } assertEquals("hello", result) }

6. Kesimpulan

Dalam artikel ini, kita telah membahas kasus penggunaan return, break, continue di Kotlin.

Kode sampel dapat ditemukan di GitHub.