Ignorowanie parametru z Consumer

Ignorowanie parametru z Consumer
EL
  • Rejestracja: dni
  • Ostatnio: dni
0

Nie bardzo wiem jak miałbym opisać moje pytanie więc posłuże się przykładem. Mamy np. metodę która pobiera użytkownikaz bazy i zwraca Optional:

Kopiuj
    Optional<User> getById(String id);

I teraz chciałbym pobrać użytkownika z bazy na podstawie np. ID, a jeśli taki istnieje to chciałbym wykonać jakąś akcje niezwiązaną z tym obiektem. Mogę wówczas zrobić w ten sposób:

Kopiuj
   if (repository.getById(id).isPresent()) {
          doSomething()
   }

ale jest to jak wiadomo bardzo słabe rozwiązanie. Innym może być takie:

Kopiuj
   repository.getById(id).ifPresent(user -> doSomething());

I to jest niby lepsze ale z drugiej strony parametr usera jest tu ignorowany. Czy w waszym kodzie jest to do przyjęcia czy raczej świadczy to o jakichś błędach w logice?

EDIT:
Tak sobie trochę pogooglowałem i wysło na to że coś takiego zadziała:

Kopiuj
   repository.getById(id).ifPresent(__-> doSomething());

Osobiście sie z tym w kodzie nie spotkałem więc w sumie nie mam zdania na ile to jest poprawne podejście chociaz w Kotlinie też jest podobne rozwiązanie z tym że uzywany jest pojedynczy znak.

CountZero
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 263
1

W tym przypadku co podałeś to prędzej bym zrobił metodę na bazie:

Kopiuj
boolean exists(String userId);

W innych przypadkach to trudno powiedzieć, skłaniałbym się raczej do tego, że coś jest nie tak.

jarekr000000
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: U krasnoludów - pod górą
  • Postów: 4712
3

Takie ignorowanie jest zupełnie normalne.
Im bardziej skręcasz w stronę "pure code" tym częsciej się pojawia. (Szczególnie w miejscach gdzie funkcyjnie zapisujemy kod imperatywny).

Samego ifPresent nie lubię (bo to void) ale nieważne w co opakujesz i tak problem tych ignorowanych parametrów pozostanie.

S9
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 3573
0

Samego ifPresent nie lubię (bo to void)

Że lepszy byłby jakiś peek zwracający ten sam obiekt?

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.