Котлин когда выражение
#KotlinВ Kotlin, когда заменяет оператор переключения других языков, таких как Java. Определенный блок кода должен выполняться, когда выполняется какое-то условие. Аргумент выражения when сравнивает все ветви одну за другой, пока не будет найдено какое-либо совпадение. После первого найденного совпадения он достигает конца блока when и выполняет код рядом с блоком when. В отличие от регистра переключателя в Java или любом другом языке программирования, нам не требуется оператор break в конце каждого сценария.
В Kotlin, когда можно использовать двумя способами:
- когда в качестве заявления
- когда как выражение
Использование когда в качестве утверждения с другими —
когда можно использовать как оператор с другой ветвью или без нее . Если он используется в качестве оператора, значения всех отдельных ветвей сравниваются последовательно с аргументом и выполняют соответствующую ветвь, где выполняется условие. Если ни одна из ветвей не удовлетворяет условию, тогда она выполнит ветвь else.
import java.util.Scanner;
fun main(args: Array<String>) {
var reader = Scanner(System.`in`)
print("Enter any largebody:")
var lb = reader.next()
when(lb) {
"Sun" -> println("Sun is a Star")
"Moon" -> println("Moon is a Satellite")
"Earth" -> println("Earth is a planet")
else -> println("I don't know anything about it")
}
}
Выход:
Enter any largebody: Sun Sun is a Star Enter any largebody: Mars I don't know anything about it
Использование когда в качестве заявления без остального —
Мы можем использовать when в качестве заявления без другой ветви. Если он используется в качестве оператора, значения всех отдельных ветвей сравниваются последовательно с аргументом и выполняют соответствующую ветвь, где выполняется условие. Если ни одна из ветвей не удовлетворяет условию, то он просто выходит из блока, ничего не выводя на системный вывод.
import java.util.Scanner;
fun main(args: Array<String>) {
var reader = Scanner(System.`in`)
print("Enter name:")
var lb = reader.next()
when(lb) {
"Sun" -> println("Sun is a Star")
"Moon" -> println("Moon is a Satellite")
"Earth" -> println("Earth is a planet")
}
}
Выход:
Enter name: Mars Process finished with exit code 0
Использование когда в качестве выражения —
Если оно используется в качестве выражения, значение ветви, которой удовлетворяется условие, будет значением общего выражения. Как выражение, когда возвращается значение, с которым совпадает аргумент, и мы можем сохранить его в переменной или распечатать напрямую.
import java.util.Scanner;
fun main(args: Array<String>) {
var reader = Scanner(System.`in`)
print("Enter the month number:")
var monthOfYear = reader.nextInt()
var month = when(monthOfYear){
1->"January"
2->"Febuary"
3->"March"
4->"April"
5->"May"
6->"June"
7->"July"
8->"August"
9->"September"
10->"October"
11->"November"
12->"December"
else -> {
println("Not a month of year")
}
}
println(month)
}
Выход:
Enter the month number:8 August
Если ни одно из условий ветвления не удовлетворено аргументом, выполняется ветвь else. В качестве выражения ветвь else является обязательной, если только компилятор не может доказать, что все возможные случаи покрыты условиями ветвления. Если мы не можем использовать другую ветку, это даст ошибку компилятора.
Error:(6, 17) Kotlin: 'when' expression must be exhaustive, add necessary 'else' branch
Различные способы использования when блокировке в Kotlin:
Объедините несколько веток в одну, используя запятую —
Мы можем использовать несколько веток в одной, разделенных запятой. Когда общая логика используется несколькими ветвями, мы можем объединить их в одну ветвь. В приведенном ниже примере нам нужно проверить, что введенное крупное тело является планетой или нет, поэтому мы объединили все названия планет в одну ветвь. Все, что введено, кроме имени планеты, выполнит ветвь else.
import java.util.Scanner;
fun main(args: Array<String>) {
var reader = Scanner(System.`in`)
print("Enter name of planet: ")
var name = reader.next()
when(name) {
"Mercury","Earth","Mars","Jupiter"
,"Neptune","Saturn","Venus","Uranus" -> println("Planet")
else -> println("Neither planet nor star")
}
}
Выход:
Enter name of planet: Earth Planet
Проверьте входное значение в диапазоне или нет —
Используя оператор in или ! In, мы можем проверить диапазон аргументов, передаваемых в блоке when. Оператор 'in' в Koltin используется для проверки существования определенной переменной или свойства в диапазоне. Если аргумент лежит в определенном диапазоне , то in операторе возвращает истину , и если аргумент не лежит в определенном диапазоне , то !in возвратах правда.
import java.util.Scanner;
fun main(args: Array<String>) {
var reader = Scanner(System.`in`)
print("Enter the month number of year: ")
var num = reader.nextInt()
when(num){
in 1..3 -> println("It is spring season")
in 4..6 -> println("It is summer season")
in 7..8 ->println("It is rainy season")
in 9..10 -> println("It is autumn season")
in 11..12 -> println("It is winter season")
!in 1..12 ->println("Enter valid month of year")
}
}
Выход:
Enter the month number of year: 5 It is summer season Enter the month number of year: 14 Enter valid month of year
Проверьте, является ли данная переменная определенного типа или нет —
Используя оператор is или ! Is, мы можем проверить тип переменной, переданной в качестве аргумента в блоке when. Если переменная имеет тип Integer, тогда is Int возвращает true, иначе возвращает false.
fun main(args: Array<String>) {
var num: Any = "GeeksforGeeks"
when(num){
is Int -> println("It is an Integer")
is String -> println("It is a String")
is Double -> println("It is a Double")
}
}
Выход:
It is a String
Использование when качестве замены для цепочки if-else-if —
Мы можем использовать когда в качестве замены для if-else-if. Если аргумент не указан, то условия ветвления являются просто логическими выражениями, и ветвление выполняется только тогда, когда его условие истинно:
fun isOdd(x: Int) = x % 2 != 0
fun isEven(x: Int) = x % 2 == 0
fun main(args: Array<String>) {
var num = 8
when{
isOdd(num) ->println("Odd")
isEven(num) -> println("Even")
else -> println("Neither even nor odd")
}
}
Выход:
Even
Убедитесь, что строка содержит определенный префикс или суффикс —
Мы также можем проверить префикс или суффикс в данной строке с помощью метода ниже. Если строка содержит префикс или суффикс, она вернет логическое значение true, иначе вернет false.
fun hasPrefix(company: Any) = when (company) {
is String -> company.startsWith("GeeksforGeeks")
else -> false
}
fun main(args: Array<String>) {
var company = "GeeksforGeeks a computer science portal"
var result = hasPrefix(company)
if(result) {
println("Yes, string started with GeeksforGeeks")
}
else {
println("No, String does not started with GeeksforGeeks")
}
}
Выход:
Yes, string started with GeeksforGeeks