Wpis z mikrobloga

@SuppressWarnings: nie lepiej te liczby wstawić do listy i jeśli pamiętam to lista ma metodę sprawdzającą czy dany element jest w niej, a jeśli nie to przeiterować.
Niż się bawić w jakieś zbiory
  • Odpowiedz
@Fensi: Ten kod to tylko uproszczony przykład, pokazujący patologiczne zachowanie metody Set.of. Łatwo sobie wyobrazić jak szybko coś takiego kopnęłoby nas w dupę w jakiejś większej aplikacji.
  • Odpowiedz
@MaFiGat: Set jest po to żeby reprezentować zbiór elementów bez duplikatów, a nie po to żeby zastawiać pułapki na programistów. Unikalność ma być gwarantowana na poziomie wewnętrznego stanu struktury danych, a nie na poziomie API.
  • Odpowiedz
@MaFiGat: Ale ja wiem jak to rozwiązać, problem w tym że nie widzę powodu żeby tak to wszystko komplikować. Oczekiwałbym że Set.of(...) będzie pozwalało w zwięźlejszy sposób osiągnąć to co da się zrobić za pomocą HashSetu i operacji .add(). Jeżeli taki był zamysł (a zakładam że tak było), no to się nie udało, bo działanie jednego i drugiego jest względem siebie niespójne (jedno pozwala wykonać dwukrotnie set.add() z tym
  • Odpowiedz
@MaFiGat: przeca to logiczne, wystarczy wiedziec ze == porownoje komorki (w sensie czy ten sam obiekt) a equals wartosci, do tego jakie liczby keszuje jvm defaultowo i gotowe :P
  • Odpowiedz
@MaFiGat: Ale przecież gdyby ten wyjątek nie był rzucany, a duplikaty by były po prostu ignorowane, to wyszłoby na to samo (tj. set byłby "od początku w porządku"). Jaki jest zatem sens istnienia tak nieintuicyjnej metody?
  • Odpowiedz
Oczekiwałbym że Set.of(...) będzie pozwalało w zwięźlejszy sposób osiągnąć to co da się zrobić za pomocą HashSetu i operacji .add(). Jeżeli taki był zamysł (a zakładam że tak było),


@zajety_login: tylko, że Set.of to nie jest żadna alternatywa dla HashSet.add. W dokumentacji metod Set.of (których jest 10 przeciążonych wersji z konkretnego powodu) mamy "metoda tworzy niemodyfikowalny zbiór o N liczbie elementów". Do zbioru, który dostajesz w wyniku tej metody nie
  • Odpowiedz
@Eoghan: Niestety niemutowalność nie ma tutaj absolutnie żadnego znaczenia. W programowaniu funkcyjnym struktury z natury są immutable, a mimo to operacja Set.of() w takiej postaci jak w Javie by nie przeszła (abstrahując od tego że ewentualne duplikaty na wejściu na pewno nie skutkowałyby wyjątkiem, ale przyjmijmy że zostajemy w Javowym świecie Exception Driven Development). Kluczowe jest tutaj coś o czym już wspomniałem, czyli wyraźna separacja API od wewnętrznego stanu danej
  • Odpowiedz
Set, który w jakiś sposób zostaje przetransportowany do miejsca Y, to w miejscu Y (potencjalnie odległym od miejsca X), nie masz absolutnie żadnych gwarancji co do liczności tej struktury danych


@zajety_login: dopóki wykorzystujesz to api do celów do jakich powstało to masz taką gwarancję, bo zbiór jest immutable i jest to udokumentowane 1 czytelnym zdaniem. Niemutowalność ma moim zdaniem tutaj kluczowe znaczenie, bo Set.of utożsamiam z Javowym odpowiednikiem literałów kolekcyjnych z
  • Odpowiedz