Глухих Михаил Игоревич mailto:...
Post on 09-Oct-2020
7 Views
Preview:
TRANSCRIPT
Минимум◦ Скачали Идею и настроили KotlinAsFirst
Оптимум◦ Сделали хотя бы что-то из первого урока и
отправили в Котоед
Пытались сделать, но что-то не получилось?
Ничего всю неделю не делали?◦ Срочно начать! Не откладывать!
2
Суммарно 4 недели на первые 3 урока
Далее по 2 недели на каждый урок
Итого 8 уроков за 14 недель и 1-2 недели в запасе
3
1. 11 октября. Ориентируйтесь на 3-4 сделанных урока.
2. ~15 ноября. Ориентируйтесь на 5-6сделанных уроков.
3. Конец семестра (~15 декабря). Ориентируйтесь на 7-8 сделанных уроков.
4
Мои лекции
Туториал
Документация Котлина◦ https://kotlinlang.org/docs/reference/
◦ https://kotlinlang.ru/docs/reference
Книги◦ https://www.atomickotlin.com/
◦ Kotlin в действии (Kotlin in Action). Дмитрий Жемеров, Светлана Исакова.
◦ Kotlin for Android Developers. Antonio Leiva.
5
https://www.coursera.org/learn/vvedenie-v-yazyk-kotlin
Тот же (+-) учебный проект
Видео-лекции по первым 7 урокам (свободный доступ)
Упражнения (платные в норме, бесплатные в приватной сессии Политеха)
Сертификат Coursera по завершении
6
7
Язык для общения человека с компьютером
8
Язык для общения человека с компьютером
Язык, на котором человек даёт команды компьютеру. Зачем? Чтобы решить определённую задачу
9
В некотором смысле – «книга» на языке программирования◦ Если говорить точнее – книга-квест
10
В некотором смысле – «книга» на языке программирования◦ Если говорить точнее – книга-квест
Состоит из команд, сгруппированных определённым образом◦ У книги – предложения, у программы – операторы
(statements)
11
В некотором смысле – «книга» на языке программирования◦ Если говорить точнее – книга-квест
Состоит из команд, сгруппированных определённым образом◦ У книги – предложения, у программы – операторы
(statements)
◦ У книги – абзацы, у программы –блоки операторов (statement blocks)
12
В некотором смысле – «книга» на языке программирования◦ Если говорить точнее – книга-квест
Состоит из команд, сгруппированных определённым образом◦ У книги – предложения, у программы – операторы
(statements)
◦ У книги – абзацы, у программы –блоки операторов (statement blocks)
◦ У книги – главы, у программы –функции/методы/процедуры (functions)
13
В некотором смысле – «книга» на языке программирования◦ Если говорить точнее – книга-квест
Состоит из команд, сгруппированных определённым образом
Программа реализует алгоритм(ы)
14
Часть программы. Выполняет определённую задачу
15
Часть программы. Выполняет определённую задачу
Имеет входы: параметры
Имеет выход: результат
Аналог: функция в математике
16
17
fun sqr(x: Int) = x * x
fun = ключевое слово
sqr = имя функции
x: Int = параметр функции◦ Int = тип параметра функции
“= x * x” = тело функции◦ x * x = результат функции
* = операция
Программа работает с данными, данные хранятся в памяти компьютера◦ Аналог в математике – переменные
◦ ~ Аналог в книге – имена собственные
18
Программа работает с данными, данные хранятся в памяти компьютера◦ Аналог в математике – переменные
◦ ~ Аналог в книге – имена собственные
Параметр x – вид данных
19
Программа работает с данными, данные хранятся в памяти компьютера◦ Аналог в математике – переменные
◦ ~ Аналог в книге – имена собственные
Параметр x: Int – вид данных
У параметра есть имя x и тип Int
20
Чтобы нельзя было везде хранить что угодно – слишком большая свобода вредит в программировании
Тип определяет те значения (множество значений), которые параметр может иметь
21
Как в языке C (также Java, C#, …)◦ int x
Как в языке Pascal (также Swift, Kotlin, …)◦ x: Int
Как в языке Python◦ x
22
Int = целое число -231 … 231 - 1
23
Int = целое число -231 … 231 – 1
Double = вещественное число (примерно) -1.7 * 10308 … 1.7 * 10308
24
Int = целое число -231 … 231 – 1
Double = вещественное число (примерно) -1.7 * 10308 … 1.7 * 10308
Boolean = true или false, истина или ложь
25
Int = целое число -231 … 231 – 1
Double = вещественное число (примерно) -1.7 * 10308 … 1.7 * 10308
Boolean = true или false, истина или ложь
Char = символ (из таблицы Unicode), с кодом 0 … 216 - 1
26
Int = целое число -231 … 231 – 1
Double = вещественное число (примерно) -1.7 * 10308 … 1.7 * 10308
Boolean = true или false, истина или ложь
Char = символ (из таблицы Unicode), с кодом 0 … 216 - 1
27
Int = целое число -231 … 231 – 1
Double = вещественное число (примерно) -1.7 * 10308 … 1.7 * 10308
Boolean = true или false, истина или ложь
Char = символ (из таблицы Unicode), с кодом 0 … 216 – 1
String = строка = любое количество Char
28
Int : точный тип, Double : приближённый
29
Int : точный тип, Double : приближённый
Диапазон значений Double гораздо шире
30
Int : точный тип, Double : приближённый
Диапазон значений Double гораздо шире
Операции над целыми числами дают целый результат: 5 / 2 = 2
Операции над вещественными числами дают вещественный результат: 5.0 / 2.0 = 2.5, 5 / 2.0 = 2.5
31
Int : точный тип, Double : приближённый
Диапазон значений Double гораздо шире
Операции над целыми числами дают целый результат: 5 / 2 = 2
Операции над вещественными числами дают вещественный результат: 5.0 / 2.0 = 2.5, 5 / 2.0 = 2.5
Преобразования: n.toDouble(), x.toInt()
32
Тоже разновидность данных, но без имени
Имеют, однако, тип и значение
Варианты◦ Int : 42, -256
◦ Double : 1.0, 3.1415, 6.67e-11
◦ Boolean : true, false
◦ Char : 'a', 'z'
◦ String : "Hello", ""
33
Элементарные арифметические, логические и прочие действия, обозначаемые знаком операции = оператором (operator, не путать со statement)
34
Сложение a + b
Вычитание a – b
Умножение a * b
Деление a / b
Остаток от деления a % b
Скобки ( … )
35
Используются, чтобы различать различные элементы программы
Есть у функций, параметров, переменных, типов, …
36
Обязаны начинаться с буквы (или с символа _ что не рекомендуется)
Состоят из букв, цифр, символа _
Прописные и строчные буквы различаются◦ Как и в большинстве распространённых языков –
но не в Паскале
37
Только латинские буквы, никаких моё_имя_123
Нет транслитерации, никаких dlinaOtrezka
38
Только латинские буквы, никаких моё_имя_123
Нет транслитерации, никаких dlinaOtrezka
Имена функций, параметров, переменных начинаются со строчной буквы: segmentLength или calculateArea
Имена типов начинаются с прописной: Rectangle
39
https://kotlinlang.org/docs/reference/coding-conventions.html
https://kotlinlang.ru/docs/reference/coding-conventions.html
40
Параметр – это объект, существительное
Функция – это действие, глагол
41
Пакет (package) kotlin.math◦ abs(x: Int), abs(x: Double) – модуль◦ sqrt(x: Double) – квадратный корень◦ x.pow(y: Double) – x в степени y◦ sin/cos (x: Double) – синус / косинус, аргумент
задаётся в радианах◦ exp(x: Double) – e в степени x◦ log / log10(x: Double) – натуральный и
десятичный логарифмы◦ min / max(x: Int, y: Int) или (x: Double, y: Double) –
минимум и максимум из двух чисел◦ PI = 3.14…, E = 2.72…
42
// Комментарий: дискриминант
fun discriminant(a: Double, b: Double, c: Double) = sqr(b) - 4 * a * c
// sqr(b) = вызов функции sqr
// b = аргумент функции sqr
43
// Комментарий: дискриминант
fun discriminant(a: Double, b: Double, c: Double) = sqr(b) - 4 * a * c
// Комментарий: корень квадратного уравнения
fun sqRoot(a: Double, b: Double, c: Double) = (-b + sqrt(discriminant(a, b, c))) / (2 * a)
// sqrt(…) – вызов функции sqrt из пакета kotlin.math
// discriminant(a, b, c) – вызов функции discriminant
// и одновременно аргумент функции sqrt
44
То, что в определении функции – параметр
То, что в вызове функции - аргумент
45
kotlin.math.sqrt = полное имя (с указанием пакета)◦ В IDEA можно сократить автоматически: Alt+Enter
sqrt = короткое имя
// Директива импорта – в верхней части файлаimport kotlin.math.sqrt
// …
fun sqRoot(a: Double, b: Double, c: Double) = (-b + sqrt(discriminant(a, b, c))) / (2 * a)
46
fun quadraticRootProduct(a: Double, b: Double, c: Double
): Double /* тип результата */ {
// Тело в виде блока
}
47
fun quadraticRootProduct(a: Double, b: Double, c: Double
): Double /* тип результата */ {
// Тело в виде блока
// val = переменная
val sd = sqrt(discriminant(a, b, c))
}
48
fun quadraticRootProduct(a: Double, b: Double, c: Double
): Double /* тип результата */ {
// Тело в виде блока
// val = переменная
val sd = sqrt(discriminant(a, b, c))
// Ещё две переменных
val x1 = (-b + sd) / (2 * a)
val x2 = (-b - sd) / (2 * a)
}
49
fun quadraticRootProduct(a: Double, b: Double, c: Double
): Double /* тип результата */ {
// Тело в виде блока
// val = переменная
val sd = sqrt(discriminant(a, b, c))
// Ещё две переменных
val x1 = (-b + sd) / (2 * a)
val x2 = (-b - sd) / (2 * a)
// Чему равен результат?
return x1 * x2
}
50
Тоже вид данных, есть имя, тип и значение◦ Каков тип у sd?
◦ val sd = sqrt(discriminant(a, b, c))
51
Тоже вид данных, есть имя, тип и значение◦ Каков тип у sd?
◦ val sd = sqrt(discriminant(a, b, c))
Вывод типа → Double
Бывают двух видов – val и var (позже)◦ val ~ переменная-значение, значение постоянно
Как в математике
◦ var (позже) ~ “настоящая” переменная
52
оператор возврата =определяет результат и завершает функцию
53
fun solveQuadraticEquation(a: Double, b: Double, c: Double
) /* no result */ {
val sd = sqrt(discriminant(a, b, c))
val x1 = (-b + sd) / (2 * a)
val x2 = (-b - sd) / (2 * a)
}
54
fun solveQuadraticEquation(a: Double, b: Double, c: Double
) /* no result */ {
val sd = sqrt(discriminant(a, b, c))
val x1 = (-b + sd) / (2 * a)
val x2 = (-b - sd) / (2 * a)
// Вывод на экран значений x1 и x2
println(x1)
println(x2)
}
55
fun solveQuadraticEquation(a: Double, b: Double, c: Double
) /* no result */ {
val sd = sqrt(discriminant(a, b, c))
val x1 = (-b + sd) / (2 * a)
val x2 = (-b - sd) / (2 * a)
// Вывод на экран значений x1 и x2
println(x1)
println(x2)
// Вывод на экран строки вида x1 = 3.0 x2 = 2.0
println("x1 = $x1 x2 = $x2")
}
56
fun solveQuadraticEquation(a: Double, b: Double, c: Double
) /* no result */ {
val sd = sqrt(discriminant(a, b, c))
val x1 = (-b + sd) / (2 * a)
val x2 = (-b - sd) / (2 * a)
// Вывод на экран значений x1 и x2
println(x1)
println(x2)
// Вывод на экран строки вида x1 = 3.0 x2 = 2.0
println("x1 = $x1 x2 = $x2")
// Вывод на экран произведения корней
println("x1 * x2 = ${x1 * x2}")
}
57
Особый вид функций
Контролируют правильность работы других функций
Обычно реализуются на основе специальных тестирующих библиотек (пример = JUnit)
58
// Test = аннотация@Test
fun testSqr() {// Проверить, что квадрат нуля это 0assertEquals(0, sqr(0))// Проверить, что квадрат двух это 4assertEquals(4, sqr(2))// Проверить, что квадрат -3 это 9assertEquals(9, sqr(-3))
}
59
Проверка на равенство◦ Ничего не делает, если аргументы равны
◦ Прекращает тест с ошибкой, если аргументы не равны
60
«Точка входа» в программу = отсюда программа начинает свою работу
Во многих языках называется main (C, C++, C#, Java, Kotlin)
~ первая глава книги (хотя в программе она не обязана находиться вначале!)
61
fun main() {
// Решаем x^2 - 3*x + 2 = 0
val x1x2 = quadraticRootProduct(1.0, -3.0, 2.0)
println("Root product: $x1x2")
}
62
lesson1/task1 в обучающем проекте
63
Прочитать chapter02 в tutorial и/или послушать лекции второго урока на Coursera
Задачи второго урока
64
Если что-то осталось непонятным –обязательно спросите или напишите мне!
65
top related