Основы Kotlin
#
Васильев Андрей Михайлович, 2024
Версии презентации
Минимальное приложение
#
За исключением конфигурации системы сборки минимальное приложение состоит только лишь из функции:
fun main() {
println("Я работаю!")
}
- Синтаксис языка Си-подобный, т.е. уже знакомый и привычный
- Для описания функций и методов используется ключевое слово
fun
- Аргументы описываются в скобках после имени функции
- Для вызова функции используется знакомый синтаксис: название функции, за которым в круглых скобках указывается набор аргументов
- Функция
println
выводит переданное ей значение на старндартный вывод, затем выводит символ новой строки
Неизменяемые переменные
#
Неизменяемые (только для чтения) локальные переменные определяются
с помощью ключевого слова val
- Присвоить им значение можно только один раз
- В большинстве случаев тип переменной может вывести компилятор из выражения
val a: Int = 1 // Инициализация при объявлении
val b = 1 // Тип `Int` определен автоматически
val c: Int // Указывать тип обязательно, если переменная не
// инициализирована сразу
c = 1 // Последующее присвоение
В таких переменных удобно фиксировать очередные значения вычисления:
val first = 10
val second = 32
val sum = first + second
val multiplication = first * second
Значение каждого этапа зафиксировано в своей переменной
Изменяемые переменные
#
Изменяемые переменные объявляются с помощью ключевого слова var
var x = 5 // Тип `Int` определен автоматически
x += 1
Вы можете объявлять глобальные переменные
val PI = 3.14
var x = 0
fun incrementX() {
x += 1
}
Теперь любая часть вашего приложения может в произвольный момент изменить
значение переменной x
Описание функций
#
Функция принимает два аргумента Int и возвращает Int
fun sum(a: Int, b: Int): Int {
return a + b
}
Функция, не возвращающая никакого значения (void в Java)
fun printSum(a: Int, b: Int): Unit {
println("сумма $a и $b равна ${a + b}")
}
Тип возвращаемого значения Unit может быть опущен
fun printSum(a: Int, b: Int) {
println("сумма $a и $b равна ${a + b}")
}
Типы аргументов функции
#
Типы аргументов функции должны быть явно описаны
fun printRight(a: Int, columnWidth: Int) {
val stringValue = a.toString()
val offsetLength = columnWidth - stringValue.length
val offset = " ".repeat(offsetLength)
print(offset)
println(stringValue)
}
Компилятор не может автоматически понять тип переменной и при следующей записи
будет выведена сооветствующая ошибка
Автоматический вывод типов должен опираться на какие-то базовые значения,
которыми зачастую выступают аргументы функции
Функции одного выражения
#
В качестве тела функции может выступать выражение. Тогда тип возвращаемого
значения определяется автоматически
fun sum(a: Int, b: Int) = a + b
Выражение не обязательно должно быть записано одну строку, оно может быть
многострочным
У такой функции тоже может быть определён тип возвращаемого значения
fun multiply(a: Double, b: Double): Double = a * b
Строковые шаблоны
#
Допустимо использование переменных внутри строк в формате $name
или ${name}
:
fun main(args: Array<String>) {
if (args.size == 0) return
print("Первый аргумент: ${args[0]}")
}
var a = 1
// просто имя переменной в шаблоне:
val s1 = "a равно $a"
a = 2
// произвольное выражение в шаблоне:
val s2 = "${s1.replace("равно", "было равно")}, но теперь равно $a"
Условные выражения
#
Kotlin поддерживает классический взгляд на условный оператор
fun maxOf(a: Int, b: Int): Int {
if (a > b) {
return a
} else if (a == b) {
return a
} else {
return b
}
}
Условные выражения
#
Однако if
является условным выражением, т.е. он может иметь результат, который
может быть записан в переменную
val fist = 1
val second = 2
val max = if(first > second) first else second
Значение каждой ветки условного оператора должно возвращать значения одинакового
типа
val info = if (10 > 15) true else 42
val more = info + 1 // Невозможно понять какой тип у переменной info