Pakketten, imports en file-level declaraties vormen de basisstructuur van elk Kotlin-project, en ontwikkelaars komen vaak vragen tegen over het organiseren van namespaces en de zichtbaarheid van functies.
Achtergrond: Kotlin, in navolging van Java, ondersteunt een pakketsysteem, maar voegt het concept van file-level declaraties toe, waardoor het mogelijk is om functies en eigenschappen buiten een klasse te creëren, wat de modulariteit en expressiviteit van de code verbetert.
Probleem: Hoe organiseer je de zichtbaarheid en de toegangspunten voor functies, eigenschappen en klassen op de handigste manier, terwijl je naamconflicten, dubbele imports en overmatige afhankelijkheden binnen projectdelen vermijdt?
Oplossingen:
Voorbeeld code:
package utils import kotlin.math.* import model.User as UserModel fun sum(a: Int, b: Int) = a + b val PI2 = PI * 2
Belangrijke kenmerken:
Kunnen verschillende bestanden met dezelfde package naam dezelfde namen voor functies/eigenschappen bevatten?
Ja, maar dit leidt tot naamconflicten tijdens compilatie, tenzij verschillende namen of aliassen voor imports worden gebruikt. File-level declaraties werken binnen het kader van een package.
Moet de mappenstructuur van het project de package-namen herhalen, zoals in Java?
Nee, dit wordt alleen aanbevolen voor de organisatie van de code en onderhoudsgemak, maar de compiler staat verschillen in paden en packages toe. Maar bij het verplaatsen van code of het bouwen met tools kunnen er problemen ontstaan met logging en modulariteit.
Kun je meerdere packages binnen één .kt bestand declareren?
Nee, in één .kt bestand kan alleen één package worden gedeclareerd. Het mengen van packages leidt tot een compilatiefout.
Alle hulpfuncties van verschillende thema's bevinden zich in één package utils, het bestand Utility.kt bevat verschillende zakelijke en technische methoden:
Voordelen:
Nadelen:
Volgt strikt de afspraken: elk pakket weerspiegelt het domein, file-level wordt alleen gebruikt voor functies die niet tot een specifieke klasse behoren, aliassen worden gebruikt om duplicatie te voorkomen, elk bestand voor zijn eigen thema:
Voordelen:
Nadelen: