From the course: Android Development Tips

Manage menus with when - Android Tutorial

From the course: Android Development Tips

Manage menus with when

- [Instructor] Kotlin replaces Java's switch statement with the key word When. Both When, and the If keyword, can be used in Kotlin either as a statement or as an expression that returns a value. This ability to use a conditional keyword as an expression makes it easy to evaluate multiple options and execute the appropriate code. So for example, let's say you have an Options menu. In this starting application, I have a menu called Menu Main, that has three options. Just labeled red, green, and blue. In the main activity, I'm loading that menu from On Create Options menu, and then I'm evaluating the selections in On Options Items Selected. This code looks just like the Java version, with a couple of differences. For example, the menu item might be null. So the question mark is added to the type to indicate that possibility. And then the first time that object is referenced there's also a null check. Otherwise, the code looks very similar to what you might get in Java, with an If statement, a couple of Else/Ifs, and an Else. Now, this is a perfect situation where you would use a Switch statement in Java, and in Kotlin, you would use When. And Android Studio will do the work for you. I'll place the cursor after the keyword If. Then I'll use an intention action, and I'll replace If with When. So now I'm evaluating Item ID, which is an integer. And I'm comparing it to three possible values. Resource IDs, and these are defined in the menu. If the comparison is true, then you use the arrow operator and call the resulting code. In this case, I'm calling functions called Handle Red, Handle Green, and Handle Blue. I'll run that code to show that it works as expected. I'll go to the options menu and choose red. And then green, and then blue. But now let's see what the code looks like when you use When as an expression. On Options Items Selected returns a boolean. So I'm going to prefix When with the keyword Return. And then I'll eliminate the keyword Return here. I no longer need the return statement at the bottom. Now I'm saying, return the results of column when as an expression. I pass in the item ID here, and then each of these functions, Handle Red and so on, each return a boolean value as well. I must have an L segment here to make sure that I'm always returning a boolean value. And in fact, I can replace this code with a simple value of false. So now I have incredibly readable and maintainable code. I'm basically saying, when I've evaluated this item ID value, I can then compare it to each of these values and call the resulting code. To make this even more concise, I can now eliminate the creation of the intermediate variable by passing an item comma dot itemid here, and then deleting that line above. I'll run the code again to make sure that nothing is broken. And as expected, I can choose items from the options menu and call the correct code in response. So this is one way of doing conditional logic in Kotlin. You can use both the If keyword and When as expressions rather than as statements. As long as the functions you call satisfy the requirements of your context, in this case I'm inside a function that requires returning a boolean value, and each of these functions returns that value. And now I can clearly see what happens when each menu item is selected.

Contents