Jeżeli zastanawialiście się kiedykolwiek, kiedy najmniej dzieje się w świecie technologii (przynajmniej tych JVMowych), to w oparciu o dane mogę Wam powiedzieć, że jest to drugi tydzień października 😉. Dlatego dzisiaj mamy dla Was tylko dwie pozycje: nowego JEPa oraz ciekawy artykuł o tym, jak bardzo przyspieszyć można Mavenowe buildy.
1. String Templates w Javie wyglądają naprawdę potężnie 💪
Trochę widać, jak bardzo przez lata zaniedbanym był temat stringów w Javie. Od kiedy w ekosystemie pojawiło się “przyzwolenie” na grzebanie w temacie, w zasadzie co chwilę słyszymy o jakichś nowych propozycjach, w jaki sposób można by poprawić ich obsługę. Java 11 wprowadziła nowe metody, później przez kilka wersji “wygrzewały się” bloki tekstu. W niedalekiej przyszłości czekać nas może zaś kolejna iteracja podejścia do stringów – tym razem poprzez wprowadzenie String Templates.
Na pierwszy rzut oka wydaje się to być mało interesujące – w końcu w zasadzie każdy inny JVMowy język posiada już wsparcie dla jakiejś formy interpolacji stringów. Jak to jednak bywa z Javą, kiedy jej twórcy zabierają się za jakąś funkcjonalność, robią to z przytupem. Jak piszą w JEPie, większość języków wspiera wyłącznie proste formy interpolacji:
var greeting = `Hello, $name, I am $age years old`
Powyższe rozwiązanie jest dość ograniczone; parametry nie są w żaden sposób weryfikowane ani przekształcane, a wynik jest bardzo “linearną” sklejką poszczególnych parametrów.
Rozwiązanie zaprezentowane przez twórców Javy jest o wiele bardziej skomplikowane. Ma się ono opierać o tak zwane Polityki Templatingu, które to definiować mają obsługi poszczególnych parametrów
interface TemplatePolicy<T> {
T apply(String template, List<Object> parameters);
}
Prostym przykładem użyciem mógłby być poniższy formatter:
String s = FMT."Hello %s\{name}, I am %10d\{age} years old.";
gdzie FMT jest implementacją TemplatePolicy, która zdefiniowane ma reguły formatujące (w tym przypadku np. w jaki sposób sformatować w stringu konkretne parametry.
Na prostych ma się jednak nie skończyć i wspomniany JEP pokazuje też bardziej złożone użycia, jak np. blokach JSON czy zapytaniach SQL. W przypadku tych ostatnich, idziemy w kierunku dość szalonych rozwiązań, gdzie TemplatePolicy mogłoby być implementowane przez samo połączenie:
var query = connection."SELECT * FROM \{table}";
Aczkolwiek tutaj twórcy są szczerzy, że nie jest to jeszcze wersja ostateczna. Zobaczymy w jakim kierunku będzie się to rozwijało. Jeśli chcielibyście poznać więcej szczegółów: oryginalny JEP.
Zainstaluj teraz i czytaj tylko dobre teksty!
2. Dowiedz się jak optymalizować czas Mavena? 🐇
Ostatnio sporo mówi się o Gradle, do tego stopnia, że Maven wydaje się nie być już używany.. Jest to oczywiście zupełna nieprawda, w rzeczywistości to właśnie Maven ciągle króluje we wszelkich statystykach, po prostu wypadł z łask blogerów czy innego rodzaju technologicznych “influencerów”. Dlatego też z pewną radością przytuliłem teksty od Nicolasa Fränkela, który to przyglądał się tematowi przyspieszania Mavenowych buildów.
Opracowania są szczególnie ciekawe nie tylko ze względu na lekkie pióro Nicolasa (bardzo lubię jego publikacje), ale również ze względu na przyjęty przez niego zakres. Pierwszy z tekstów jest przeglądem poszczególnych flag, które w zaskakujący (zwłaszcza dla ludzi, którzy nigdy nie mieli okazji wgryźć się w Mavena) sposób przyspieszają budowanie aplikacji. Można się więc przyjrzeć sposobom paralelizacji testów, maksymalizacji użycia rdzeni procesora czy efektywniejszym użyciu mavenowego deamona.
To jednak nie wszystko – szczególnie ciekawa z mojej perspektywy jest druga część. Pokazuje ona bowiem, jak w efektywny sposób używać Mavena w środowisku kontenerowym. Biorąc pod uwagę, jak często do budowania aplikacji w środowisku CI/CD używamy np. takiego Dockera, znajomość technik optymalizacyjnych czy sposobów cache’owania warstw itd może być naprawdę cenną informacją. Dlatego jeśli jeszcze nie przesiedliście się na Gradle – naprawdę polecam zerknąć do podlinkowanych artykułów.