Casi d'uso
Modellazione del dominio
Casi d'uso è una lezione Kotlin Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Kotlin Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Kotlin Academy include 4 lezioni in totale.
Modellare il dominio
Le value class sono particolarmente efficaci nella modellazione del dominio. Trasformano i primitivi anonimi in tipi significativi e a prova di errore, senza costi a runtime.
Esaminiamo alcuni scenari realistici.
Identificatori tipizzati
Tipi distinti per gli identificatori impediscono di passare un id utente dove è previsto un id ordine: un errore comune e costoso.
@JvmInline
value class UserId(val value: Long)
@JvmInline
value class OrderId(val value: Long)
fun fetchUser(id: UserId) = "user " + id.value
fun main() {
println(fetchUser(UserId(7)))
}Unità di misura
Racchiudere i numeri in tipi che rappresentano unità di misura impedisce di sommare accidentalmente metri e secondi e documenta il significato del valore.
@JvmInline
value class Kilograms(val value: Double)
fun describe(weight: Kilograms) = weight.value.toString() + " kg"
fun main() {
println(describe(Kilograms(72.5)))
}Stringhe convalidate
Combini una value class con un blocco init per garantire invarianti come un indirizzo email non vuoto.
@JvmInline
value class Email(val value: String) {
init {
require(value.contains("@")) { "invalid email" }
}
}
fun main() {
println(Email("a@b.com").value)
}Denaro con comportamento
Rappresenti il denaro nell'unità più piccola e aggiunga le operazioni necessarie, evitando gli errori valutari dovuti alla virgola mobile.
@JvmInline
value class Cents(val value: Long) {
operator fun plus(other: Cents) = Cents(value + other.value)
fun format() = "$" + value / 100.0
}
fun main() {
val total = Cents(1500) + Cents(250)
println(total.format())
}API autoesplicative
La firma di una funzione che usa value class è molto più chiara di una firma con tre interi non qualificati.
@JvmInline
value class Width(val px: Int)
@JvmInline
value class Height(val px: Int)
fun area(w: Width, h: Height) = w.px * h.px
fun main() {
println(area(Width(4), Height(5)))
}Racchiudere dati sensibili
Una value class può eseguire l'override di toString per nascondere i segreti nei log, mantenendo comunque accessibile il valore originale.
@JvmInline
value class Token(val value: String) {
override fun toString() = "Token(***)"
}
fun main() {
val t = Token("abc123")
println(t) // masked
println(t.value) // real value when needed
}Imporre intervalli di valori
Usi le value class per racchiudere le regole sugli intervalli in un unico punto, così non è possibile costruire stati non validi in alcuna parte del codice.
@JvmInline
value class Rating(val stars: Int) {
init {
require(stars in 1..5) { "stars must be 1..5" }
}
}
fun main() {
println(Rating(4).stars)
}Costruttori intelligenti
Affianchi una value class a una factory nel companion che restituisce null per gli input non validi, evitando eccezioni per gli errori previsti.
@JvmInline
value class Age(val value: Int) {
companion object {
fun of(n: Int): Age? = if (n in 0..150) Age(n) else null
}
}
fun main() {
println(Age.of(30)?.value)
println(Age.of(-5))
}Riepilogo dei pattern
Pattern comuni per le value class:
- ID tipizzati per evitare confusioni
- Unità di misura
- Primitivi convalidati tramite
init - Operazioni di dominio tramite operatori
- Valori sensibili mascherati
Sicurezza a basso costo
Poiché le value class vengono solitamente sottoposte a inlining, si ottengono chiarezza e sicurezza del dominio a un costo a runtime essenzialmente nullo. Sono un modo semplice per rendere impossibile rappresentare stati illegali.
Verifica rapida
Verifichi la sua comprensione dei casi d'uso delle value class.
Riepilogo
Ha visto casi d'uso pratici delle value class:
- ID tipizzati, unità e stringhe convalidate
- Denaro e operazioni di dominio
- Mascheramento dei segreti e costruttori intelligenti
Prossimo argomento: i limiti delle value class.
Domande Frequenti
La lezione «Casi d'uso» è gratuita?
Sì — il testo completo di «Casi d'uso» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Kotlin Academy, passa a CoddyKit PRO. Il corso Kotlin Academy include 4 lezioni in totale.
Cosa imparerò in «Casi d'uso»?
Modellazione del dominio Eserciti Kotlin Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Kotlin Academy?
Non è richiesta alcuna esperienza precedente. Kotlin Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.
Quanto tempo richiede la lezione «Casi d'uso»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Kotlin Academy?
Sì. Ogni lezione Kotlin Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.