Kotlin and idiomatic way to write, 'if not null, else…' based around mutable value

前端 未结 5 1666
谎友^
谎友^ 2021-02-01 12:53

Suppose we have this code:

class QuickExample {

    fun function(argument: SomeOtherClass) {
        if (argument.mutableProperty != null ) {
            doSome         


        
5条回答
  •  小蘑菇
    小蘑菇 (楼主)
    2021-02-01 13:48

    Update:

    As mentioned by franta on the comments, if the method doSomething() returns null, then the code on the right side of the elvis operator will be executed, which might not be the desired case for most. But at the same time, in this case, it is very likely that the doSomething() method will only do something and not return anything.

    And an alternative: as protossor has mentioned on the comments, also can be used rather than let, because also returns this object instead of the result of the function block.

    mutableProperty?.also { doSomething(it) } ?: doOtherThing()
    

    Original answer:

    I would use let with Elvis operator.

    mutableProperty?.let { doSomething(it) } ?: doOtherThing()
    

    From the doc:

    If the expression to the left of ?: is not null, the elvis operator returns it, otherwise it returns the expression to the right. Note that the right-hand side expression is evaluated only if the left-hand side is null.

    For a block of code after the right-hand side expression:

       mutableProperty?.let {
                doSomething(it)
            } ?: run {
                doOtherThing()
                doOtherThing()
            }
    

提交回复
热议问题