2017-10-20 1 views
1

Zurück in Java habe ich nur return für eine Void-Methode geschrieben ... Aber Kotlin scheint nicht nur die Rückkehr zu erlauben, stattdessen verwendet [email protected]? Kann jemand erklären, was das ist und wie bringt es einen Mehrwert?Kotlin setOnclickListener

bAddLine.setOnClickListener { 
      val selectedSeries = getSelectedSeries() 
      if (selectedSeries.isEmpty()) { 
       Toast.makeText(this, getString(R.string.toast_channel_mandatory), Toast.LENGTH_LONG).show() 
       [email protected] 
      } 
     } 

Antwort

5

Von kotlinlang Website:

Return bei Labels

Mit Funktionsliteralen, lokale Funktionen und Objektausdruck, können Funktionen in Kotlin verschachtelt werden. Qualifizierte Rückgaben ermöglichen uns, von einer äußeren Funktion zurückzukehren. Der wichtigste Anwendungsfall ist die Rückkehr von einem Lambda-Ausdruck. Daran erinnern, dass, wenn wir schreiben dies:

fun foo() { 
    ints.forEach { 
     if (it == 0) return // nonlocal return from inside lambda directly to the caller of foo() 
     print(it) 
    } 
} 

Die return -Ausdrucks kehrt von der nächsten einschließenden Funktion, das heißt foo. (Beachten Sie, dass eine solche nicht-lokale Rückkehr nur für Lambda-Ausdrücke, um Inline-Funktionen übergeben werden unterstützt.) Wenn wir von einem Lambda-Ausdruck zurückkommen müssen, haben wir es beschriften und zu qualifizieren, die return:

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

Jetzt ist es, gibt nur vom Lambda-Ausdruck zurück. Oft ist es bequemer, implicits labels zu verwenden: Ein solches label hat denselben Namen wie die Funktion, an die das lambda übergeben wird.

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

Wenn in einem Lambda, müssen Sie welchen Bereich Sie angeben möchten return aus, weil sie mehrdeutig sein könnte. Siehe die offiziellen Dokumente über returning at labels.

In diesem speziellen Fall können Sie die return-Anweisung ganz weglassen, wenn Sie am Ende einer Funktion zurückkehren, die nichts zurückgibt.

Verwandte Themen