Kotlin vender tilbage, pause, fortsæt søgeord

1. Oversigt

I denne vejledning diskuterer vi brugen af ​​strukturelle springudtryk i Kotlin.

Kort fortalt, Kotlin har tre strukturelle springudtryk: vende tilbage, pause, fortsætte. I de næste sektioner dækker vi deres funktionalitet med og uden en etiket.

2. Etiketter i Kotlin

Alle udtryk i Kotlin kan markeres med en etiket.

Vi opretter en etiket ved hjælp af en identifikator efterfulgt af "@” skilt. For eksempel, [e-mail beskyttet], [e-mail beskyttet] er gyldige etiketter.

For at mærke et udtryk tilføjer vi blot etiketten foran det:

[e-mailbeskyttet] til (jeg i 1..10) {// noget kode}

3. Den Pause Udmelding

Uden et mærke, pause afslutter den nærmeste lukkende sløjfe.

Lad os se på et eksempel:

@Test sjov givenLoop_whenBreak_thenComplete () {var value = "" for (i i "hello_world") {if (i == '_') break værdi + = i.toString ()} assertEquals ("hej", værdi)}

Alternativt kan vi bruge pause med en etiket, der afslutter sløjfen, der er markeret med denne etiket:

@Test sjov 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", værdi)}

I dette tilfælde afsluttes den ydre sløjfe, når jeg og j variabler svarende til henholdsvis “b” og “1”.

4. Den Blive ved Udmelding

Lad os derefter se på Blive ved nøgleord, som vi også kan bruge med eller uden en etiket.

Uden et mærke, Blive ved fortsætter til næste iteration af den vedlagte sløjfe:

@Test sjov givenLoop_whenContinue_thenComplete () {var result = "" for (i i "hello_world") {if (i == '_') fortsæt resultat + = i} assertEquals ("helloworld", resultat)}

På den anden side, når vi bruger Blive ved med en etiket, der markerer en løkke, fortsætter den til den næste iteration af den løkke:

@Test-sjov givetLoop_whenContinueWithLabel_thenComplete () {var result = "" [email protected] for (i in 'a' .. 'c') {for (j i 1..3) {if (i == 'b') [ e-mail-beskyttet] _loop resultat + = "" + i + j}} assertEquals ("a1a2a3c1c2c3", resultat)}

I dette eksempel har vi brugt Blive ved for at springe en iteration af sløjfen mærket over ydre løkke.

5. Den Vend tilbage Udmelding

Uden en etiket er det vender tilbage til nærmeste omsluttende funktion eller anonym funktion:

@Test sjov givenLambda_whenReturn_thenComplete () {var result = returnInLambda (); assertEquals ("hej", resultat)} privat sjov returnInLambda (): String {var result = "" "hello_world" .forEach {if (it == '_') returnerer resultat resultat + = it.toString ()} // denne linje opnås ikke returneresultat; }

Vend tilbage er også nyttigt, når vi vil ansøge Blive ved logik på anonymfunktioner:

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

I dette eksempel er Vend tilbage erklæring vender tilbage til den anonyme sjov, dvs. for hver løkke.

I tilfælde af et lambda-udtryk kan vi også bruge Vend tilbage med en etiket for at opnå et lignende resultat:

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

Alternativt kan vi også Vend tilbage ved hjælp af en implicit etiket:

@Test-sjov givetLambda_whenReturnWithImplicitLabel_thenComplete () {var result = "" "hello_world" .forEach {if (it == '_') {// local return to the caller of the lambda, ie the forEach loop [email protected]} result + = it.toString ()} assertEquals ("helloworld", resultat)}

I eksemplet ovenfor vender returneringserklæringen også tilbage til lambda - den, der ringer op for hver løkke.

Langt om længe, Vend tilbage kan bruges med en etiket til ansøge pause logik til lambda-udtryk afvender tilbage til en etiket udenfor:

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

6. Konklusion

I denne artikel har vi gennemgået brugssagerne af vende tilbage, pause, fortsætte i Kotlin.

Eksempelkoden kunne findes på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found