Sobes.tech
Junior

Explique como são estruturados os pacotes e módulos em Kotlin.

sobes.tech IA

Resposta da IA

Os pacotes são utilizados para organizar o código, evitar conflitos de nomes e melhorar a legibilidade. São declarados com a palavra-chave package no início do ficheiro.

Os módulos são conjuntos de fontes Kotlin, scripts de compilação, recursos e configurações do projeto. São utilizados para compilar, executar, testar e implementar. Nos projetos IntelliJ IDEA, um módulo corresponde a um módulo IDE; no Gradle, a um projeto raiz ou subprojeto.

Diferenças:

  • Nível de organização: Pacotes a nível de código fonte, módulos a nível de compilação do projeto.
  • Propósito: Pacotes para agrupamento lógico de código, módulos para gestão de dependências, compilação e implementação.
  • Hierarquia: Pacotes formam uma hierarquia com pontos (por exemplo, com.example.util), módulos podem ter hierarquia (subprojetos no Gradle) ou serem independentes.
  • Dependências: São indicadas entre módulos, não entre pacotes.

Exemplo de pacote:

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

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

Utilização do pacote:

package com.example.app

import com.example.util.formatName

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

Exemplo de estrutura de projeto com módulos (Gradle):

myproject/
├── app/          // Módulo de aplicação
│   ├── build.gradle.kts
│   └── src/
│       └── main/kotlin/com/example/app/Main.kt
└── util/         // Módulo de utilitários
    ├── build.gradle.kts
    └── src/
        └── main/kotlin/com/example/util/Util.kt

No app/build.gradle.kts, será indicada a dependência do módulo util:

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

dependencies {
    implementation(project(":util")) // Dependência do módulo util
}