Kotlin návrat, zlom, pokračovanie Kľúčové slová
1. Prehľad
V tomto tutoriáli sa budeme venovať použitiu výrazov štrukturálneho skoku v Kotline.
Jednoducho povedané, Kotlin má tri výrazy štrukturálneho skoku: vrátiť sa, zlomiť, pokračovať. V ďalších častiach sa budeme zaoberať ich funkciami so štítkom aj bez neho.
2. Štítky v Kotline
Akékoľvek výrazy v Kotline môžu byť označené štítkom.
Štítok vytvoríme pomocou identifikátora, za ktorým nasleduje „@” podpísať. Napríklad, [chránené e-mailom], [chránené e-mailom] sú platné štítky.
Ak chcete označiť výraz, jednoducho ho pridáme pred neho:
[chránené e-mailom] pre (i v 1..10) {// nejaký kód}
3. The Prestávka Vyhlásenie
Bez štítku, prestávka ukončí najbližšiu uzatvárajúcu slučku.
Pozrime sa na príklad:
@Test fun givenLoop_whenBreak_thenComplete () {var value = "" for (i in "hello_world") {if (i == '_') break value + = i.toString ()} assertEquals ("hello", value)}
Prípadne môžeme použiť prestávka štítkom, ktorý ukončuje slučku označenú týmto štítkom:
@Test zábava givenLoop_whenBreakWithLabel_thenComplete () {var value = "" [chránený e-mailom] pre (i v 'a' .. 'd') {pre (j v 1..3) {hodnota + = "" + i + j ak (i == 'b' && j == 1) [chránený e-mailom] _loop}} assertEquals ("a1a2a3b1", hodnota)}
V tomto prípade je vonkajšia slučka ukončená, keď i a j premenné rovnajúce sa „b“ a „1“.
4. The ďalej Vyhlásenie
Ďalej sa pozrime na ďalej kľúčové slovo, ktoré môžeme použiť aj s označením alebo bez neho.
Bez štítku, ďalej prejde na ďalšiu iteráciu uzatvárajúcej slučky:
@Test fun givenLoop_whenContinue_thenComplete () {var result = "" for (i in "hello_world") {if (i == '_') continue result + = i} assertEquals ("helloworld", result)}
Na druhej strane, keď používame ďalej so štítkom označujúcim slučku, prejde na ďalšiu iteráciu tejto slučky:
@Test fun givenLoop_whenContinueWithLabel_thenComplete () {var result = "" [chránený e-mailom] pre (i v 'a' .. 'c') {for (j v 1..3) {if (i == 'b') [ chránené e-mailom] _loop result + = "" + i + j}} assertEquals ("a1a2a3c1c2c3", výsledok)}
V tomto príklade sme použili ďalej preskočiť jednu iteráciu označenej slučky outer_loop.
5. Návrat Vyhlásenie
Bez štítku vráti sa k najbližšej uzavieracej funkcii alebo anonymnej funkcii:
@Test fun givenLambda_whenReturn_thenComplete () {var result = returnInLambda (); assertEquals ("ahoj", výsledok)} súkromná zábava returnInLambda (): reťazec {var result = "" "hello_world" .forEach {if (it == '_') vráti výsledok výsledku + = it.toString ()} // tento riadok nebude dosiahnutý výsledok návratu; }
Návrat je tiež užitočné, keď chceme uplatniť ďalej logika na anonymfunkcie:
@Test fun givenAnonymousFunction_return_thenComplete () {var result = "" "hello_world" .forEach (fun (element) {if (element == '_') return result + = element.toString ()}) assertEquals ("helloworld", result )}
V tomto príklade návrat vyhlásenie sa vráti volajúcemu anonymnej zábavy, t. j pre každý slučka.
V prípade výrazu lambda môžeme tiež použiť návrat so štítkom na dosiahnutie podobného výsledku:
@Test zábava givenLambda_whenReturnWithExplicitLabel_thenComplete () {var result = "" "hello_world" .forEach [chránený e-mailom] {if (it == '_') {[chránený e-mailom]} výsledok + = it.toString ()} assertEquals ("helloworld" ", výsledok)}
Prípadne môžeme tiež návrat pomocou implicitného označenia:
@Test fun givenLambda_whenReturnWithImplicitLabel_thenComplete () {var result = "" "hello_world" .forEach {if (it == '_') {// lokálny návrat k volajúcemu lambda, tj. Slučka forEach [chránená e-mailom]} + = it.toString ()} assertEquals ("helloworld", výsledok)}
Vo vyššie uvedenom príklade sa príkaz return vráti aj volajúcemu lambda - pre každý slučka.
Nakoniec návrat možno použiť s označením na uplatniť prestávka logika výrazov lambda podľanávrat k štítku vonku:
@Test fun givenAnonymousFunction_returnToLabel_thenComplete () {var result = "" spustiť [chránený e-mailom] {"hello_world" .forEach {if (it == '_') [chránený e-mailom] výsledok + = it.toString ()}} assertEquals (" ahoj ", výsledok)}
6. Záver
V tomto článku sme prešli prípadmi použitia vrátiť sa, zlomiť, pokračovať v Kotline.
Ukážkový kód nájdete na GitHub.