官术网_书友最值得收藏!

Elvis operator

The elvis operator is represented by a question mark followed by a colon (?:) and has a syntax such as the following:

    first operand ?: second operand 

The elvis operator works as follows: if first operand is not null, then this operand will be returned, otherwise second operand will be returned. The elvis operator allows us to write very concise code.

We can apply the elvis operator to our example to retrieve the variable locked, which will always be non-nullable:

override fun onCreate(savedInstanceState: Bundle?) { 
super.onCreate(savedInstanceState) 
val locked: Boolean = savedInstanceState?.getBoolean("locked") ?: false 
} 

In the preceding example, the elvis operator will return a value of the savedInstanceState?.getBoolean("locked") expression if savedInstanceState is not null, otherwise it will return false. This way we can make sure that the locked variable will always have a non-nullable value. Thanks to the elvis operator, we can define a default value. Also, note that the right-hand side expression is evaluated only if the left-hand side is null. It is then providing a default value that will be used when the expression is nullable. Getting back to our quiz example from the previous section, we can easily modify the code to always return a non-nullable value:

    val correct = quiz.currentQuestion?.answer?.correct ?: false 

As the result, the expression will return the value returned by the correct property or false if any object in the safe call chain is null. This means that the value will always be returned, so non-nullable Boolean type is inferred.

The operator name comes from the famous American singer-songwriter Elvis Presley, because his hairstyle is similar to a question mark:

Source: http://dobsondev.com/2014/06/06/the-elvis-operator/

主站蜘蛛池模板: 惠安县| 平远县| 宁都县| 夏河县| 山西省| 满洲里市| 台北县| 阿图什市| 宜川县| 双城市| 西乌珠穆沁旗| 高要市| 南京市| 探索| 西林县| 金寨县| 合肥市| 天门市| 锦州市| 高邮市| 正蓝旗| 瓮安县| 葫芦岛市| 康平县| 滨海县| 临桂县| 临城县| 伊春市| 铅山县| 兴宁市| 凤冈县| 鄂尔多斯市| 浪卡子县| 巨鹿县| 乌鲁木齐县| 宁蒗| 富锦市| 当阳市| 彰化县| 深水埗区| 米林县|