Похожие презентации:
Введение в язык программирования Kotlin
1.
2.
KOTLIN• статически типизированный
• создан компанией JetBrains
• позволяет писать кроссплатформенный код, который будет применяться на всех платформах
• Google на конференции Google I/O 2017 провозгласила Kotlin одним из официальных языков для разработки
под Android (наряду с Java и C++), а инструменты по работе с данным языком были по умолчанию включены
в функционал среды разработки Android Studio начиная с версии 3.0.
• ОФИЦИАЛЬНЫЙ САЙТ ЯЗЫКА - HTTPS://KOTLINLANG.ORG/
3.
ПЕРЕМЕННЫЕval|var имя_переменной: тип_переменной
Val – константа, не изменяемая переменная
Var – переменная, которая может менять значение
fun main() {
val age: Int
age = 23
println(age)
}
fun main() {
fun main() {
var age: Int
age = 23
println(age)
age = 56
println(age)
val age: Int =
23
println(age)
}
}
4.
ТИПЫ ДАННЫХ. ЦЕЛЫЕ ЧИСЛАByte: хранит целое число от -128 до 127 и занимает 1 байт
Short: хранит целое число от -32 768 до 32 767 и занимает 2 байта
Int: хранит целое число от -2 147 483 648 (-231) до 2 147 483 647 (231 - 1) и занимает 4 байта
Long: хранит целое число от –9 223 372 036 854 775 808 (-263) до 9 223 372 036 854 775 807 (263-1) и
занимает 8 байт
Целочисленные типы без знака:
UByte: хранит целое число от 0 до 255 и занимает 1 байт
UShort: хранит целое число от 0 до 65 535 и занимает 2 байта
UInt: хранит целое число от 0 до 232 - 1 и занимает 4 байта
ULong: хранит целое число от 0 до 264-1 и занимает 8 байт
5.
ТИПЫ ДАННЫХ: ВЕЩЕСТВЕННЫЕ ЧИСЛАFloat: хранит число с плавающей точкой от -3.4*1038 до 3.4*1038 и занимает 4 байта
Double: хранит число с плавающей точкой от ±5.0*10-324 до ±1.7*10308 и занимает 8 байта.
val height: Double = 1.78
val pi: Float = 3.14F
println(height)
// 1.78
println(pi)
// 3.14
Чтобы присвоить число объекту типа Float
после числа указывается суффикс f или F.
6.
ЛОГИЧЕСКИЙ ТИП ДАННЫХ BOOLEAN• ТИП BOOLEAN МОЖЕТ ХРАНИТЬ ОДНО ИЗ ДВУХ ЗНАЧЕНИЙ: TRUE (ИСТИНА)
ИЛИ FALSE (ЛОЖЬ).
val a: Boolean = true
val b: Boolean = false
7.
СИМВОЛЫ - CHAR• СИМВОЛЬНЫЕ ДАННЫЕ ПРЕДСТАВЛЕНЫ ТИПОМ CHAR. ОН ПРЕДСТАВЛЯЕТ ОТДЕЛЬНЫЙ
СИМВОЛ, КОТОРЫЙ ЗАКЛЮЧАЕТСЯ В ОДИНАРНЫЕ КАВЫЧКИ.
\t: табуляция
val a: Char = 'A'
\n: перевод строки
val b: Char = 'B'
\r: возврат каретки
val c: Char = 'T'
\': одинарная кавычка
\": двойная кавычка
\\: обратный слеш
8.
СТРОКИ - STRING• СТРОКА ПРЕДСТАВЛЯЕТ ПОСЛЕДОВАТЕЛЬНОСТЬ СИМВОЛОВ, ЗАКЛЮЧЕННУЮ В
ДВОЙНЫЕ КАВЫЧКИ, ЛИБО В ТРОЙНЫЕ ДВОЙНЫЕ КАВЫЧКИ
fun main() {
fun main() {
val text: String = """
SALT II was a series of talks between United States
and Soviet negotiators from 1972 to 1979.
It was a continuation of the SALT I talks.
val name: String = "Eugene"
println(name)
}
"""
println(text)
}
9.
НЕЯВНАЯ ТИПИЗАЦИЯ• KOTLIN ПОЗВОЛЯЕТ ВЫВОДИТЬ ТИП ПЕРЕМЕННОЙ НА ОСНОВАНИИ ДАННЫХ,
КОТОРЫМИ ПЕРЕМЕННАЯ ИНИЦИАЛИЗИРУЕТСЯ
val age = 5
val name = "Tom"
10.
ШАБЛОНЫ СТРОК• ШАБЛОНЫ СТРОК (STRING TEMPLATES) ПРЕДСТАВЛЯЮТ УДОБНЫЙ СПОСОБ ВСТАВКИ В
СТРОКУ РАЗЛИЧНЫХ ЗНАЧЕНИЙ, В ЧАСТНОСТИ, ЗНАЧЕНИЙ ПЕРЕМЕННЫХ. ТАК, С ПОМОЩЬЮ
ЗНАКА ДОЛЛАРА $ МЫ МОЖЕМ ВВОДИТЬ В СТРОКУ ЗНАЧЕНИЯ РАЗЛИЧНЫХ ПЕРЕМЕННЫХ
fun main() {
val firstName = "Tom"
val lastName = "Smith"
val name = "Tom"
val age = 22
val welcome = "Hello, $firstName $lastName" val userInfo = "Your name: $name Your age: $age"
println(welcome)
// Hello, Tom Smith
}
11.
ВВОД И ВЫВОД ДАННЫХ В КОНСОЛИВывод
• print()
• println()
• println("Kotlin")
Ввод
• readLine()
• val name = readLine()
12.
АРИФМЕТИЧЕСКИЕ ОПЕРАЦИИ+
• val x = 5
• val y = 6
• val z = x + y
• println(z) // z = 11
• val x = 5
• val y = 6
• val z = x - y
• // z = -1
*
• val x = 5
• val y = 6
• val z = x * y
• // z = 30
/
• val x = 11
• val y = 5
• val z = x / y // z =2
• При делении
целых чисел
дробная часть в
результате
отбрасывается –
целочисленное
деление
• val x = 11
• val y = 5.0
• val z = x / y
• // z =2.2
• Y имеет тип
Double, поэтому
и z также получит
тип Double
%
• остаток от
деления
• val x = 65
• val y = 10
• val z = x % y
• // z = 5
13.
ИНКРЕМЕНТ И ДЕКРЕМЕНТ++y
y++
--y
y--
• Префиксный
инкремент возвращает
увеличенное
значение
• var x = 5
• val y = ++x
• // x = 6
• // y = 6
• Постфиксный
инкремент возвращает
значение до
увеличения
на единицу
• var x = 5
• val y = x++
• // x = 6
• // y = 5
• Префиксный
декремент уменьшает
значение на
единицу
• var x = 5
• val y = --x
• // x = 4
• // y = 4
• Постфиксный
декремент возвращает
значение до
уменьшения
на единицу
• var x = 5
• val y = x-• // x = 4
• // y = 5
14.
+=присваивание после сложения. Присваивает левому операнду сумму левого
-=
присваивание после вычитания. Присваивает левому операнду разность
*=
присваивание после умножения. Присваивает левому операнду
/=
присваивание после деления. Присваивает левому операнду частное левого
%=
присваивание после деления по модулю. Присваивает левому операнду
и правого операндов:
A += B эквивалентно A = A + B
левого и правого операндов: A -= B эквивалентно A = A - B
произведение левого и правого операндов: A *= B эквивалентно A = A * B
и правого операндов: A /= B эквивалентно A = A / B
остаток от целочисленного деления левого операнда на правый: A %=
B эквивалентно A = A % B
15.
УСЛОВНЫЕ ВЫРАЖЕНИЯ>
<
==
!=
<=
>=
16.
ЛОГИЧЕСКИЕ ОПЕРАЦИИand
возвращает
true, если оба
операнда равны
true.
• val a = true
• val b = false
• val c = a and
b // false
• val d = (11 >= 5)
and (9 < 10) //
true
or
возвращает
true, если хотя
бы один из
операндов
равен true.
• val a = true
• val b = false
• val c = a or
b
// true
• val d = (11 < 5)
or (9 > 10) //
false
xor
возвращает
true, если
только один из
операндов
равен true. Если
операнды
равны,
возвращается
false
• val a = true
• val b = false
• val c = a xor b //
true
• val d = a xor (90
> 10)
// false
!
возвращает
true, если
операнд равен
false. И,
наоборот, если
операнд равен
true,
возвращается
false.
• val a = true
• val b = !a // false
• val c = !b // true
not()
В качестве
альтернативы
оператору !
можно
использовать
метод
• val a = true
• val b = a.not() //
false
• val c = b.not() //
true
in
!in
возвращает
Проверяет, что
true, если
операнд
имеется в
некоторой
последовательн
ости.
• val a = 5
• val b = a in
1..6
• // true - число 5
входит в
последовательн
ость от 1 до 6
• val c = 4
• val d = c in
11..15
• // false - число
4 НЕ входит в
последовательн
ость от 11 до 15
числа нет в
указанной
последовательн
ости
операторов !in:
• val a = 8
• val b = a !in
1..6
• // true - число 8
не входит в
последовательн
ость от 1 до 6
17.
УСЛОВНЫЕ КОНСТРУКЦИИОбщий вид
if (условие) {
операторы
}
else {
операторы
}
Пример
val a = 10
if(a == 10) {
println("a равно 10")
}
else{
println("a НЕ равно 10")
}
Общий вид (вложенное условие)
if (условие1) {
операторы1
}
else if (условие2) {
операторы2
}
else {
операторы3
}
val a = 10
if(a == 10) {
println("a равно 10")
}
else if(a == 9){
println("a равно 9")
}
else if(a == 8){
println("a равно 8")
}
else{
println("a имеет неопределенное значение")
}
18.
ВОЗВРАЩЕНИЕ ЗНАЧЕНИЯ ИЗ IFнайдем максимальное из двух чисел:
Если при определении возвращаемого значения надо
выполнить еще какие-нибудь действия, то можно заключить
эти действия в блоки кода. В конце каждого блока
указывается возвращаемое значение
val a = 10
val a = 10
val b = 20
val b = 20
val c = if (a > b){
println("a = $a")
a
val c = if (a > b) a else b
println(c) // 20
} else {
println("b = $b")
b
}
19.
КОНСТРУКЦИЯ WHENКонструкция when проверяет значение некоторого объекта и в зависимости от его значения выполняет тот или иной
код. Конструкция when аналогична конструкции switch в других языках.
Если значение объекта равно одному из значений в блоке кода when, то выполняются
соответствующие действия, которые идут после оператора -> после соответствующего
значения
when(объект){
val isEnabled = true
when(isEnabled){
значение1 -> действия1
значение2 -> действия2
false -> println("isEnabled off")
true -> println("isEnabled on")
}
значениеN -> действияN
}
val a = 30
when(a){
10 -> println("a = 10")
20 -> println("a = 20")
else -> println("неопределенное значение")
}
20.
КОНСТРУКЦИЯ WHEN – СРАВНЕНИЕ СНАБОРОМ ЗНАЧЕНИЙ
val a = 10
when(a){
10, 20 -> println("a = 10 или a = 20")
val a = 10
when(a){
in 10..19 -> println("a в диапазоне от 10 до 19")
else -> println("неопределенное значение")
in 20..29 -> println("a в диапазоне от 20 до 29")
}
!in 10..20 -> println("a вне диапазона от 10 до 20")
else -> println("неопределенное значение")
val a = 10
val b = 5
}
val c = 3
when(a){
b - c -> println("a = b - c")
b + 5 -> println("a = b + 5")
Оператор in позволяет узнать, есть ли значение в
определенном диапазоне,
Связка операторов !in позволяет проверить отсутствие
значения в определенной последовательности.
else
значение")
}
->
println("неопределенное
21.
WHENтакже может может принимать динамически вычисляемый объект
val a = 10
val a = 10
val b = 20
when(a + b){
10 -> println("a + b = 10")
20 -> println("a + b = 20")
30 -> println("a + b = 30")
val b = 26
when(val c = a + b){
10 -> println("a + b = 10")
20 -> println("a + b = 20")
else -> println("Undefined")
}
val sum = 1000
else -> println("c = $c")
}
Как и if конструкция when может возвращать значение
val rate = when(sum){
in 100..999 -> 10
in 1000..9999 -> 15
else -> 20
}
println(rate)
// 15
22.
ЦИКЛ - FORВложенный цикл
for(переменная in последовательность){
выполняемые инструкции
}
for(i in 1..9){
for(j in 1..9){
print("${i * j} \t")
}
println()
for(n in 1..9){
print("${n * n} \t")
}
}
В данном случае перебирается последовательность чисел от 1 до 9. При каждом проходе
цикла (итерации цикла) из этой последовательности будет извлекаться элемент и
помещаться в переменную n. И через переменную n можно манипулировать значением
элемента. То есть в данном случае мы получим следующий консольный вывод:
1
4
9
16
25
36
49
64
81
23.
ЦИКЛ – WHILEwhile (условие) {тело цикла}
do {тело цикла} While (условие)
Цикл while повторяет определенные действия пока истинно некоторое условие:
var i = 10
while(i > 0){
println(i*i)
i--;
}
Здесь пока переменная i больше 0, будет выполняться цикл,
в котором на консоль будет выводиться квадрат значения i.
var i = -1
do{
println(i*i)
i--;
}
while(i > 0)
24.
NULL-ПЕРЕМЕННЫЕ25.
ЗНАЧЕНИЕ NULLfun main() {
var favoriteActor : String = "Sandra"
println(favoriteActor)
favoriteActor = null
}
Null – это пустота.
Значение не задано и
в ячейке favoriteActor
пусто
При попытке переменной типа String поменять
значение на null будет ошибка.
26.
NULLABLE ПЕРЕМЕННЫЕТипы, допускающие значение NULL
• это переменные,
которые могут содержать null
Ненулевые типы
• это переменные, которые не
могут содержать null
fun main() {
var favoriteActor: String? = "Sandra"
favoriteActor = null
}
27.
Int?fun main() {
var number: Int? = 10
println(number)
number = null
println(number)
Создаем переменную типа Int, допускающую значение NULL, а затем
присвойте ей значение 10 и выводим на печать
Задаем переменной значение NULL и выводим на печать
}
Примечание. Используйте NULLable переменные, тогда, когда переменная действительно может
получить значение null. И используйте обычные типы данных в ситуациях, когда значение Null не будет
появляться. Так как доступ к переменным, допускающим значение NULL, требует более сложной
обработки.
28.
ОБРАБОТКА NULLABLE ПЕРЕМЕННЫХfun main() {
var favoriteActor: String = "Sandra"
println(favoriteActor.length)
}
fun main() {
var favoriteActor: String? = "Sandra"
println(favoriteActor.length)
}
Создали строковую переменную и вывели в
консоль ее длину. Результат вывода 6, так как
длина строки 6 символов.
Если переменная nullable строкового типа, то
при попытке обратится к свойству переменной
получите ошибку
Синтаксическая ошибка. Котлин не дает обратится к свойству Nullable переменной, так как есть
вероятность, что там может оказаться значение Null. При попытке обратится к свойству
переменной, имеющей значение Null, во время работы приложения, приложение аварийно
завершит работу (Ошибка времени выполнения). Чтобы обезопасить код, Котлин принудительно
проверяет null-типы. Как работать на следующем слайде.
29.
ОПЕРАТОР БЕЗОПАСНОГО ВЫЗОВА «?.»fun main() {
var favoriteActor: String? = "Sandra"
println(favoriteActor?.length)
}
Выведется количество
символов: 6
fun main() {
var favoriteActor: String? = null
println(favoriteActor?.length)
}
Выведется : null
Обратите внимание, программа не выполнила аварийного завершения работы, несмотря на
обращение к свойству length переменной, имеющей значение Null. Оператор безопасного вызова
просто возвращает значение null
30.
NOT-NULL ОПЕРАТОР УТВЕРЖДЕНИЯ «!!»если вы используете утверждение not-null !!, это означает, что вы утверждаете, что значение переменной не
равно null, независимо от того, так это или нет.
В отличие от операторов безопасного вызова ?., использование оператора утверждения !!, может привести к выдаче ошибки
NullPointerException, если переменная, допускающая значение NULL, действительно равна null. Таким образом, это следует
делать только в том случае, если переменная всегда не допускает значения NULL или если установлена правильная обработка
исключений. Если исключения не обрабатываются, они вызывают ошибки во время выполнения.
fun main() {
var favoriteActor: String? =
"Sandra"
println(favoriteActor!!.length)
}
fun main() {
var favoriteActor: String? = null
println(favoriteActor!!.length)
}
Выведет 6
При запуске получите ошибку времени выполнения NullPointerException
31.
ПРОВЕРКА NULL ПЕРЕМЕННЫХ IF/ELSEfun main() {
var favoriteActor: String? = "Иванов"
if (favoriteActor != null) {
println("Количество символов в имени актера
${favoriteActor.length}.")
}
}
Результат: Количество символов в имени актера 6
fun main() {
var favoriteActor: String? = null
if(favoriteActor != null) {
println(" Количество символов в имени актера
${favoriteActor.length}.")
} else {
println("Вы не указали имя актера")
}
}
Результат: Вы не указали имя актера
32.
ПРОВЕРКА NULL ПЕРЕМЕННЫХ IF/ELSEfun main() {
var favoriteActor: String? = "Иванов"
val lengthOfName = if (favoriteActor != null) {
favoriteActor.length
} else {
0
}
println("Количество символов в имени $lengthOfName.")
}
Создается переменная lengthOfName
Значение ей присваивается в
зависимости от условия if.
Если переменная favoriteActor не равна
null, то в
lengthOfName=favoriteActor.length,
иначе lengthOfName=0
33.
ОПЕРАТОР ЭЛВИСА ?:fun main() {
var favoriteActor: String? = "Иванов"
val lengthOfName = favoriteActor?.length ?: 0
println("Количество символов в имени $lengthOfName.")
}
Оператор Элвиса ?:— это оператор, который можно использовать вместе с оператором безопасного вызова ?.. С
помощью оператора Элвиса ?: вы можете добавить значение по умолчанию, когда оператор безопасного вызова ?.
возвращает значение null.
Принцип работы: Если переменная не равна null, выполняется выражение перед оператором ?: Элвиса. Если
переменная равна null , выполняется выражение после оператора Элвиса ?:.
34.
ЗАДАНИЕ 1. МОБИЛЬНЫЕ УВЕДОМЛЕНИЯОбычно ваш телефон предоставляет вам сводку уведомлений. В исходном коде, представленном в следующем фрагменте кода, напишите
программу, которая печатает сводное сообщение на основе количества полученных вами уведомлений. Сообщение должно включать:
Точное количество уведомлений, если их меньше 100.
99+как количество уведомлений, если их 100 и более.
fun main() {
val morningNotification = 51
val eveningNotification = 135
printNotificationSummary(morningNotification)
printNotificationSummary(eveningNotification)
}
fun printNotificationSummary(numberOfMessages: Int) {
// дополните код здесь.
}
Завершите функцию printNotificationSummary() так, чтобы программа напечатала следующие строки:
You have 51 notifications.
Your phone is blowing up! You have 99+ notifications.
35.
ЗАДАНИЕ 2. СТОИМОСТЬ БИЛЕТА В КИНОБилеты в кино обычно оцениваются по-разному в зависимости от возраста кинозрителей. В исходном коде, представленном в следующем
фрагменте кода, напишите программу, которая вычисляет цены на билеты в зависимости от возраста:
Стоимость детского билета составляет 15 рублей для людей до 12 лет.
Стандартная цена билета 30 рублей для людей от 13 до 60 лет. По понедельникам скидка на стандартную цену билета до 25 рублей
для этой же возрастной группы.
Цена билета для пожилых людей от 61 года и старше составляет 20 рублей. Предположим, что максимальный возраст кинозрителя 100 лет.
Значение -1, указывающее, что цена недействительна, когда пользователь вводит возраст, выходящий за пределы установленных
возрастных ограничений.
fun main() {
val child = 5
val adult = 28
val senior = 87
val isMonday = true
println("Цена билета в кино для человека в возрасте $child - ${ticketPrice(child, isMonday)} рублей.")
println ("Цена билета в кино для человека в возрасте $adult - ${ticketPrice(adult, isMonday)} рублей.")
println ("Цена билета в кино для человека в возрасте $senior - ${ticketPrice(senior, isMonday)} рублей.")
}
fun ticketPrice(age: Int, isMonday: Boolean): Int {
// напишите код здесь
}
Завершите ticketPrice()функцию так, чтобы программа напечатала следующие строки:
Цена билета для человека в возрасте 5 - 15 рублей.
Цена билета для человека в возрасте 28 - 25 рублей.
Цена билета для человека в возрасте 87 - 20 рублей.
36.
ЗАДАНИЕ 3:Представьте, что у вас есть жилой дом, который вы сдаете в аренду. Стоимость аренды, которую платит
каждый жилец, зависит от общего количества жильцов:
Если количество жильцов меньше 5, то стоимость аренды жилья на месяц равна 1000 рублей с
человека.
Если количество жильцов от 5 до 7, то стоимость аренды равна 800 рублям с человека.
Если количество жильцов более 7, то стоимость аренды равна 500 рублей с человека.
Напишите программу, реализующую подсчет общего количества денег, с помощью конструкции if-else.
С помощью констант/переменных задайте значения количества жильцов.
Программа на основе указанного количества жильцов в доме и в зависимости от стоимости аренды на
одного жильца возвращает общую сумму собираемых средств.
Оформите расчет задачи через функцию. Функция принимает количество жильцов и возвращает общее
количества денег за аренду.
Программирование