2017-05-26 5 views
1

Kotlinでは、関数の最後のステートメントを戻り値として解釈できます。式として使用されるKotlin関数の場合、操作して値を返す簡潔な方法はありますか?

次の例のような状況を簡略化して冗長にすることはできますか?

{ text: String -> 
    val validated = validateText(text) 
    if (validated) { 
    actOnValidation() 
    } 
    validated 
} 

私はこれをやりたい具体的なケースではRxJavaを使用した例では以下です - それが存在する場合は、より良いRxのアプローチがあります場合でも、私はまた、純粋なKotlinソリューションに興味があります。

fun inputChainObservable(targetField: TextView, chainedField: TextView): Observable<Boolean> { 
    return targetField.textChanges() 
     .observeOn(AndroidSchedulers.mainThread()) 
     .map { cs: CharSequence? -> 
     val hasInput = validateText(cs.toString()) 
     if (hasInput) { 
      chainedField.requestFocus() 
     } 
     hasInput 
     } 
} 

答えて

5

あなたは上で動作し、受信機を返すためにalso()を使用することができます。

{ text: String -> 
    validateText(text).also { valid -> 
     if (valid) actOnValidation() 
    } 
} 

また、このようにそれを書くことができますが、私はそれが明確だと思うので、私は最初の形式を好む:

{ text: String -> 
    validateText(text).also { 
     if (it) actOnValidation() 
    } 
} 
関連する問題