Мотивация
Эта статья написана для более опытных разработчиков, которые хотят быстро освоить язык Kotlin для работы или для интересных проектов.
Мы рассмотрим установку, базовый синтаксис и краткое введение в функции в этой статье, которая является частью 2 в длинном цикле.
- Часть 1 : Начало работы с Kotlin
- Часть 2 : Поток управления в Kotlin
- Часть 3 : Циклы и исключения в Kotlin (скоро выйдет)
Примечание: В этой статье я использую цикл For-Loop, чтобы смоделировать выборку из конечной последовательности от 0 до 10, но синтаксис относительно схож с другими языками.
Поток управления в Kotlin
В Kotlin у нас есть две основные конструкции, которые мы можем использовать, когда дело доходит до принятия решений.
If-Else
Первая — это конструкция if-else
, пример которой мы можем увидеть ниже.
fun main(){
val controlling:Int = 3;
if(controlling < 4){
println("The Value is less than 4")
}
else{
println("The value is larger than 4")
}
}
Это не кажется очень полезным, поэтому давайте, возможно, сделаем быстрый пример, где мы случайным образом генерируем 4 числа, используя пакет kotlin random
.
import kotlin.random.Random
fun main(){
var controlling:Int;
for( i in 1..4){
controlling = (0..10).random()
if(controlling < 4){
println("The Value of $controlling is less than 4")
}
else{
println("The value of $controlling is larger than 4")
}
}
}
который мы можем упростить до
import kotlin.random.Random
fun main(){
var controlling:Int;
for( i in 1..4){
controlling = (0..10).random()
println(
"The value of $controlling is ${
if(controlling > 4) "greater" else "less"
} than 4"
)
}
}
Это, в свою очередь, дает тот же результат
The value of 7 is greater than 4
The value of 10 is greater than 4
The value of 5 is greater than 4
The value of 8 is greater than 4
Когда использовать When? 🙂
Другим потенциальным способом выражения этой логики является использование конструкции when
.
import kotlin.random.Random
fun main(){
var controlling:Int;
for( i in 1..4){
controlling = (0..10).random()
when(controlling){
in 0..4 -> println("$controlling is less than or equal to 4")
in 5..10 -> println("$controlling is greater than 4")
else -> println("Unsupported Number")
}
}
}
Давайте немного пройдемся по этой логике.
-
Мы знаем, что
(0...10).random()
даст нам число в диапазоне от0
до10
. Это инклюзивный диапазон, что означает, что мы можем получить0
и10
. *Таким образом, мы знаем, что нам нужно сравнивать только те числа, которые находятся в этом диапазоне. * -
Мы хотим вывести «less than 4», если получим число меньше или равное 4, в противном случае мы выведем «greater than 4». Это означает, что мы разбиваем наше число на два неравных множества или группы.
Вот эти две группы
1,2,3,4 (выражается как 1..4)
5,6,7,8,9,10 (выражается как 5..10).
- Поэтому мы можем просто переписать, используя цикл
when
для проверки принадлежности к той или иной стороне.
В целом, я считаю, что цикл
When
более полезен, когда вам нужно сделать более двух или трех вариантов.
Некоторые полезные сокращения синтаксиса, которые следует запомнить при использовании When
, приведены ниже
- Конечное число различных вариантов
Давайте сначала перепишем наш исходный пример, чтобы воспользоваться синтаксисом ,
. Обратите внимание, что теперь мы не используем ключевое слово in
.
import kotlin.random.Random
fun main(){
var controlling:Int;
for( i in 1..4){
println(i)
controlling = (0..10).random()
when(controlling){
0,1,2,3,4 -> println("$controlling is less than or equal to 4")
5,6,7,8,9,10 -> println("$controlling is greater than 4")
else -> println("Unsupported Number")
}
}
}
Пример 2. Множественные условия
Давайте напишем короткий фрагмент, который поможет нам проверить, может ли пользователь войти в систему на основе заданного имени пользователя или пароля.
Примечание: При желании мы можем легко заменить следующий фрагмент на цикл if-else. Лично я думаю, что это сводится к вопросу предпочтений,
When
просто чище в целом для меня.
fun main(){
val correct_username = "john.smith"
val correct_password = "applebees"
val username_attempts = listOf(
"antique","john.smith","john.smith"
)
val password_attempts = listOf(
"applebees","apples","applebees"
)
for(i in 0..2){
when{
correct_password == password_attempts[i] && correct_username == username_attempts[i] -> println("Login Succesful")
correct_username != username_attempts[i] -> println("Wrong Username")
correct_password != password_attempts[i] -> println("Wrong Password")
else -> println("Horrible Attempt")
}
}
}
Заключение
Kotlin предоставляет две полезные конструкции, которые помогают нам иметь дело с пользовательским вводом и реализовывать логику в нашем коде. В следующей статье мы рассмотрим, как можно сократить избыточный код с помощью циклов!