Эта практическая работа является частью курса Kotlin Bootcamp for Programmers . Вы получите максимальную пользу от этого курса, если будете выполнять задания последовательно. В зависимости от вашего уровня знаний, вы можете пропустить некоторые разделы. Этот курс ориентирован на программистов, владеющих объектно-ориентированным языком программирования и желающих изучить Kotlin .
Введение
В этой лабораторной работе вы создадите программу на языке Kotlin и узнаете о функциях в Kotlin, включая значения по умолчанию для параметров, фильтров, лямбда-выражений и компактных функций.
Вместо создания одного примера приложения уроки этого курса направлены на углубление ваших знаний, но при этом они частично независимы друг от друга, чтобы вы могли бегло просмотреть знакомые разделы. Чтобы связать их воедино, многие примеры используют тему аквариума. А если вы хотите узнать всё об аквариуме, ознакомьтесь с курсом Kotlin Bootcamp for Programmers на Udacity.
Что вам уже следует знать
- Основы современного объектно-ориентированного статически типизированного языка программирования
- Как программировать с использованием классов, методов и обработки исключений хотя бы на одном языке
- Как работать с REPL (цикл чтения-вычисления-печати) Kotlin в IntelliJ IDEA
- Основы Kotlin, включая типы, операторы и циклы
Эта лабораторная работа ориентирована на программистов, владеющих объектно-ориентированным языком и желающих узнать больше о Kotlin.
Чему вы научитесь
- Как создать программу с функцией
main()и аргументами в IntelliJ IDEA - Как использовать значения по умолчанию и компактные функции
- Как применять фильтры к спискам
- Как создавать базовые лямбда-выражения и функции высшего порядка
Что ты будешь делать?
- Поработайте с REPL, чтобы опробовать какой-нибудь код.
- Используйте IntelliJ IDEA для создания базовых программ на Kotlin.
В этом задании вы создадите программу на языке Kotlin и узнаете о функции main() , а также о том, как передавать аргументы в программу из командной строки.
Возможно, вы помните функцию printHello() , которую вы ввели в REPL в предыдущей лабораторной работе:
fun printHello() {
println ("Hello World")
}
printHello()⇒ Hello World
Функции определяются с помощью ключевого слова fun , за которым следует имя функции. Как и в других языках программирования, скобки () используются для указания аргументов функции, если таковые имеются. Фигурные скобки {} обрамляют код функции. Для этой функции не задан тип возвращаемого значения, поскольку она ничего не возвращает.
Шаг 1: Создайте файл Kotlin
- Откройте IntelliJ IDEA.
- На панели «Проект» слева в IntelliJ IDEA отображается список файлов и папок вашего проекта. Найдите и щёлкните правой кнопкой мыши папку src в разделе Hello Kotlin. (У вас уже должен быть проект Hello Kotlin из предыдущей практической работы.)
- Выберите Создать > Файл/Класс Kotlin .
- Оставьте Kind как File и назовите файл Hello .
- Нажмите ОК .
Теперь в папке src есть файл Hello.kt .

Шаг 2: Добавьте код и запустите программу.
- Как и в других языках, функция
main()в Kotlin определяет точку входа для выполнения. Все аргументы командной строки передаются в виде массива строк.
Введите или вставьте следующий код в файл Hello.kt :
fun main(args: Array<String>) {
println("Hello, world!")
} Как и ваша предыдущая функция printHello() , эта функция не имеет оператора return . Каждая функция в Kotlin что-то возвращает, даже если явно ничего не указано. Поэтому функция, подобная функции main() , возвращает тип kotlin.Unit , что в Kotlin означает отсутствие значения.
- Чтобы запустить программу, нажмите на зелёный треугольник слева от функции
main(). Выберите в меню пункт «Запустить HelloKt» . - IntelliJ IDEA компилирует программу и запускает её. Результаты отображаются в области журнала внизу, как показано ниже.

Шаг 3: Передайте аргументы в main()
Поскольку вы запускаете свою программу из IntelliJ IDEA, а не из командной строки, вам нужно указывать все аргументы программы немного по-другому.
- Выберите «Запуск» > «Изменить конфигурации» . Откроется окно «Конфигурации запуска/отладки» .
- В поле «Аргументы программы» введите
Kotlin! - Нажмите ОК .

Шаг 4: Измените код, чтобы использовать строковый шаблон.
Строковый шаблон вставляет переменную или выражение в строку, а $ указывает, что часть строки будет переменной или выражением. Фигурные скобки {} заключают выражение в скобки, если оно есть.
- В Hello.kt измените приветственное сообщение, чтобы использовать первый аргумент, переданный в программу,
args[0], вместо"world".
fun main(args: Array<String>) {
println("Hello, ${args[0]}")
}- Запустите программу, и вывод будет содержать указанный вами аргумент.
⇒ Hello, Kotlin!
В этом задании вы узнаете, почему почти все в Kotlin имеет значение, и почему это полезно.
В некоторых других языках есть операторы (statements) , представляющие собой строки кода без значения. В Kotlin практически всё является выражением и имеет значение, даже если это значение — kotlin.Unit .
- В Hello.kt напишите код в
main(), чтобы назначитьprintln()переменнойisUnitи вывести ее на печать. (println()не возвращает значение, поэтому он возвращаетkotlin.Unit.)
// Will assign kotlin.Unit
val isUnit = println("This is an expression")
println(isUnit)- Запустите программу. Первый
println()выводит строку"This is an expression". Второйprintln()выводит значение первого оператораprintln(), то естьkotlin.Unit.
⇒ This is an expression kotlin.Unit
- Объявите
valс именемtemperatureи инициализируйте его значением 10. - Объявите ещё один
valс именемisHotи присвойтеisHotвозвращаемое значение оператораif/else, как показано в следующем коде. Поскольку это выражение, вы можете сразу использовать значение выраженияif.
val temperature = 10
val isHot = if (temperature > 50) true else false
println(isHot)⇒ false
- Используйте значение выражения в строковом шаблоне. Добавьте код для проверки температуры, чтобы определить, безопасна ли рыба или слишком тёплая, а затем запустите программу.
val temperature = 10
val message = "The water temperature is ${ if (temperature > 50) "too warm" else "OK" }."
println(message)⇒ The water temperature is OK.
В этом задании вы узнаете больше о функциях в Kotlin и о весьма полезном условном выражении when .
Шаг 1: Создайте несколько функций
На этом этапе вы объедините полученные знания и создадите функции разных типов. Вы можете заменить содержимое Hello.kt этим новым кодом.
- Напишите функцию
feedTheFish(), которая вызывает функциюrandomDay()для получения случайного дня недели. Используйте строковый шаблон для выводаfood, который рыба ест в этот день. Сейчас рыбы едят один и тот же корм каждый день.
fun feedTheFish() {
val day = randomDay()
val food = "pellets"
println ("Today is $day and the fish eat $food")
}
fun main(args: Array<String>) {
feedTheFish()
}- Напишите функцию
randomDay(), которая выбирает случайный день из массива и возвращает его.
Функция nextInt() принимает целочисленный предел, который ограничивает число из Random() диапазоном от 0 до 6, чтобы оно соответствовало массиву week .
fun randomDay() : String {
val week = arrayOf ("Monday", "Tuesday", "Wednesday", "Thursday",
"Friday", "Saturday", "Sunday")
return week[Random().nextInt(week.size)]
}- Функции
Random()иnextInt()определены вjava.util.*. В начале файла добавьте необходимый импорт:
import java.util.* // required import- Запустите программу и проверьте результат.
⇒ Today is Tuesday and the fish eat pellets
Шаг 2: Используйте выражение when
Расширяя это, измените код так, чтобы он выбирал разные продукты для разных дней, используя выражение when . Оператор when похож на switch в других языках программирования, но when автоматически прерывает выполнение в конце каждой ветви. Это также гарантирует, что ваш код охватывает все ветви, если вы проверяете перечисление.
- В Hello.kt добавьте функцию
fishFood(), которая принимает номер дня какStringи возвращает количество корма, которое рыба получала в этот день, какString. Используйте функциюwhen(), чтобы каждый день рыба получала определённый корм. Запустите программу несколько раз, чтобы увидеть разные результаты.
fun fishFood (day : String) : String {
var food = ""
when (day) {
"Monday" -> food = "flakes"
"Tuesday" -> food = "pellets"
"Wednesday" -> food = "redworms"
"Thursday" -> food = "granules"
"Friday" -> food = "mosquitoes"
"Saturday" -> food = "lettuce"
"Sunday" -> food = "plankton"
}
return food
}
fun feedTheFish() {
val day = randomDay()
val food = fishFood(day)
println ("Today is $day and the fish eat $food")
}⇒ Today is Thursday and the fish eat granules
- Добавьте ветку по умолчанию к выражению
whenс помощьюelse. Для тестирования, чтобы убедиться, что в вашей программе иногда используется ветка по умолчанию, удалите веткиTuesdayиSaturday.
Наличие ветви по умолчанию гарантирует, чтоfoodполучит значение перед возвратом, поэтому его больше не нужно инициализировать. Поскольку код теперь присваивает строкуfoodтолько один раз, вы можете объявитьfoodс помощьюvalвместоvar.
fun fishFood (day : String) : String {
val food : String
when (day) {
"Monday" -> food = "flakes"
"Wednesday" -> food = "redworms"
"Thursday" -> food = "granules"
"Friday" -> food = "mosquitoes"
"Sunday" -> food = "plankton"
else -> food = "nothing"
}
return food
}- Поскольку каждое выражение имеет значение, вы можете сделать этот код немного короче. Верните значение выражения
whenнапрямую и удалите переменнуюfood. Значение выраженияwhen— это значение последнего выражения ветви, удовлетворяющего условию.
fun fishFood (day : String) : String {
return when (day) {
"Monday" -> "flakes"
"Wednesday" -> "redworms"
"Thursday" -> "granules"
"Friday" -> "mosquitoes"
"Sunday" -> "plankton"
else -> "nothing"
}
}Окончательная версия вашей программы выглядит примерно так, как показано ниже.
import java.util.* // required import
fun randomDay() : String {
val week = arrayOf ("Monday", "Tuesday", "Wednesday", "Thursday",
"Friday", "Saturday", "Sunday")
return week[Random().nextInt(week.size)]
}
fun fishFood (day : String) : String {
return when (day) {
"Monday" -> "flakes"
"Wednesday" -> "redworms"
"Thursday" -> "granules"
"Friday" -> "mosquitoes"
"Sunday" -> "plankton"
else -> "nothing"
}
}
fun feedTheFish() {
val day = randomDay()
val food = fishFood(day)
println ("Today is $day and the fish eat $food")
}
fun main(args: Array<String>) {
feedTheFish()
}В этом задании вы узнаете о значениях по умолчанию для функций и методов. Вы также узнаете о компактных функциях , которые могут сделать ваш код более лаконичным и читабельным, а также сократить количество путей кода для тестирования. Компактные функции также называются функциями с одним выражением .
Шаг 1: Создайте значение по умолчанию для параметра
В Kotlin можно передавать аргументы по имени параметра. Также можно указать значения параметров по умолчанию: если аргумент не предоставлен вызывающей стороной, используется значение по умолчанию. В дальнейшем, при написании методов (функций-членов), это позволяет избежать написания множества перегруженных версий одного и того же метода.
- В Hello.kt напишите функцию
swim()соStringпараметромspeed, которая выводит скорость рыбы. Параметрspeedимеет значение по умолчанию"fast".
fun swim(speed: String = "fast") {
println("swimming $speed")
}- Из функции
main()можно вызвать функциюswim()тремя способами. Сначала вызовите функцию, используя значение по умолчанию. Затем вызовите функцию, передав параметрspeedбез имени, а затем вызовите функцию, указав параметрspeed.
swim() // uses default speed
swim("slow") // positional argument
swim(speed="turtle-like") // named parameter⇒ swimming fast swimming slow swimming turtle-like
Шаг 2: Добавьте необходимые параметры
Если для параметра не указано значение по умолчанию, всегда необходимо передавать соответствующий аргумент.
- В Hello.kt напишите функцию
shouldChangeWater(), которая принимает три параметра:day,temperatureи уровеньdirty. Функция возвращаетtrue, если воду необходимо сменить, например, в воскресенье, если температура слишком высокая или если вода слишком грязная. Необходимо указать день недели, но температура по умолчанию — 22, а уровень загрязнения — 20.
Используйте выражениеwhenбез аргумента, которое в Kotlin действует как серия проверокif/else if.
fun shouldChangeWater (day: String, temperature: Int = 22, dirty: Int = 20): Boolean {
return when {
temperature > 30 -> true
dirty > 30 -> true
day == "Sunday" -> true
else -> false
}
}- Вызовите метод
shouldChangeWater()изfeedTheFish()и укажите день. Параметрdayне имеет значения по умолчанию, поэтому необходимо указать аргумент. Два других параметра методаshouldChangeWater()имеют значения по умолчанию, поэтому передавать для них аргументы не нужно.
fun feedTheFish() {
val day = randomDay()
val food = fishFood(day)
println ("Today is $day and the fish eat $food")
println("Change water: ${shouldChangeWater(day)}")
}=> Today is Thursday and the fish eat granules Change water: false
Шаг 3: Создание компактных функций
Выражение when , написанное на предыдущем шаге, умещает много логики в небольшой фрагмент кода. Если вы хотите немного его развернуть или если условия проверки были более сложными, можно использовать локальные переменные с чёткими именами. Но в Kotlin это делается с помощью компактных функций.
Компактные функции, или функции с одним выражением , — распространённый шаблон в Kotlin. Когда функция возвращает результаты одного выражения, можно указать тело функции после символа = , опустить фигурные скобки {} и опустить return .
- в Hello.kt добавьте компактные функции для проверки условий.
fun isTooHot(temperature: Int) = temperature > 30
fun isDirty(dirty: Int) = dirty > 30
fun isSunday(day: String) = day == "Sunday"- Измените
shouldChangeWater()для вызова новых функций.
fun shouldChangeWater (day: String, temperature: Int = 22, dirty: Int = 20): Boolean {
return when {
isTooHot(temperature) -> true
isDirty(dirty) -> true
isSunday(day) -> true
else -> false
}
}- Запустите программу. Вывод функции
println()сshouldChangeWater()должен быть таким же, как и до перехода на компактные функции.
Значения по умолчанию
Значение по умолчанию для параметра не обязательно должно быть значением. Это может быть другая функция, как показано в следующем фрагменте примера:
fun shouldChangeWater (day: String, temperature: Int = 22, dirty: Int = getDirtySensorReading()): Boolean {
...В этом задании вы немного познакомитесь с фильтрами в Kotlin. Фильтры — это удобный способ получить часть списка по определённому условию.
Шаг 1: Создайте фильтр
- В Hello.kt определите список аквариумных украшений на верхнем уровне с помощью
listOf(). Вы можете заменить содержимое Hello.kt .
val decorations = listOf ("rock", "pagoda", "plastic plant", "alligator", "flowerpot")- Создайте новую функцию
main()со строкой для вывода только украшений, начинающихся с буквы «p». Код условия фильтра заключен в фигурные скобки{}иitна каждый элемент в цикле фильтра. Если выражение возвращаетtrue, элемент включается в выборку.
fun main() {
println( decorations.filter {it[0] == 'p'})
}- Запустите программу, и в окне «Выполнить» вы увидите следующий вывод:
⇒ [pagoda, plastic plant]
Шаг 2: Сравните энергичные и ленивые фильтры
Если вы знакомы с фильтрами в других языках, вы можете задаться вопросом, являются ли фильтры в Kotlin жадными (eagy) или ленивыми (lazy) . Создаётся ли список результатов сразу или при обращении к нему? В Kotlin это происходит в зависимости от того, как вам нужно. По умолчанию filter является жадным (eagy), и при каждом его использовании создаётся список.
Чтобы сделать фильтр ленивым, можно использовать Sequence — коллекцию, которая может просматривать только один элемент за раз, начиная с начала и до конца. Удобно, что это именно тот API, который нужен ленивому фильтру.
- В Hello.kt измените код так, чтобы отфильтрованный список был назначен переменной с именем
eager, а затем выведите его на печать.
fun main() {
val decorations = listOf ("rock", "pagoda", "plastic plant", "alligator", "flowerpot")
// eager, creates a new list
val eager = decorations.filter { it [0] == 'p' }
println("eager: " + eager)- Ниже этого кода оцените фильтр, используя
Sequenceс помощьюasSequence(). Присвойте последовательность переменнойfilteredи выведите её на экран.
// lazy, will wait until asked to evaluate
val filtered = decorations.asSequence().filter { it[0] == 'p' }
println("filtered: " + filtered)Когда вы возвращаете результаты фильтрации в виде Sequence , filtered переменная не будет содержать новый список — она будет содержать Sequence элементов списка и информацию о фильтре, который нужно применить к этим элементам. При каждом доступе к элементам Sequence , фильтр применяется, и результат возвращается вам.
- Принудительно вычислите последовательность, преобразовав её в
Listс помощьюtoList(). Выведите результат.
// force evaluation of the lazy list
val newList = filtered.toList()
println("new list: " + newList)- Запустите программу и посмотрите на результат.
⇒ eager: [pagoda, plastic plant] filtered: kotlin.sequences.FilteringSequence@386cc1c4 new list: [pagoda, plastic plant]
Чтобы визуализировать происходящее с Sequence и ленивыми вычислениями, используйте функцию map() . Функция map() выполняет простое преобразование каждого элемента последовательности.
- Используя тот же список
decorations, что и выше, создайте преобразование с помощьюmap(), которое ничего не делает и просто возвращает переданный элемент. Добавьтеprintln()для отображения каждого обращения к элементу и присвойте последовательность переменнойlazyMap.
val lazyMap = decorations.asSequence().map {
println("access: $it")
it
}- Выведите
lazyMap, выведите первый элементlazyMapс помощьюfirst()и выведитеlazyMapпреобразованный вList.
println("lazy: $lazyMap")
println("-----")
println("first: ${lazyMap.first()}")
println("-----")
println("all: ${lazyMap.toList()}")- Запустите программу и посмотрите на результат. Вывод
lazyMapпросто выводит ссылку наSequence— внутреннийprintln()не вызывается. Вывод первого элемента обращается только к первому элементу. ПреобразованиеSequenceвListобращается ко всем элементам.
⇒ lazy: kotlin.sequences.TransformingSequence@5ba23b66 ----- access: rock first: rock ----- access: rock access: pagoda access: plastic plant access: alligator access: flowerpot all: [rock, pagoda, plastic plant, alligator, flowerpot]
- Создайте новую
Sequence, используя исходный фильтр перед применениемmap. Выведите результат на печать.
val lazyMap2 = decorations.asSequence().filter {it[0] == 'p'}.map {
println("access: $it")
it
}
println("-----")
println("filtered: ${ lazyMap2.toList() }")- Запустите программу и посмотрите на дополнительный вывод. Как и при получении первого элемента, внутренний
println()вызывается только для тех элементов, к которым осуществляется доступ.
⇒ ----- access: pagoda access: plastic plant filtered: [pagoda, plastic plant]
В этом задании вы получите введение в лямбда-выражения и функции высшего порядка в Kotlin.
Лямбды
Помимо традиционных именованных функций, Kotlin поддерживает лямбда-выражения. Лямбда-выражение — это выражение, создающее функцию. Но вместо объявления именованной функции вы объявляете функцию без имени. Одним из преимуществ этого подхода является то, что лямбда-выражение теперь можно передавать как данные. В других языках программирования лямбда-выражения называются анонимными функциями , функциональными литералами или другими подобными именами.
Функции высшего порядка
Вы можете создать функцию высшего порядка, передав лямбда-выражение другой функции. В предыдущем задании вы создали функцию высшего порядка с именем filter . В качестве условия проверки вы передали следующее лямбда-выражение функции filter :
{it[0] == 'p'}
Аналогично, map — это функция высшего порядка, а переданная ей лямбда — это преобразование, которое нужно применить.
Шаг 1: Узнайте о лямбдах
- Как и именованные функции, лямбда-выражения могут иметь параметры. В лямбда-выражениях параметры (и их типы, если необходимо) указываются слева от так называемой стрелки функции
->. Выполняемый код указывается справа от стрелки функции. После присвоения лямбда-выражения переменной его можно вызывать так же, как функцию.
Используя REPL ( Инструменты > Kotlin > Kotlin REPL ), попробуйте следующий код:
var dirtyLevel = 20
val waterFilter = { dirty : Int -> dirty / 2}
println(waterFilter(dirtyLevel))⇒ 10
В этом примере лямбда-функция принимает Int с именем dirty и возвращает dirty / 2 . (Поскольку фильтрация удаляет dirt.)
- Синтаксис Kotlin для типов функций тесно связан с синтаксисом лямбда-выражений. Используйте этот синтаксис для корректного объявления переменной, содержащей функцию:
val waterFilter: (Int) -> Int = { dirty -> dirty / 2 }Вот что говорится в коде:
- Создайте переменную с именем
waterFilter. -
waterFilterможет быть любой функцией, которая принимаетIntи возвращаетInt. - Назначьте лямбда-функцию
waterFilter. - Лямбда возвращает значение аргумента
dirtyделенное на 2.
Обратите внимание, что вам больше не нужно указывать тип лямбда-аргумента. Тип вычисляется путём вывода типа.
Шаг 2: Создайте функцию высшего порядка
До сих пор примеры использования лямбда-выражений выглядели в основном как функции. Истинная сила лямбда-выражений заключается в их использовании для создания функций высшего порядка, где аргументом одной функции является другая функция.
- Напишите функцию высшего порядка. Вот простой пример: функция, принимающая два аргумента. Первый аргумент — целое число. Второй аргумент — функция, принимающая целое число и возвращающая целое число. Попробуйте в REPL.
fun updateDirty(dirty: Int, operation: (Int) -> Int): Int {
return operation(dirty)
}Тело кода вызывает функцию, переданную в качестве второго аргумента, и передает ей первый аргумент.
- Чтобы вызвать эту функцию, передайте ей целое число и функцию.
val waterFilter: (Int) -> Int = { dirty -> dirty / 2 }
println(updateDirty(30, waterFilter))⇒ 15
Передаваемая функция не обязательно должна быть лямбда-функцией; это может быть обычная именованная функция. Чтобы указать аргумент как обычную функцию, используйте оператор :: . Таким образом, Kotlin понимает, что вы передаёте ссылку на функцию как аргумент, а не пытаетесь вызвать её.
- Попробуйте передать обычную именованную функцию в
updateDirty().
fun increaseDirty( start: Int ) = start + 1
println(updateDirty(15, ::increaseDirty))⇒ 16
var dirtyLevel = 19;
dirtyLevel = updateDirty(dirtyLevel) { dirtyLevel -> dirtyLevel + 23}
println(dirtyLevel)⇒ 42
- Чтобы создать исходный файл Kotlin в IntelliJ IDEA, начните с проекта Kotlin.
- Чтобы скомпилировать и запустить программу в IntelliJ IDEA, нажмите на зелёный треугольник рядом с функцией
main(). Вывод отобразится в окне журнала ниже. - В IntelliJ IDEA укажите аргументы командной строки для передачи в функцию
main()в меню Выполнить > Изменить конфигурации . - Почти всё в Kotlin имеет значение. Вы можете использовать этот факт, чтобы сделать код более лаконичным, используя значение
ifилиwhenв качестве выражения или возвращаемого значения. - Аргументы по умолчанию устраняют необходимость в нескольких версиях функции или метода. Например:
fun swim(speed: String = "fast") { ... } - Компактные функции, или функции с одним выражением, могут сделать ваш код более читабельным. Например:
fun isTooHot(temperature: Int) = temperature > 30 - Вы узнали основы работы с фильтрами, использующими лямбда-выражения. Например:
val beginsWithP = decorations.filter { it [0] == 'p' } - Лямбда-выражение — это выражение, создающее безымянную функцию. Лямбда-выражения определяются в фигурных скобках
{}. - В функции высшего порядка вы передаёте функцию, например лямбда-выражение, другой функции в качестве данных. Например:
dirtyLevel = updateDirty(dirtyLevel) { dirtyLevel -> dirtyLevel + 23}
Этот урок очень познавательный, особенно если вы новичок в лямбда-выражениях. Следующий урок вернётся к лямбда-выражениям и функциям высшего порядка.
Документация Kotlin
Если вам нужна дополнительная информация по какой-либо теме этого курса или вы застряли, лучшей отправной точкой будет https://kotlinlang.org .
- Строковые шаблоны
-
whenвыражение - Функции с одним выражением
- Функции высшего порядка и лямбда-выражения
- Фильтры
- Последовательности
- Синтаксис вызова последнего параметра
Учебники по Kotlin
На сайте https://try.kotlinlang.org вы найдете подробные учебные пособия по Kotlin Koans, веб-интерпретатор и полный набор справочной документации с примерами.
Курс Udacity
Чтобы просмотреть курс Udacity по этой теме, см. Kotlin Bootcamp for Programmers .
IntelliJ IDEA
Документацию по IntelliJ IDEA можно найти на сайте JetBrains.
В этом разделе перечислены возможные домашние задания для студентов, работающих над этой лабораторной работой в рамках курса, проводимого преподавателем. Преподаватель должен выполнить следующие действия:
- При необходимости задавайте домашнее задание.
- Объясните учащимся, как следует сдавать домашние задания.
- Оцените домашние задания.
Преподаватели могут использовать эти предложения так часто или редко, как пожелают, и могут свободно задавать любые другие домашние задания, которые они сочтут подходящими.
Если вы работаете с этой лабораторной работой самостоятельно, можете использовать эти домашние задания для проверки своих знаний.
Ответьте на эти вопросы
Вопрос 1
Функция contains(element: String) возвращает true если element строки содержится в строке, к которой она вызвана. Что будет выведено следующим кодом?
val decorations = listOf ("rock", "pagoda", "plastic plant", "alligator", "flowerpot")
println(decorations.filter {it.contains('p')})
▢ [pagoda, plastic, plant]
▢ [pagoda, plastic plant]
▢ [pagoda, plastic plant, flowerpot]
▢ [rock, alligator]
Вопрос 2
Какой из параметров является обязательным в следующем определении функции?
fun shouldChangeWater (day: String, temperature: Int = 22, dirty: Int = 20, numDecorations: Int = 0): Boolean {...}
▢ numDecorations
▢ dirty
▢ day
▢ temperature
Вопрос 3
Вы можете передать обычную именованную функцию (а не результат её вызова) другой функции. Как передать increaseDirty( start: Int ) = start + 1 в updateDirty(dirty: Int, operation: (Int) -> Int) ?
▢ updateDirty(15, &increaseDirty())
▢ updateDirty(15, increaseDirty())
▢ updateDirty(15, ("increaseDirty()"))
▢ updateDirty(15, ::increaseDirty)
Перейти к следующему уроку:
Обзор курса, включая ссылки на другие практические занятия, см. в статье «Kotlin Bootcamp for Programmers: Welcome to the course».