Skip to main content

String Templates

Oczywiście. Przechodzimy do kolejnego tematu, który jest małą, ale niezwykle przyjemną i często używaną funkcją w codziennym programowaniu.

5. Szablony stringów (String Templates)

Szablony stringów (zwane też interpolacją stringów) to prosty i czytelny sposób na wstawianie wartości zmiennych i wyrażeń bezpośrednio do literału stringowego. To ogromne ułatwienie w porównaniu do standardowej konkatenacji (+) lub String.format() w Javie.


Problem w Javie

W Javie, aby zbudować string z dynamicznymi danymi, najczęściej używasz jednej z tych metod:

1. Konkatenacja za pomocą +: Jest to bardzo rozwlekłe i podatne na błędy (np. zapomnienie spacji).

String name = "Ania";
int score = 95;
String message = "Użytkownik " + name + " zdobył(a) " + score + " punktów.";
// Wynik: "Użytkownik Ania zdobył(a) 95 punktów."

2. String.format(): Jest bardziej czytelne, ale wymaga pamiętania o specyfikatorach formatu (%s, %d) i utrzymywania oddzielnej listy argumentów.

String name = "Ania";
int score = 95;
String message = String.format("Użytkownik %s zdobył(a) %d punktów.", name, score);

Rozwiązanie w Kotlinie: $ i ${}

Kotlin upraszcza to do granic możliwości, używając znaku dolara ($) do osadzania wyrażeń w stringach.

1. Wstawianie prostej zmiennej: $

Jeśli chcesz wstawić wartość prostej zmiennej, po prostu poprzedź jej nazwę znakiem $.

val name = "Ania"
val score = 95
val message = "Użytkownik $name zdobył(a) $score punktów."
// Wynik: "Użytkownik Ania zdobył(a) 95 punktów."

Kod jest znacznie krótszy i o wiele bardziej czytelny. Od razu widać, jak będzie wyglądał finalny string.

2. Wstawianie złożonego wyrażenia: ${}

Jeśli chcesz wstawić coś więcej niż tylko nazwę zmiennej – na przykład wywołanie metody, dostęp do właściwości obiektu, czy operację arytmetyczną – umieść całe wyrażenie wewnątrz nawiasów klamrowych ${...}.

data class User(val name: String, val posts: List<String>)

val user = User("Jan", listOf("Post 1", "Post 2"))

// Dostęp do właściwości obiektu i wywołanie metody .size
val summary = "Użytkownik ${user.name.uppercase()} ma ${user.posts.size} postów."
// Wynik: "Użytkownik JAN ma 2 postów."

val x = 10
val y = 20
val calculation = "Suma $x i $y to ${x + y}."
// Wynik: "Suma 10 i 20 to 30."

Szablony w stringach wieloliniowych

Szablony działają również doskonale ze stringami wieloliniowymi (otoczonymi potrójnym cudzysłowem """), co jest niezwykle przydatne przy generowaniu np. JSON-ów, zapytań SQL czy formatowaniu wiadomości.

val user = User("Maria", listOf())
val emailBody = """
Witaj, ${user.name}!

Dziękujemy za rejestrację w naszym serwisie.
Cieszymy się, że jesteś z nami.

Zespół Aplikacji
""".trimIndent() // .trimIndent() usuwa wspólne wcięcie z każdej linii.

Podsumowanie dla programisty Javy

To jedna z tych "małych" rzeczy, które pokochasz od pierwszego użycia. Znacznie poprawia komfort pracy i czytelność kodu.

ZadanieSposób w JavieSposób w Kotlinie
Prosta zmienna"Imię: " + name"Imię: $name"
Wyrażenie / metoda"Posty: " + user.getPosts().size()"Posty: ${user.posts.size}"
FormatowanieString.format("User: %s", name)"User: $name"
CzytelnośćNiska (ciągłe przełączanie między " a +)Wysoka (string wygląda jak wynik)

Po przyzwyczajeniu się do szablonów stringów w Kotlinie, powrót do konkatenacji w Javie jest naprawdę bolesny.