Ce face package și import
package se scrie pe primul rând al fișierului și spune cărui pachet îi aparțin clasele și funcțiile din el, de exemplu package ro.magazin. Pachetele separă codul pe zone și evită conflictele de nume: ro.magazin.Produs și ro.depozit.Produs sunt clase diferite. Spre deosebire de Java, numele pachetului nu trebuie să se potrivească cu directorul, dar este o convenție bună.
import (după package) îți permite să scrii numele scurt al unei clase sau funcții din alt pachet: import kotlin.math.sqrt, apoi sqrt(2.0). Cu * imporți tot ce e public în pachet. Cu as dai un alt nume la import, util când două clase au același nume.
Unele pachete sunt importate automat în orice fișier: kotlin.*, kotlin.collections.*, kotlin.text.*, kotlin.ranges.*, kotlin.io.* și, pe JVM, java.lang.*. De aceea println, listOf sau String merg fără import. kotlin.math nu este printre ele.
Exemple
Exemplul 1: Fișier cu pachet și importuri
Funcțiile din kotlin.math au nevoie de import. Clasa generată pentru fișier primește numele complet ro.magazin.MainKt.
package ro.magazin
import kotlin.math.PI
import kotlin.math.roundToInt
import kotlin.math.sqrt
fun main() {
val suprafata = 50.0
val latura = sqrt(suprafata)
println("Latura unui teren pătrat de 50 m²: ${(latura * 100).roundToInt() / 100.0} m")
println("Aria unei mese rotunde cu raza 0,6 m: ${(PI * 0.6 * 0.6 * 100).roundToInt() / 100.0} m²")
println("Pachetul: " + object {}.javaClass.enclosingClass.name)
}
Rezultat
Latura unui teren pătrat de 50 m²: 7.07 m
Aria unei mese rotunde cu raza 0,6 m: 1.13 m²
Pachetul: ro.magazin.MainKt
Exemplul 2: Import cu nume nou (as)
as redenumește ce imporți. Aici clasa Java LocalDate devine Data, iar java.util.Locale rămâne cu numele ei.
import java.time.LocalDate as Data
import java.time.format.DateTimeFormatter
import java.util.Locale
fun main() {
val examen = Data.of(2026, 6, 15)
val format = DateTimeFormatter.ofPattern("EEEE, d MMMM yyyy", Locale.forLanguageTag("ro"))
println("Examenul de bacalaureat: ${examen.format(format)}")
println("Cu o săptămână înainte: ${examen.minusWeeks(1)}")
}
Rezultat
Examenul de bacalaureat: luni, 15 iunie 2026
Cu o săptămână înainte: 2026-06-08
Exemplul 3: Două fișiere, două pachete
Funcția cuTva stă în pachetul ro.magazin.preturi. Fișierul cu main o importă. Se compilează împreună: kotlinc main.kt preturi.kt -include-runtime -d app.jar.
// preturi.kt
package ro.magazin.preturi
fun cuTva(pret: Double): Double = pret * 1.21
// main.kt
package ro.magazin
import ro.magazin.preturi.cuTva
fun main() {
println("Pâine: ${cuTva(5.0)} lei cu TVA")
}
Rezultat în terminal (java -jar app.jar)
Pâine: 6.05 lei cu TVA
Greșeli frecvente
importscris înainte depackage: ordinea obligatorie estepackage, apoi importurile, apoi codul.- Importuri pe care nu le folosești: compilatorul nu avertizează, dar fac codul greu de citit. IDE-ul le poate șterge automat.
import kotlin.math.*când ai și o funcție propriemaxsaumin: se poate apela alta decât te aștepți. Importă explicit numele de care ai nevoie.
Comenzi înrudite
fun main(): Funcția main este punctul de pornire al oricărui program Kotlin: codul din ea se execută primul.as și as? (conversie de tip): as tratează o valoare ca alt tip (aruncă excepție dacă nu se potrivește); as? întoarce null în loc de excepție.public și internal: public (implicit) face o declarație vizibilă oriunde; internal o face vizibilă doar în modulul în care este scrisă.kotlinc: Compilatorul Kotlin din linia de comandă: transformă fișierele .kt într-un program care rulează pe JVM.