0Pricing
Kotlin Academy · Lekcja

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

  1. Aliasy typów
  2. Klasу wartości inline
  3. Przypadki użycia
  4. Ograniczenia
← Powrót do Kotlin Academy