Wpis z mikrobloga

Jednym z przykładów jak C# chcę być na siłę różnym od Javy, są np. te anonimowe obiekty. Zamiast stworzyć obiekt po bożemu, przez konstruktor to jest coś takiego:
var person = new Person { Name = "Janusz", Age = 50 }.
Oczywiście trzeba mieć klasę z getterami i setterami, czyli hermetyzacja i enkapsulacja złamane po całości. No i trzeba pisać nazwy tych pól. Ale i tak najgorsze jest to, że przez settery można zrobić coś takiego: person.Age = 2137.
I ten język jest niby lepszy od Javy?
#programowanie #programista15k #csharp #java
  • 11
  • Odpowiedz
@Edelner: bait, ale i tak odpiszę dla innych :)

Po pierwsze, to nie jest anonimowy obiekt, byłby gdybyś użył samego new bez klasy.

Po drugie to jest tylko code sugar na użycie konstruktora bez parametrów i późniejszego ustawiania propercji.

Po trzecie, nikt Ci tego nie każe używać wszędzie. To się stosuje w POCO, gdzie nie ma enkapsulacji.
  • Odpowiedz
@Edelner: Ale się mordo zdziwisz jak zobaczysz recordy w Javie xD
public record Vehicle(String brand, String licensePlate) {}

...
Vehicle vehicle = new Vehicle("Mercedes", "UX 1238 A95");

vehicle.brand();

vehicle.licensePlate()
  • Odpowiedz
via Wykop Mobilny (Android)
  • 0
@Edelner: ale to ty decydujesz jak coś zrobić. Jeśli masz np jakaś klasę typu Config i masz w niej 20 pól. To taki sposób inicjalizacji obiektu jest bardzo wygodny, bo ustawiasz to co chcesz zamiast robić to przez konstruktor.
  • Odpowiedz
@krand: Tak, masz rację. To nie jest anonimowy obiekt, ale to nic nie zmienia.
A co daje ten gówno-ficzer? Przecież to ustawianie pól za pomocą setterów w skróconej formie.
POCO/POJOsy nie muszą i nie powinny mieć setterów. Po za tym prawie zawsze widzę property z get i set, bo większość tak pisze bez żadnego namysłu.

@cybul26: Jak nie masz nic merytorycznego do powiedzenia, to po co piszesz i zaśmiecasz wpis?
  • Odpowiedz
No pewnie, tak jak settery są wygodne i szkodliwe. Przecież możesz sobie stworzyć takie konstruktory jakie ci są potrzebne i na ich bazie tworzyć obiekt a jak używasz tego ficzera, to ktoś ci nagle może ustawić pole na jakaś bzdurną wartość.


@Edelner: Jak nie chcesz żeby ktoś ustawi bzdurna wartość to nie dajesz public set;

I co jak masz tysiące osób i każdy użyje sobie innych z 20 pól to ile
  • Odpowiedz
via Wykop Mobilny (Android)
  • 0
@Edelner: No nieźle, postaraj się lepiej z tymi bajtami na przyszłość xD To już nie czasy wojen między C# i Java więc nie będzie Ci łatwo. A jak nie bajtujesz to usuń konto bo aż wstyd tak mylić pojęcia i jeszcze się pluć na coś czego się nie rozumie xD
  • Odpowiedz