OK, za inspiracją Radka Holewy, postaram się choć trochę rozruszać mojego bloga ;)
Wezmę na warsztat bardzo ciekawą klasę MessageFormat w Javie. Pisząc kod pod IntelliJ IDEA, w momencie kiedy używamy konkatenacji Stringów, np.
"Masz na imię: " + imie + ", na nazwisko: " + nazwisko + ", masz " + wiek + " lat. "
środowisko podpowiada nam, żeby użyć StringBuildera lub MessageFormat. Decydując się na StringBuildera, otrzymujemy coś takiego:
new StringBuilder().append("Masz na imię: ").append(imie).append(", na nazwisko: ").append(nazwisko).append(", masz ").append(wiek).append(" lat. ").toString()
Umówmy się, że nie jest to najmilsze dla oka rozwiązanie ;) Zupełnie inaczej sprawa ma się z MessageFormat. Korzystając z opcji "replace (...) with java.text.MessageFormat call", otrzymujemy:
MessageFormat.format("Masz na imię: {0}, na nazwisko: {1}, masz {2} lat. ", imie, nazwisko, wiek);
Wow! Wygląda to znacznie bardziej seksownie. W pierwszym Stringu mamy treść tekstu z ponumerowanymi zmiennymi, pozostałe argumenty to użyte w Stringu zmienne. Przykład ten pokazuje, jak wiele ciekawostek można poznać, korzystając z naprawdę dobrego środowiska programistycznego ;)
"OK, wygląda to ładnie, ale co z wydajnością?" - zapyta dociekliwy Czytelnik. Stringi są niemutowalne (immutable), wobec czego wyrażenie typu string1 + string2 jest wysoce nieefektywne (tworzony jest po prostu nowy obiekt z połączenia dwóch pierwszych). Do operacji łączenia Stringów powinno się używać zatem StringBuilder lub StringBuffer. Tak też jest w przypadku MessageFormat - używa StringBuffer do budowania ciągu wyjściowego.
Reasumując, używanie MessageFormat jest nie tylko ładniejsze, ale też bardziej efektywne. Mały benchmark oraz szerszy pokaz możliwości MessageFormat postaram się opisać w następnym poście ;)