# Kotlin's Flexible File Organization Can Make Code Harder to Find

DevFeed: [Kotlin's Flexible File Organization Can Make Code Harder to Find](<https://devfeed.tech/articles/pub-mod-fiasco-34258.md>)

Original publisher: [Read original article](<https://tonsky.livejournal.com/323107.html>)

Published: 2019-09-11T15:05:52Z

Content type: opinion

Language: ru

Sources: [Tonsky Стой под стрелой](<https://devfeed.tech/sources/tonsky.md>)

Topics: [Kotlin](<https://devfeed.tech/topics/kotlin.md>)

Tags: [kotlin](<https://devfeed.tech/tags/kotlin.md>), [livejournal](<https://devfeed.tech/tags/livejournal.md>), [tag-5e1c061eda96](<https://devfeed.tech/tags/tag-5e1c061eda96.md>), [tag-c40b78a8c8a6](<https://devfeed.tech/tags/tag-c40b78a8c8a6.md>), [tag-d16a2c26554f](<https://devfeed.tech/tags/tag-d16a2c26554f.md>), [tag-e3028c5e0ab2](<https://devfeed.tech/tags/tag-e3028c5e0ab2.md>)

## AI overview

The article argues that Kotlin's flexible file and package declarations can make code organization confusing. It contrasts Kotlin with Clojure's strict one-file-per-namespace model and Java's one-file-per-class convention.

## Source excerpt

Лучший язык, в котором правильно сделаны модули (ну или неймспейсы) -- Кложа. Один файл === один неймспейс. Неймспейс может называться только так, как называется файл, и никак иначе. И лежать он должен тоже ровно по пути пакета. То есть (ns me.tonsky.hello) может и должен лежать в me/tonsky/hello.clj и нигде иначе. Сначала меня это почему-то напрягло -- эй! свободу ограничивают! а как же самовыражение??? Это при том что в остальном Кложа -- довольно либеральный язык и позволяет любую другую дичь творить спокойно и вообще говоря это чуть ли не единственное место, где абстракция "как организовать свой проект на файловой системе" протекла в язык, который, вообще говоря, весь такой интерпретируемый, динамичный, код может есть с руки и про файлы ничего не знает. Но потом я проникся и оценил, особенно когда в других языках поработал. Кайф в том, что это не позволяет разводить бардака. Потому что в жизни, даже если все люди хорошие, рукопожатные и намерения у всех без исключения самые добрые, если бардак физически что-то не мешает развести -- его разведут. Ну вот Кложа мешает. Живите с этим. И живут! И как живут! Тут-то судьба забросила меня в Балтийское море, на остров Котлин. У Котлина какой основополагающий принцип? Если где-то что-то запрещают, у нас разрешают! Все обиженные, обездоленные приходите к нам и творите что хотите. Этот же принцип применен и к файловой системе. В Джаве ведь как? Один файл == один класс. Какое расточительство! В Котлине один файл == сколько угодно классов, объектов, функций, констант и чего угодно еще. Более того, файл может объявлять объекты в пакете, в котором он даже не находится. То есть какой-нибудь src/main/kotlin/me/tonsky/hello.kt может спокойно объявлять package go.fuck.yourself; и никому за это ничего не будет! Что же тут не так? Помимо самоочевидного бардака, становится довольно сложно понять, где что находится. Скажем, ищу я класс me.tonsky.Draggable. Смотрю в me/tonsky/ папку а там layout.kt, main.kt и scene.kt. Ну офигеть! Класс мож