Używacie jeszcze Lomboka w 2024 roku? Mam mieszanie uczucia do niego. Z jednej strony faktycznie trochę tego boilerplatu usuwa ale z drugiej strony ma kilka problemów, np. nie mogę zobaczyć gdzie jest używany konstruktor danej klasy itp.
Lombok w 2024 roku
- Rejestracja: dni
- Ostatnio: dni
- Postów: 832
Nie używam do nowego kodu od lat, tam gdzie się da - usuwam.
Może i ułatwia pisanie kodu, ale utrudnia jego utrzymywanie - chcę mieć widoczny kod który się rzeczywiście odpala, nie dyrektywy preprocesora w stylu C.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 2787
Często do DTO używam. Fakt, są z nim swoje problemy, jednak ogólnie te rzeczy nie zmianiają za bardzo pracy ani mi nie przeszkadzają.
Nofenak napisał(a):
, np. nie mogę zobaczyć gdzie jest używany konstruktor danej klasy itp.
Można np ctrl + shift + f i wyszukać new ClassName itp itd
- Rejestracja: dni
- Ostatnio: dni
- Postów: 488
Pinek napisał(a):
Często do DTO używam. Fakt, są z nim swoje problemy, jednak ogólnie te rzeczy nie zmianiają za bardzo pracy ani mi nie przeszkadzają.
A do DTO nie starczą rekordy?
- Rejestracja: dni
- Ostatnio: dni
- Postów: 2787
benoni12 napisał(a):
A do DTO nie starczą rekordy?
Starczą, niemniej skoro już są klasy z lombokiem to nie widzę różnicy czy to record czy klasa z lombokiem xd
Poza tym czasami rekordy gryzą się z jacksonem i są hocki-klocki z serializacją.
Serio, takie szczegóły to ważne są w rozmowie kwalifikacyjnej, ale podczas codziennego programowania odpowiada to za bardzo mały procent.
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Kraków
- Postów: 255
Nofenak napisał(a):
Używacie jeszcze Lomboka w 2024 roku? Mam mieszanie uczucia do niego. Z jednej strony faktycznie trochę tego boilerplatu usuwa ale z drugiej strony ma kilka problemów, np. nie mogę zobaczyć gdzie jest używany konstruktor danej klasy itp.
Ależ łatwo możesz to zobaczyć: opt + F7 i przechodzisz do new instance creation czy cos takiego. A odpowiadając na Twoje pytanie - tak, używam. Nie miałem jeszcze przypadku kiedy przez niego klnąłem itp. Przyspiesza pracę, jak dla mnie więcej zalet niż wad :) Jakieś jeszcze inne problemy masz z lombokiem?
- Rejestracja: dni
- Ostatnio: dni
- Postów: 206
lombok w 2024 to sabotaż. Czemu nie używać klas z finalnymi publicznymi polami lub rekordów, bo to pokrywa jakieś 95% zastosowań?
- Rejestracja: dni
- Ostatnio: dni
- Postów: 832
Dokładnie.
Używanie do getterów, setterów i konstruktorów nie ma już sensu a używanie do czegoś bardziej skomplikowanego jak buildery etc wprowadza tylko zamieszanie - nie wiem jaki kod jest wykonywany dopóki nie poznam składni kodu generowanego przez daną adnotację Lomboka.
Ale może jestem spaczony, ja od zawsze traktowałem Lomboka jako narzędzie do prototypowania, a nie do używania w kodzie produkcyjnym.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 2787
opiszon napisał(a):
używanie do czegoś bardziej skomplikowanego jak buildery etc wprowadza tylko zamieszanie
Ja właśnie najbardziej lubię lombokowe @Builder - spoko wtedy się robi jednolinijkowce, po prostu tak mi wygodnie xD
- Rejestracja: dni
- Ostatnio: dni
W poprzedniej firmie przeszliśmy na kotlina i lombok zniknął
W prywatnych projektach nie używam.
Obecnie w kodzie legacy mam tego trochę, ale robię refaktor i gdzie się tylko da to usuwam.
Czasem zostawię @Getter, ale konstruktory generuje mi IDE
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Stacktrace
- Postów: 6822
Lombok ma jedną wadę. Nie jest nią to, co robi, bo generatorów kodu na podstawie adnotacji jest mnóstwo, a rozwiązani takie jak Quarkus tylko zyskują na popularności, ale sposób, w jaki to robi. Lombok to jeden wielki i paskudny hak korzystający z wewnętrznych API kompilatora. Przez co nigdy tak naprawdę nie wiadomo, czy efekt jego działania będzie dobry, czy zły.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 178
Jak ktos pracuje z legacy to lombok to wybawienie. Od 17stki w gore raczej powoli bym odchodzil.
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: PL
- Postów: 452
Nie lubiłem lomboka, ale ostatnio trafiałem do projektów, gdzie lombok był obecny i z czasem go polubiłem. Doceniam wygodę jaką za sobą niesie, oczywiście pod warunkiem minimalnego korzystania z adnotacji, zamiast wrzucania wszystkich, które się da, na zapas.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 2420
Używam i używać będę bo record Point(int x, int y) { } jest w Javie zje****y - brakuje mianowicie metody toBuilder() lub jakieś copyWith(x = 7).
Takie rzeczy są i w Scala:
case class Message(sender: String, recipient: String, body: String)
val message4 = Message("julien@bretagne.fr", "travis@washington.us", "Me zo o komz gant ma amezeg")
val message5 = message4.copy(sender = message4.recipient, recipient = "claire@bourgogne.fr")
message5.sender // travis@washington.us
message5.recipient // claire@bourgogne.fr
message5.body // "Me zo o komz gant ma amezeg"
oraz w C#:
public record Person(string FirstName, string LastName)
{
public string[] PhoneNumbers { get; init; }
}
public static void Main()
{
Person person1 = new("Nancy", "Davolio") { PhoneNumbers = new string[1] };
Person person2 = person1 with { FirstName = "John" };
Console.WriteLine(person2);
// output: Person { FirstName = John, LastName = Davolio, PhoneNumbers = System.String[] }
Console.WriteLine(person1 == person2); // output: False
Niestety w Javie musi być record niedorobiony, niedopracowany i niedopieszczony.
Tak długo jak taki rekrod będzie, tak długo Lombok będzie w użyciu.
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Stacktrace
- Postów: 6822
@99xmarcin to nie jest kwestia rekordu, ale tego, że w Javie, a w zasadzie JVM, nie masz informacji o nazwach parametrów. Scala też nie ma parametrów nazwanych, jako takich, ale nadrabia to za pomocą metadanych i różnych sztuczek, które wykonuje kompilator. Zatem to nie problem „niedorobionych” rekordów.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 2420
@Koziołek kompilator to taki gość który może sobie wygenerować tyle dodatkowego kodu ile mu potrzeba, na przykład mógłby zmienić kod:
record Point(int x, int y) { }
var p = new Point(3, 45);
var p2 = p.copyWith(x = 45)
na
var p = new Point(3, 45);
var p2 = p.withX(45)
czyli może i nazw parameterów by nie było, ale każdy parametr miałby też metodę "with'era" czyli Point withX(int newValue) która zwracała by kopię obiektu.
Alternatywna opcja to po prostu dodanie adnotacji z nazwami parametrów, tak jak się to dzieje obecnie gdy użyjemy flagi -parameters dla javac.
Wprowadzenia niedorobionych cech języka gdy można to załatać na poziomie bytecode'u to nie jest dobry design...
PS. Ten JEP (https://openjdk.org/jeps/468) potwierdza to co wielu z nas czuje używając rekordu - czegoś nam tu brakuje! Dokładnie buildera lub withera lub jak zwał tak zwał, ale możliwości update'u na obiekcie który ma 10 pól bez konieczności przepisywania ich wszystkich!
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Stacktrace
- Postów: 6822
@99xmarcin a powiedz ty mi skąd ten biedny javac ma wiedzieć co ty masz na myśli pisząc coś takiego:
var p2 = p.copyWith(x = 45)
Czy ty przypisujesz coś, czy ten x to nazwa dostępna w kompilacji, a jak jest z zewnętrznej biblioteki, to skąd mam wiedzieć, że ten x to na pewno x, a nie y. Scala zrobi to sobie za pomocą wygenerowania dodatkowych metod. Java ma trochę inne założenie. Nie może wygenerować nic, czego nie ma jawnie w kodzie (z wyjątkiem konstruktora bezparametrowego, jeżeli nie ma innych). To jest zupełnie inna filozofia języka.
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: XML Hills
są szkice pomysłów na to jak do javy dodać coś a'la scalowe .copy( czy c#owe with: https://github.com/openjdk/amber-docs/blob/master/eg-drafts/reconstruction-records-and-classes.md
p.s.
aaa, sorry, zostało już wspomniane:
99xmarcin napisał(a):
PS. Ten JEP (https://openjdk.org/jeps/468) potwierdza to co wielu z nas czuje używając rekordu - czegoś nam tu brakuje! Dokładnie buildera lub withera lub jak zwał tak zwał, ale możliwości update'u na obiekcie który ma 10 pól bez konieczności przepisywania ich wszystkich!
- Rejestracja: dni
- Ostatnio: dni
- Postów: 50
sorry za offtop: może się czepiam, a może to niefortunny dobór przykładu w JEPie, tylko jak ktoś jako przykład wybiera dzielenie przez zero i od razu przerywa pracę programu, to ja nie wiem co myśleć.
Jaka stoi za tym filozofia? Ok, mamy propozycję poprawki, zilustrujemy to w najgorszy możliwy sposób
- Rejestracja: dni
- Ostatnio: dni
- Postów: 54
Bez lomboka nie widzę życia, ułatwia mi wszystko. Ważne jednak, żeby nie mieszać, czyli stosować tam, gdzie ułatwia, a nie utrudnia.
Nie można walnąć adnotacji i liczyć, że nic się nie wywali, musimy znać problemy przed stosowaniem rozwiązań, które dostarcza lombok, bo łatwo strzelić sobie w stopę.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 3297
Ja mam lombokową schizofrenię. Jak używam, to się wkurzam na lomboka i zastanawiam czy rozwiązuje więcej problemów, niż sam tworzy. Jak nie używam, to się wkurzam na Javę i jej podejście "po co pisać 1 linię kodu, jak można 50". Wolę nie używać ani jednego, ani drugiego, ale nie zawsze się da. Plus, że "nowsza Java" już znacznie ogranicza sens używania tych pokracznych adnotacji.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 10
Używam i nigdy nie miałem z nim żadnych problemów. Według mnie warto choćby dla tylko tych dwóch annotacji: RequiredArgsConstructor i Slf4j