Глухих Михаил Игоревич mailto:...

Post on 09-Oct-2020

7 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Глухих Михаил Игоревичmailto: glukhikh@mail.ru

Минимум◦ Скачали Идею и настроили 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