Sobes.tech
Junior

Wyjaśnij, jak zorganizowane są pakiety i moduły w Kotlin.

sobes.tech AI

Odpowiedź od AI

Pakiety są używane do organizacji kodu, zapobiegania konfliktom nazw i poprawy czytelności. Deklaruje się je za pomocą słowa kluczowego package na początku pliku.

Moduły to zestawy źródeł Kotlin, skryptów budowania, zasobów i ustawień projektu. Służą do kompilacji, uruchamiania, testowania i wdrażania. W projektach IntelliJ IDEA moduł odpowiada modułowi IDE; w Gradle — projektowi głównemu lub podprojektowi.

Różnice:

  • Poziom organizacji: Pakiety na poziomie kodu źródłowego, moduły na poziomie kompilacji projektu.
  • Cel: Pakiety do logicznej grupowania kodu, moduły do zarządzania zależnościami, kompilacją i wdrożeniem.
  • Hierarchia: Pakiety tworzą hierarchię za pomocą kropek (np. com.example.util), moduły mogą mieć hierarchię (podprojekty w Gradle) lub być niezależne.
  • Zależności: Zależności są wskazywane między modułami, a nie między pakietami.

Przykład pakietu:

// Plik: Util.kt
package com.example.util

fun formatName(firstName: String, lastName: String): String {
    return "$firstName $lastName"
}

Użycie pakietu:

package com.example.app

import com.example.util.formatName

fun main() {
    val fullName = formatName("John", "Doe")
    println(fullName)
}

Przykład struktury projektu z modułami (Gradle):

myproject/
├── app/          // Moduł aplikacji
│   ├── build.gradle.kts
│   └── src/
│       └── main/kotlin/com/example/app/Main.kt
└── util/         // Moduł narzędziowy
    ├── build.gradle.kts
    └── src/
        └── main/kotlin/com/example/util/Util.kt

W pliku app/build.gradle.kts wskazuje się zależność od modułu util:

// app/build.gradle.kts
plugins {
    kotlin("jvm")
}

dependencies {
    implementation(project(":util")) // Zależność od modułu util
}