Работа с файлами
Часть раздела Объектно-ориентированное программирование путешествия по 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