String je základný dátový typ v programovacích jazykoch. Slúži na uchovanie textu. Ak chceme napísať String tak text vložíme medzi dvojité úvodzovky.
val cesta = "cesta";
Vo väčšine prípadov je to dostačujúce. Čo ak do textu chceme nastaviť cestu na súbor ako text.
C:\work\tools\__test
Musíme ho vložiť do premennej typu String a všetky lomítka zdvojiť - escapnúť.
val cesta = "C:\\work\\tools\\__test";
Kotlin má aj pomôcku a tou je Raw String. Na napísanie textu použijem trikrát dvojité úvodzovky na začiatku aj na konci.
val cestaRaw = """C:\work\tools\__test"""
Raw String nám umožňuje zapísať String na viac riadkov bez nutnosti spájania pomocou +.
Mám text, ktorý chcem napísať na viac riadkov. Čo musím spraviť ak to chcem v jednom Stringu? Všetky časti spojím pomocou + a pridám špeciálnu značku pre nový riadok \n.
val text = "1 639,33\n" +
"6 540,03\n" +
"8179,36\n" +
"+2500,04"
Pri Raw Stringu len stlačím enter pre nový riadok a pokračujem v písaní.
val textRaw = """1 639,33
6 540,03
8179,36
+2500,04"""
Tento spôsob ale nie je pekne čitateľný – všetok text mám zasadený na ľavú stranu, lebo nechceme aby sme tam dali napr. taublátor – v pôvodnom textne nebol.
Čo môžeme spraviť je pridať nejaké špeciálnu značku na začiatok riadku, ktorý chcem odsadiť a potom poviem, že všetko na ľavo od značky spolu so značkou považujem len za odsadenie textu.
Pridajme značku (hocijakú):
val textRaw = """1 639,33
#6 540,03
#8179,36
#+2500,04"""
Teraz povieme, že # je špeciálna značka pre odsadenie.
val textRaw = """1 639,33
#6 540,03
#8179,36
#+2500,04""".trimMargin("#")
A môžeme odsadiť pre lepšiu čitateľnosť:
val textRaw = """1 639,33
#6 540,03
#8179,36
#+2500,04""".trimMargin("#")
Alebo použijeme default znak oddeľovača, čo je pipe |.
val textRaw = """1 639,33
|6 540,03
|8179,36
|+2500,04""".trimMargin()
Teraz sa tieto dva Stringy budú rovnať.
println("${text == textRaw}") //true
Použitie v reálnej aplikácii
Určite by si rád videl príklad z reálnej aplikácie. Jedným z takýchto príkladov by bolo použitie pri písaní Android aplikácie. Presnejšie napríklad pri písaní príkazov pre dopyt na databázu v Room frameworku, ktorý sa používa na zjednodušený prístup k databázam.
V Room píšeme takzvané Dao triedy na prístup k databáze. Vezmime si jeden príklad kde chcem napsíať SQL príkaz na vybratie filmov z databázy.
@Query("SELECT id, movie_name, genres, directors year FROM MOVIES")
suspend fun getAllMovies(): List<MovieShort>
Príkaz by si rád napísal na viacero riadkov aby bol lepšie čitateľný.
@Query("SELECT id, movie_name, genres, directors year " +
"FROM MOVIES")
suspend fun getAllMoviesInShortForm(): List<MovieShort>
Alebo použiješ Raw String.
@Query("""
SELECT id, movie_name, genres, directors year
FROM MOVIES
""")
Určite si vieš predstaviť ako sa ti zlepší čitateľnosť, ak budeš mať zložitejšie select príkazy v kombinácii napríklad s join.