[БЕЗ_ЗВУКА] [МУЗЫКА] Я всех приветствую. Сегодня мы с вами начинаем путешествие по увлекательным миру программирования на Kotlin. Начнем мы его с разговора о функциях, тех маленьких кирпичиках, из которых строятся программы. Благодаря программам компьютер может решать различные задачи, а благодаря функциям эти программы не становятся слишком сложными. Вспомните, что мы обычно делаем, когда начинаем решать сложную задачу. Правильно. Разбиваем ее на несколько простых. То же самое делает и программист. Разбив задачу на несколько простых частей, для каждой из этих частей он создает функцию, которая решает эту задачу, а потом пишет программу, которая объединяет функции в единое целое. Функции бывают как довольно сложные, так и очень простые. Вы, наверное, помните, что такое функция в математике. У нее есть параметр или несколько параметров, от которых зависит ее значение. Простые функции в программировании — это почти то же самое. Давайте посмотрим на определение простой функции на Kotlin, вычисляющей квадрат заданного числа. Определение начинается с ключевого слова fun — сокращение от function, функция. Далее идет имя функции, в данном случае, я выбрал имя sqr — сокращение от square. В скобках указан один параметр с именем x, имеющий тип int, то есть integer, целый. После знака равенства следует тело функции. Оно показывает, как компьютер должен вычислить ее результат. В данном случае необходимо взять значение параметра x и умножить его на себя. Обратите внимание, что знак умножения — это звездочка, а не точка и не крестик. Если вы слушаете меня внимательно, то обязательно зададитесь вопросом: что же такое тип? Тип — это очень важное понятие в программировании. В математике есть такая штука, как область допустимых значений, или ОДЗ. Тип — это почти то же самое. Тип задает ограничения на те значения, которые может иметь параметр функции или ее результат, или переменная в программе. В данном случае мы сообщаем компилятору о том, что параметр x обязан быть целым. Программирование — вещь очень формальная и точная. Поэтому полезно постоянно задавать себе вопросы: а что это? В данном случае полезно спросить: а что значит «целый» с точки зрения языка Kotlin? Целый тип int почти то же самое, что множество целых чисел в математике. Почти, потому что число типа int не может быть слишком большим или слишком маленьким. Предел — это примерно два миллиарда, или если быть точным, два в степени 31 − 1. Вы можете спросить: а какие бывают еще типы? Их бывает много разных. Более того, программист имеет право придумывать новые типы и объявлять их в программе. Позже мы увидим, как это делается. В этом уроке мы с вами познакомимся еще с несколькими простыми типами: с вещественным, или double, близким к вещественному в математике; и строковым, или string, значения которого — это различные строки, а строки при этом могут состоять из любого количества символов. Вы можете задать еще такой вопрос: а как же нам воспользоваться нашей функцией возведения в квадрат? Для того чтобы функцией воспользоваться, ее надо вызвать из другой функции. Самый простой способ на это посмотреть — вызвать функцию sqr из главной функции или функции main. Посмотрите на то, как главная функция может выглядеть. Обратите внимание, что ее имя всегда main и она всегда имеет один параметр специального типа — array of string, то есть массив строк. Что это за тип и зачем нужен этот параметр, мы поговорим с вами позже, а сейчас нам надо знать, что с главной функции всегда начинается выполнение программы. Также вы видите, что тело функции main выглядит для нас немного необычно. Оно не начинается со знака равенства, вместо этого тело заключено в пару фигурных скобок. Эта особая запись тела называется «тело в виде блока», или block body, а запись со знаком равенства — «телом в виде выражения», или expression body. В виде блока можно записать тело любой функции, не только главной. Сейчас вы видите, что нашу функцию возведения в квадрат тоже можно было бы записать таким образом. Вы можете автоматически преобразовать тело в виде выражения в тело в виде блока и обратно, используя комбинацию клавиш Alt + Enter и выбирая команду Convert to block body или Convert to expression body. Как мы видим, при записи в виде блока в теле функции sqr появилась пара фигурных скобок и оператор return, или вернуть. Операторы в целом определяют некоторое, заранее определенное в языке действие. Конкретно оператор return сообщает компьютеру о том, каким будет результат нашей функции. Тип int перед фигурными скобками сообщает компилятору, что результат функции обязан быть целым. При использовании тела в виде блока, тип результата указывать обязательно. При использовании тела в виде выражения, тип результата может быть указан или рассчитан автоматически. Если вы не указали тип результата функции, его можно посмотреть, используя комбинацию клавиш Control + Q. Вы можете спросить, как рассчитывается тип результата. Это очень просто. Компилятор языка Kotlin знает, что при умножении целого числа на целое получается целое и делает такой вывод. Отлично. Вернемся к главной функции. В первой ее строчке мы определяем так называемую переменную значения — val, сокращение от value, переводится как раз как значение. Переменными программисты называют специальные коробочки, в которые можно положить значение определенного типа. Такую операцию называют присваивание: мы вызвали функцию sqr, передав ей аргумент 7, получили результат 49 и присвоили этот результат переменной с именем result. Имя позволит нам в дальнейшем отличать эту переменную от других. В общем, переменные значения подобны переменным в математике. Как происходит вызов функции? Для того чтобы вызвать функцию, необходимо написать имя функции и в скобках ее аргументы. При вызове параметр функции x получит то значение, которое задано аргументом, в данном случае, 7. Компьютер умножит значение x на себя и получит результат функции 49. Наконец, этот результат попадет в переменную result. Посмотрим теперь на вторую строчку. Что такое println? Это тоже функция, но функция особая, не похожая на математические. В качестве аргумента ей нужно передавать строку, и эту строку функция println, сокращение от print line, выведет на консоль. Что такое консоль? Это специальное окошко, куда программа может выводить свои результаты. Давайте теперь посмотрим, из чего состоит строка. Во-первых, хорошо заметно, что строка начинается и заканчивается двойными кавычками. Так и должно быть. Во-вторых, в строке можно заметить особо подсвеченные символы $result. Наверное, у них есть какой-то специальный смысл? Да, это так. И смысл этот состоит в том, что компьютер вместо $result подставит значение переменной result и выведет строчку result = 49. Подобная запись строки носит название «строковый шаблон». Теперь давайте сделаем небольшой перерыв и поупражняемся. Откройте в учебном проекте первый урок и найдите в нем главную функцию. Для этого можно использовать комбинацию Ctrl + F. Сотрите ее тело — все строчки между фигурными скобками. Вставьте вместо них фрагмент на слайде. Запустите главную функцию, нажав мышкой на зеленый треугольник слева от заголовка «Функция». Подождите окончания сборки — built — и убедитесь, что на консоль выведено число 49. Теперь попробуйте задать другое значение аргумента. Снова запустите главную функцию и убедитесь, что результат верен. Теперь попробуйте изменить строковый шаблон так, чтобы получить результат в формате 7 * 7 = 49 вместо result = 49. Испытайте себя, запустив главную функцию. Если все в порядке, вы можете двигаться дальше. [БЕЗ_ЗВУКА]