Kotlin tilbake, pause, fortsett Nøkkelord

1. Oversikt

I denne veiledningen vil vi diskutere bruken av strukturelle hopputtrykk i Kotlin.

For å si det enkelt, Kotlin har tre strukturelle hopputtrykk: tilbake, pause, fortsett. I de neste avsnittene vil vi dekke funksjonene deres med og uten etikett.

2. Etiketter i Kotlin

Eventuelle uttrykk i Kotlin kan merkes med en etikett.

Vi lager en etikett ved å bruke en identifikator etterfulgt av "@” skilt. For eksempel, [e-postbeskyttet], [e-postbeskyttet] er gyldige merkelapper.

For å merke et uttrykk, legger vi bare til etiketten foran det:

[e-postbeskyttet] for (jeg i 1..10) {// litt kode}

3. Den Gå i stykker Uttalelse

Uten merkelapp, gå i stykker avslutter nærmeste innesluttende sløyfe.

La oss se på et eksempel:

@Test fun givenLoop_whenBreak_thenComplete () {var value = "" for (i i "hallo_world") {if (i == '_') break value + = i.toString ()} assertEquals ("hallo", verdi)}

Alternativt kan vi bruke gå i stykker med en etikett som avslutter sløyfen som er merket med den etiketten:

@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) [e-postbeskyttet] _loop}} assertEquals ("a1a2a3b1", verdi)}

I dette tilfellet avsluttes den ytre sløyfen når Jeg og j variabler tilsvarer henholdsvis “b” og “1”.

4. Den Fortsette Uttalelse

La oss ta en titt på Fortsette nøkkelord, som vi også kan bruke med eller uten en etikett.

Uten merkelapp, Fortsette vil fortsette til neste iterasjon av den vedlagte sløyfen:

@Test fun givenLoop_whenContinue_thenComplete () {var result = "" for (i i "hallo_world") {if (i == '_') fortsett resultat + = i} assertEquals ("helloworld", resultat)}

På den andre siden, når vi bruker Fortsette med en etikett som markerer en løkke, fortsetter den til neste iterasjon av løkken:

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

I dette eksemplet har vi brukt Fortsette å hoppe over en iterasjon av løkken merket ytre_løkke.

5. Den Komme tilbake Uttalelse

Uten en etikett, det går tilbake til nærmeste vedleggsfunksjon eller anonym funksjon:

@Test fun givenLambda_whenReturn_thenComplete () {var result = returnInLambda (); assertEquals ("hallo", resultat)} privat moro returnInLambda (): streng {var resultat = "" "hallo_verden". forEach {if (it == '_') returnerer resultat resultat + = it.toString ()} // denne linjen blir ikke nådd returresultat }

Komme tilbake er også nyttig når vi vil søke om Fortsette logikk på anonymfunksjoner:

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

I dette eksemplet er komme tilbake uttalelse vil returnere til innringeren av den anonyme moroa, dvs. for hver Løkke.

I tilfelle et lambdauttrykk kan vi også bruke komme tilbake med en etikett for å oppnå et lignende resultat:

@Test moro gittLambda_whenReturnWithExplicitLabel_thenComplete () {var result = "" "hallo_world" .forEach [email protected] {if (it == '_') {[email protected]} result + = it.toString ()} assertEquals ("helloworld ", resultat) }

Alternativt kan vi også komme tilbake ved hjelp av en implisitt etikett:

@Test fun givenLambda_whenReturnWithImplicitLabel_thenComplete () {var result = "" "hallo_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 vil returoppgaven også komme tilbake til innringeren av lambda - den for hver Løkke.

Endelig, komme tilbake kan brukes med en etikett til søke om gå i stykker logikk til lambdauttrykk avtilbake til en etikett utenfor:

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

6. Konklusjon

I denne artikkelen har vi gått gjennom brukssakene til tilbake, pause, fortsett i Kotlin.

Eksempelkoden ble funnet på GitHub.


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