Работа с файлами
Часть раздела Объектно-ориентированное программирование путешествия по Kotlin на Coddy. Урок 1 из 57.
Реальные программы состоят из нескольких файлов. Все файлы .kt программы на Kotlin компилируются вместе, поэтому функцию или класс, объявленные в одном файле, можно использовать в любом другом файле того же пакета без импорта:
// Greeting.kt
fun greeting(name: String) = "Hello, $name!"
// Main.kt
fun main() {
println(greeting("Ada"))
}При запуске эта программа выводит Hello, Ada!: функция main в Main.kt вызывает функцию из Greeting.kt.
Файл Kotlin содержит только объявления: классы, функции, свойства. Инструкции, такие как println(...), должны находиться внутри функции. Программа начинается с fun main(), которая по соглашению находится в Main.kt:
// Greeting.kt
fun greeting(name: String) = "Hello, $name!"
// println("hi") // ошибка: инструкции должны находиться внутри функции
// Main.kt
fun main() {
val name = readLine() ?: "friend"
println(greeting(name))
}Обычно в одном файле размещают один класс, а файл называют в честь класса: в Dog.kt находится Dog, в Account.kt — Account. В заданиях этого раздела ваш код нужно писать в этих файлах, а в Main.kt находится предоставленный код для ввода и вывода, который обычно нельзя редактировать. В редакторе каждый файл отображается на отдельной вкладке.
Dog.kt // class Dog(...) { ... }
Account.kt // class Account { ... }
Main.kt // fun main(): считывает входные данные и выводит результатыВидимость распространяется и на файлы. Объявление верхнего уровня с модификатором private видно только в своем файле, а значение по умолчанию — public — делает его видимым во всех файлах:
// Secret.kt
private const val SALT = "x7" // доступна только в этом файле
fun hashed(s: String) = s + SALT
// Main.kt
fun main() {
println(hashed("pw")) // всё в порядке: hashed публичная
// println(SALT) // ошибка: SALT доступна только в Secret.kt
}Задание
ЛегкоПрограмма состоит из двух файлов. main в Main.kt считывает имена и выводит результат greeting(name). Дополните greeting в Greeting.kt, чтобы она возвращала Hello, Ada! для имени Ada или Hello, friend!, если имя пустое.
Ваш код нужно написать в Greeting.kt. В Main.kt находится предоставленный код ввода/вывода, и его нельзя редактировать.
Попробуйте сами
fun main() {
// Предоставленный код ввода-вывода: оставьте его без изменений
val input = generateSequence(::readLine).toList()
for (name in input) println(greeting(name))
}
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Объектно-ориентированное программирование
1Классы и объекты
Работа с файламиОпределение классовПервичные конструкторыБлоки init и валидацияВторичные конструкторыПовторение — читательский билет4Наследование
Открытые классы и подклассыПереопределение членовsuper и конструкторыАбстрактные классыПовторение — каталог сотрудников7Специальные классы
Классы данныхКлассы перечисленийЗапечатанные иерархииequals, hashCode, toStringПовторение — трекер заказов10Паттерны проектирования. Часть 2
Делегирование с помощью byПаттерн декораторПаттерн строительПаттерн состояние2Свойства и инкапсуляция
Пользовательские аксессорыМодификаторы видимостиПриватные сеттерыlazy и lateinitПовторение — банковский счёт5Интерфейсы
Объявление интерфейсовМетоды по умолчаниюМножественные интерфейсыИнтерфейсы как типыПовторение — способы оплаты8Обобщения
Обобщённые функцииОбобщённые классыОграничения типовВариативность с in и outПовторение — очередь с приоритетом11Проект: Управление библиотекой
Книги и читателиВыдача книг3Объекты и компаньоны
Объявления объектовОбъекты-компаньоныКонстанты с constОбъектные выраженияПовторение — билетная касса6Полиморфизм
Динамическая диспетчеризацияПроверка типов и умные приведения типовwhen с типамиФункции-расширенияПовторение — смотритель зоопарка9Паттерны проектирования. Часть 1
Паттерн «Одиночка»Фабричный паттернПаттерн «Наблюдатель»Паттерн «Стратегия»Потренируйтесь самостоятельно: Песочница Kotlin