Przypadki użycia
Modelowanie domeny
Przypadki użycia to bezpłatna lekcja Kotlin Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Kotlin Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Kotlin Academy zawiera 4 lekcji w sumie.
Modelowanie domeny
Klasy wartości doskonale sprawdzają się w modelowaniu domeny. Zmieniają anonimowe typy prymitywne w znaczące typy, które zapobiegają pomyłkom, bez kosztu w czasie wykonywania.
Przeanalizujmy realistyczne scenariusze.
Identyfikatory o określonym typie
Odrębne typy identyfikatorów zapobiegają przekazaniu identyfikatora użytkownika tam, gdzie powinien trafić identyfikator zamówienia — to częsty i kosztowny błąd.
@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)))
}Jednostki miary
Opakowanie liczb w typy jednostek zapobiega przypadkowemu dodawaniu metrów do sekund i dokumentuje znaczenie wartości.
@JvmInline
value class Kilograms(val value: Double)
fun describe(weight: Kilograms) = weight.value.toString() + " kg"
fun main() {
println(describe(Kilograms(72.5)))
}Weryfikowane ciągi znaków
Połączenie klasy wartości z blokiem init pozwala zagwarantować niezmienniki, takie jak niepusty adres e-mail.
@JvmInline
value class Email(val value: String) {
init {
require(value.contains("@")) { "invalid email" }
}
}
fun main() {
println(Email("a@b.com").value)
}Pieniądze z zachowaniem
Pieniądze można reprezentować w najmniejszej jednostce i dodać do nich operacje, unikając błędów walutowych związanych z arytmetyką zmiennoprzecinkową.
@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())
}Samodokumentujące się interfejsy API
Sygnatura funkcji wykorzystująca klasy wartości jest znacznie czytelniejsza niż sygnatura z trzema niezwiązanymi ze sobą liczbami całkowitymi.
@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)))
}Opakowywanie danych wrażliwych
Klasa wartości może przesłonić toString, aby maskować sekrety w logach, zachowując jednocześnie dostęp do surowej wartości.
@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
}Wymuszanie zakresów
Klasy wartości pozwalają zamknąć reguły zakresów w jednym miejscu, dzięki czemu nieprawidłowe stany nie mogą zostać utworzone.
@JvmInline
value class Rating(val stars: Int) {
init {
require(stars in 1..5) { "stars must be 1..5" }
}
}
fun main() {
println(Rating(4).stars)
}Inteligentne konstruktory
Klasa wartości może współpracować z fabryką w obiekcie companion, która zwraca null dla nieprawidłowych danych wejściowych, unikając wyjątków w przypadku oczekiwanych niepowodzeń.
@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))
}Podsumowanie wzorców
Typowe wzorce wykorzystania klas wartości:
- Identyfikatory o określonych typach zapobiegające pomyłkom
- Jednostki miary
- Weryfikowane typy prymitywne z użyciem
init - Operacje domenowe za pomocą operatorów
- Maskowanie danych wrażliwych
Bezpieczeństwo bez narzutu
Ponieważ klasy wartości są zwykle wbudowywane, całą tę przejrzystość i bezpieczeństwo domeny można uzyskać praktycznie bez kosztu w czasie wykonywania. To prosty sposób na zagwarantowanie, że nieprawidłowe stany nie mogą być reprezentowane.
Szybkie sprawdzenie
Warto sprawdzić zrozumienie zastosowań klas wartości.
Podsumowanie
Omówiono praktyczne zastosowania klas wartości:
- Identyfikatory o określonych typach, jednostki i weryfikowane ciągi znaków
- Pieniądze i operacje domenowe
- Maskowanie sekretów i inteligentne konstruktory
Następnie: ograniczenia klas wartości.
Często zadawane pytania
Czy lekcja „Przypadki użycia” jest bezpłatna?
Tak — pełny tekst „Przypadki użycia” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Kotlin Academy, przejdź na CoddyKit PRO. Kurs Kotlin Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Przypadki użycia”?
Modelowanie domeny Ćwiczysz Kotlin Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Kotlin Academy?
Nie wymagamy żadnego doświadczenia. Kotlin Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.
Ile czasu zajmuje lekcja „Przypadki użycia”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Kotlin Academy?
Tak. Każda lekcja Kotlin Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Aliasy typów
- Klasу wartości inline
- Przypadki użycia
- Ograniczenia