2.09M
Категория: ИнформатикаИнформатика

Основы языка Kotlin

1.

Урок 1:
Основы языка Kotlin
Android Development with Kotlin v1.0
This work is licensed under the Apache 2 license.
1

2.

План
Lesson 1: Основы Kotlin








Установка среды
Операторы
Типы данных
Переменные
Условные операторы
Списки и массивы
NULL безопасность
Краткое содержание
Android Development with Kotlin
This work is licensed under the Apache 2 license.
2

3.

Установка среды
Android Development with Kotlin
This work is licensed under the Apache 2 license.
3

4.

Среда IntelliJ IDEA
Android Development with Kotlin
This work is licensed under the Apache 2 license.
4

5.

Создание нового проекта
Android Development with Kotlin
This work is licensed under the Apache 2 license.
5

6.

Название проек
та
Android Development with Kotlin
This work is licensed under the Apache 2 license.
6

7.

Открыть REPL (Read-Eval-Print-Loop)
Прежде чем меню Kotlin
появится в разделе
Tools, может пройти
несколько секунд.
Android Development with Kotlin
This work is licensed under the Apache 2 license.
7

8.

Создайте функцию printHello()
Нажмите
Control+Enter
(Command+Enter on
a Mac).
Android Development with Kotlin
This work is licensed under the Apache 2 license.
8

9.

Операторы
Android Development with Kotlin
This work is licensed under the Apache 2 license.
9

10.

Операторы
● Математические операторы
+ - * / %
● Операторы инкремент и декремент
++ --
● Операторы сравнения
< <=
● Оператор присвоения
=
● Операторы равенства
== !=
Android Development with Kotlin
> >=
This work is licensed under the Apache 2 license.
10

11.

Математические операторы с
целыми числами
1 + 1
=>
2
53 - 3
=>
50
50 / 10
=>
5
9 % 3
=>
0
Android Development with Kotlin
This work is licensed under the Apache 2 license.
11

12.

Математические операторы с вещественными числами
1.0 / 2.0
=>
0.5
2.0 * 3.5
=>
7.0
Android Development with Kotlin
This work is licensed under the Apache 2 license.
12

13.

Математические операторы
1+1
1.0/2.0
⇒ kotlin.Int = 2
⇒ kotlin.Double = 0.5
53-3
2.0*3.5
⇒ kotlin.Int = 50
⇒ kotlin.Double = 7.0
50/10
⇒ kotlin.Int = 5
Android Development with Kotlin
⇒ указывает
вывод вашего
кода
Результат
включает тип
(kotlin.Int).
This work is licensed under the Apache 2 license.
13

14.

Методы числовых операторов
Kotlin сохраняет числа как примитивы, но позволяет вызывать
методы для чисел, как если бы они были объектами.
2.times(3)
⇒ kotlin.Int = 6
3.5.plus(4)
⇒ kotlin.Double = 7.5
2.4.div(2)
⇒ kotlin.Double =
1.2
Android Development with Kotlin
This work is licensed under the Apache 2 license.
14

15.

Типы данных
Android Development with Kotlin
This work is licensed under the Apache 2 license.
15

16.

Целочисленные типы
Type
Bits
Notes
Long
64
From -263 to 263-1
Int
32
From -231 to 231-1
Short
16
From -32768 to 32767
Byte
8
From -128 to 127
Android Development with Kotlin
This work is licensed under the Apache 2 license.
16

17.

Числовые типы с плавающей запятой и другие
числовые типы
Type
Bits
Notes
Double
64
16 - 17 значащих цифр
Float
32
6 - 7 значащих цифр
Char
16
16-bit Unicode символ
Boolean
8
True или false. Операции включают в себя:
|| - или, && - и,
! - отрицание
Android Development with Kotlin
This work is licensed under the Apache 2 license.
17

18.

Типы операндов
Результаты операций сохраняют типы операндов.
6*50
⇒ kotlin.Int = 300
1/2
⇒ kotlin.Int = 0
6.0*50.0
⇒ kotlin.Double = 300.0
1.0*2.0
⇒ kotlin.Double = 0.5
6.0*50
⇒ kotlin.Double = 300.0
Android Development with Kotlin
This work is licensed under the Apache 2 license.
18

19.

Пример
Assign an Int to a Byte
val i: Int = 6
val b: Byte = i
println(b)
⇒ error: type mismatch: inferred type is Int but Byte was
expected
Convert Int to Byte with casting
val i: Int = 6
println(i.toByte())
⇒ 6
Android Development with Kotlin
This work is licensed under the Apache 2 license.
19

20.

Подчеркивания для длинных чисел
Используйте символы подчеркивания, чтобы сделать длинные
числовые константы более читабельными.
val oneMillion = 1_000_000
val idNumber = 999_99_9999L
val hexBytes = 0xFF_EC_DE_5E
val bytes = 0b11010010_01101001_10010100_10010010
Android Development with Kotlin
This work is licensed under the Apache 2 license.
20

21.

Строки
Строки — это любая последовательность символов, заключенная в двойные
кавычки.
val s1 = "Hello world!"
Строковые литералы могут содержать escape-символы.
val s2 = "Hello world!\n"
Или любой произвольный текст, ограниченный тройной кавычкой(""")
val text = """
var bikes = 50
"""
Android Development with Kotlin
This work is licensed under the Apache 2 license.
21

22.

Объединение строк
val numberOfDogs = 3
val numberOfCats = 2
"I have $numberOfDogs dogs" + " and $numberOfCats cats"
=> I have 3 dogs and 2 cats
Android Development with Kotlin
This work is licensed under the Apache 2 license.
22

23.

Строковые шаблоны
Выражение шаблона начинается со знака доллара ($) и может быть
простым значением:
val i = 10
println("i = $i")
i = 10 внутри фигурных скобок:
Или =>
выражение
val s = "abc"
println("$s.length is ${s.length}")
=> abc.length is 3
Android Development with Kotlin
This work is licensed under the Apache 2 license.
23

24.

Строковые выражения шаблона
val numberOfShirts = 10
val numberOfPants = 5
"I have ${numberOfShirts + numberOfPants} items of clothing"
=> I have 15 items of clothing
Android Development with Kotlin
This work is licensed under the Apache 2 license.
24

25.

Переменные
Android Development with Kotlin
This work is licensed under the Apache 2 license.
25

26.

Переменные
● Определение типа
● Компилятор сам определяет тип
● Явно определяется тип
● Изменяемые и неизменяемые переменные
● Неизменяемость не обязательна, но
рекомендуется
Котлин — статически типизированный язык. Тип определяется во
время компиляции и в последствии не изменяется.
Android Development with Kotlin
This work is licensed under the Apache 2 license.
26

27.

Указание типа переменной
Обозначение двоеточием
var width: Int = 12
var length: Double = 2.5
Важно: после того как тип был назначен вами или компилятором, вы
не сможете изменить тип или получите сообщение об ошибке.
Android Development with Kotlin
This work is licensed under the Apache 2 license.
27

28.

Изменяемые и неизменяемые переменные
● Изменяемая
var score = 10
● Неизменяемая(константа)
val name = "Jennifer"
Хотя это и не является строго обязательным, в большинстве случаев
рекомендуется использовать неизменяемые переменные.
Android Development with Kotlin
This work is licensed under the Apache 2 license.
28

29.

var и val
var count = 1
count = 2
val size = 1
size = 2
=> Error: val не может быть переназначен
Android Development with Kotlin
This work is licensed under the Apache 2 license.
29

30.

Условные операторы
Android Development with Kotlin
This work is licensed under the Apache 2 license.
30

31.

Поток управления
Kotlin предлагает несколько способов реализации
условной логики:
● If/Else объявление
● When объявление
● For цикл
● While цикл
Android Development with Kotlin
This work is licensed under the Apache 2 license.
31

32.

if/else объявление
val numberOfCups = 30
val numberOfPlates = 50
if (numberOfCups > numberOfPlates) {
println("Too many cups!")
} else {
println("Not enough cups!")
}
=> Not enough cups!
Android Development with Kotlin
This work is licensed under the Apache 2 license.
32

33.

if объявление с несколькими ветками
val guests = 30
if (guests == 0) {
println("No guests")
} else if (guests < 20) {
println("Small group of people")
} else {
println("Large group of people!")
}
⇒ Large group of people!
Android Development with Kotlin
This work is licensed under the Apache 2 license.
33

34.

Диапазоны
● Тип данных, содержащий диапазон сопоставимых значений
(например, целые числа от 1 до 100 включительно).
● Диапазоны ограничены
● Объекты внутри диапазона могут быть изменяемыми или
неизменяемыми.
Android Development with Kotlin
This work is licensed under the Apache 2 license.
34

35.

Диапазоны в if/else объявлениях
val numberOfStudents = 50
if (numberOfStudents in 1..100) {
println(numberOfStudents)
}
=> 50
Примечание. Вокруг оператора «диапазон до» (1..100) нет пробелов.
Android Development with Kotlin
This work is licensed under the Apache 2 license.
35

36.

when объявление
when (results) {
0
-> println("No results")
in 1..39 -> println("Got results!")
else -> println("That's a lot of results!")
}
⇒ That's a lot of results!
Помимо оператора When, вы также можете определить выражение,
которое будет возвращено.
Android Development with Kotlin
This work is licensed under the Apache 2 license.
36

37.

for цикл
val pets = arrayOf("dog", "cat", "canary")
for (element in pets) {
print(element + " ")
}
⇒ dog cat canary
Вам не нужно определять переменную-итератор и увеличивать ее при
каждом проходе.
Android Development with Kotlin
This work is licensed under the Apache 2 license.
37

38.

for цикл: элементы и индексы
for ((index, element) in pets.withIndex()) {
println("Item at $index is $element\n")
}
⇒ Item at 0 is dog
Item at 1 is cat
Item at 2 is canary
Android Development with Kotlin
This work is licensed under the Apache 2 license.
38

39.

for циклы: размеры и диапазоны шагов
for (i in 1..5) print(i)
⇒ 12345
for (i in 5 downTo 1) print(i)
⇒ 54321
for (i in 3..6 step 2) print(i)
⇒ 35
for (i in 'd'..'g') print (i)
⇒ defg
Android Development with Kotlin
This work is licensed under the Apache 2 license.
39

40.

while циклы
var bicycles = 0
while (bicycles < 50) {
bicycles++
}
println("$bicycles bicycles in the bicycle rack\n")
⇒ 50 bicycles in the bicycle rack
do {
bicycles-} while (bicycles > 50)
println("$bicycles bicycles in the bicycle rack\n")
⇒ 49 bicycles in the bicycle rack
Android Development with Kotlin
This work is licensed under the Apache 2 license.
40

41.

repeat циклы
repeat(2) {
print("Hello!")
}
⇒ Hello!Hello!
Android Development with Kotlin
This work is licensed under the Apache 2 license.
41

42.

Списки и массивы
Android Development with Kotlin
This work is licensed under the Apache 2 license.
42

43.

Списки
● Списки — это упорядоченные коллекции элементов
● Доступ к элементам списка можно получить программно
через их индексы.
● Элементы могут встречаться в списке более одного
раза
Примером списка является предложение: это группа слов, их порядок
важен, и они могут повторяться.
Android Development with Kotlin
This work is licensed under the Apache 2 license.
43

44.

Неизменяемый список с использованием listOf()
Объявите список, используя listOf() и распечатай это.
val instruments = listOf("trumpet", "piano", "violin")
println(instruments)
⇒ [trumpet, piano, violin]
Android Development with Kotlin
This work is licensed under the Apache 2 license.
44

45.

Изменяемый список с использованием mutableListOf()
Списки можно изменить с помощью mutableListOf()
val myList = mutableListOf("trumpet", "piano", "violin")
myList.remove("violin")
⇒ kotlin.Boolean = true
Если список определен с помощью val, вы не можете изменить список, на
который ссылается переменная, но вы все равно можете изменить
содержимое списка.
Android Development with Kotlin
This work is licensed under the Apache 2 license.
45

46.

Массивы
● Массивы хранят несколько элементов
● Доступ к элементам массива можно получить
программно через их индексы.
● Элементы массива изменяемы
● Размер массива фиксирован
Android Development with Kotlin
This work is licensed under the Apache 2 license.
46

47.

Массив использует arrayOf()
Массив строк можно создать с помощью arrayOf()
val pets = arrayOf("dog", "cat", "canary")
println(java.util.Arrays.toString(pets))
⇒ [dog, cat, canary]
Если массив определен с помощью val, вы не можете изменить, к какому
массиву относится переменная, но вы все равно можете изменить
содержимое массива.
Android Development with Kotlin
This work is licensed under the Apache 2 license.
47

48.

Массивы со смешанными или одиночными типами
Массив может содержать разные типы.
val mix = arrayOf("hats", 2)
Массив также может содержать только один тип (в данном случае целые
числа).
val numbers = intArrayOf(1, 2, 3)
Android Development with Kotlin
This work is licensed under the Apache 2 license.
48

49.

Объединение массивов
Используйте операатор +.
val numbers = intArrayOf(1,2,3)
val numbers2 = intArrayOf(4,5,6)
val combined = numbers2 + numbers
println(Arrays.toString(combined))
=> [4, 5, 6, 1, 2, 3]
Android Development with Kotlin
This work is licensed under the Apache 2 license.
49

50.

Null безопасность
Android Development with Kotlin
This work is licensed under the Apache 2 license.
50

51.

Null безопасность
● В Котлине переменные по умолчанию не могут быть
нулевыми.
● Вы можете явно присвоить переменной значение null,
используя оператор безопасного вызова.
● Разрешите исключения нулевого указателя, используя !!
оператор
● Вы можете проверить значение null, используя
оператор elvis (?:)
Android Development with Kotlin
This work is licensed under the Apache 2 license.
51

52.

Переменные не могут быть нулевыми
В Kotlin, по умолчанию null переменные не разрешены.
Объявите Int и присвойте ему значение null.
var numberOfBooks: Int = null
⇒ error: null не может быть значением ненулевого типа Int
Android Development with Kotlin
This work is licensed under the Apache 2 license.
52

53.

Безопасный вызов оператора
Оператор безопасного вызова (?) после типа указывает, что переменная
может иметь значение null.
Объявить Int? как обнуляемая переменная
var numberOfBooks: Int? = null
Не устанавливайте для переменной значение null, поскольку это может
иметь нежелательные последствия.
Android Development with Kotlin
This work is licensed under the Apache 2 license.
53

54.

Проверка на ноль
Проверьте, не имеет ли значение переменная NumberOfBooks значение
NULL. Затем уменьшите эту переменную.
var numberOfBooks = 6
if (numberOfBooks != null) {
numberOfBooks = numberOfBooks.dec()
}
Теперь посмотрим на способ написания этого кода в Kotlin с
использованием оператора безопасного вызова.
var numberOfBooks = 6
numberOfBooks = numberOfBooks?.dec()
Android Development with Kotlin
This work is licensed under the Apache 2 license.
54

55.

Оператор !!
Если вы уверены, что переменная не будет нулевой, используйте !! чтобы
принудительно перевести переменную в ненулевой тип. Затем вы можете
вызвать на нем методы/свойства.
val len = s!!.length
выдает NullPointerException, если s имеет значение null
Предупреждение: Так как !! выдаст исключение, его следует
использовать только в том случае, если сохранение нулевого значения
является исключительным.
Android Development with Kotlin
This work is licensed under the Apache 2 license.
55

56.

Оператор Elvis
Связывайте проверку на null с помощью оператора ?:
numberOfBooks = numberOfBooks?.dec() ?: 0
The ?: operator is sometimes called the "Elvis operator," because it's like a smiley
on its side with a pompadour hairstyle, like Elvis Presley styled his hair.
Android Development with Kotlin
This work is licensed under the Apache 2 license.
56

57.

Краткое содержание
Android Development with Kotlin
This work is licensed under the Apache 2 license.
57

58.

Summary
In Lesson 1, you learned how to:
Создайте проект IntelliJ IDEA, откройте REPL и выполните функцию.
Используйте операторы и методы числовых операторов.
Используйте типы данных, приведение типов, строки и шаблоны строк.
Используйте переменные и вывод типов, а также изменяемые и
неизменяемые переменные.
● Используйте условные выражения, поток управления и циклические
структуры.
● Используйте списки и массивы
● Используйте нулевые функции безопасности Kotlin.
Android Development with Kotlin
This work is licensed under the Apache 2 license.
58

59.

Практика
Практикуйте то, что вы узнали, пройдя по
ссылке
Lesson 1: Kotlin basics
Android Development with Kotlin
This work is licensed under the Apache 2 license.
59
English     Русский Правила