several
2019-07-18 10:18

Oprócz szydery na VisualStudio korci mnie, żeby zrobić serię pod hasztagiem #norweskiprogramista.

@Krolik chyba miał podobną serię na temat niemieckich seniorów, ale moi koledzy chyba ich przebijają, no bo kto wpadłby na pomysł żeby napisać funkcję, która ma dwadzieścia jeden argumentów? W tym dziewięć przełączników (booleanów). Chłopaki mają dużą wiedzę domenową, to trzeba im oddać, ale jeśli chodzi o kod to ja nawet na studiach tak nie pisałem.

ps. O istnieniu tej funkcji dowiedziałem się przez błąd linkowania, okazało się że kolega dodał dwudziesty drugi argument i po prostu nie miałem najświeższych źródeł z repo.
ps.2 Aż mi się przypomniały moje własne słowa na tym forum sprzed lat Praktyka to najczęściej szok, niedowierzanie i poryty kod.

Shalom

Ta liczba argumentów to nie jest problem, mnie bardziej martwi że ktoś nie zrobił do tego Buildera. Przecież teraz to można się pociąć jak machniesz się w kolejności argumentów ;]

Sunnydev

chętnie poczytam przygody norweskiego programisty :D 21 args... wtf?

czysteskarpety

Jade tam. W królestwie ślepców - jednooki królem :)

Kamil Żabiński

22 argumenty to bardzo dobra ilość. Maksymalna obsługiwana przez funkcje i krotki w Scali

Krolik

W Scali już dawno nie ma ograniczenia na 22 argumenty. Bodajże od 2.11. 2.11 to zabytkowa wersja. A jeśli chodzi o dużą liczbę argumentów, to nie jest problemem w językach, w których argumenty można nazywać przy wywoływaniu i które mają domyślne wartości. Jest to styl powszechnie stosowany np. w R i nie ma naprawdę z tym żadnego problemu.

Kamil Żabiński

@Krolik: przeglądam Scaladoca Scali 2.13 i widzę klasę max Tuple22. Scala 2 w przeciwieństwie do Kotlina nie ma tych klas generowanych podczas kompilacji. Znalazłem jakiś wpis że od Scali 2.11 można twożyć case classy z ilością elementów większą niż 22 https://underscore.io/blog/posts/2016/10/11/twenty-two.html , ale dla krotek nic takiwgo nie widzę. A nawet mam potwierdzenie limitu w https://docs.scala-lang.org/tour/tuples.html

Krolik

A, ok, mój błąd - faktycznie w 2.11 naprawili to tylko dla case class. Ale w Scala 3 jest naprawione wszystko: https://dotty.epfl.ch/docs/re[...]dropped-features/limit22.html

Kamil Żabiński

Lub zepsute. Z zależności od której strony patrzeć :/

Potat0x

@Shalom A gdy wszystkie argumenty są wymagane? Wtedy builder rozwiązuje jeden problem, ale wprowadza następny - trzeba pamiętać podaniu wszystkich parametrów. Lub zrobić funkcję-monstrum, która to sprawdzi, niestety dopiero w runtime.

Wibowit

W Scali funkcja jest obiektem (typu np Function13), a metoda składową klasy. Limit na liczbę parametrów metod był zawsze taki jak w JVMie czyli jakieś 255 chyba. Limit na ilość argumentów funkcji wynika z tego, że te klasy Function0, Function1, ..., Function22 trzeba wygenerować, skompilować i wrzucić do scala-library.jar Zmiana w Dotty polega na tym, że zamiast (nieistniejących, ale potencjalnych) Function23, Function24, itd mamy jedną klasę FunctionXXL, która ma metodę apply typu varargs i przez to dostajemy boxowanie elementów (źle wpływa na wydajność i zużycie pamięci) ale za to do varargsa można wrzucić dowolną ilość argumentów. Vavr w wersji 0.10.0 ma tylko od Function0 do Function8: https://www.javadoc.io/doc/io.vavr/vavr/0.10.0 więc ograniczenie jeszcze bardziej restrykcyjne niż w obecnej Scali.

amd

Jezeli ten plik to nie jest wygenerowany przez coś to tam jest znacznie wiecej wtf'ków. 5k linii, 20 parametrow plus, wszyskie typy oprócz const stringa maja swoj define. Gdzie Ty pracujesz. (w sensie lekko mi żal twej osoby)

wyebani

@Potat0x: Da się zrobić fajny builder, który wymusi na zainicjowanie wszystkich wymaganych pól. Link: https://bulldogjob.pl/news/34[...]odporne-api-klasy-czyli-jakie

TomRZ

Jeszcze nie słyszeli o ValueObject?

several

@Shalom goście nie ogarniają branchowania w gicie, trzeba im tłumaczyć co to const correctness i potrafią uparcie twierdzić, że RAII wcale nie jest im potrzebne a Ty wzorców projektowych od nich wymagasz :D

amd

A to nie ty pisałeś że korzystacie z c++17? Przecież wszystko > c++98 (a może i cały c++), dla takich ludzi to jak dać strzelbe dziecku.

several

@amd Piszemy, ale pierwsza wersja systemu na sprzedaż powstała tak w 94' także w repozytorium mamy cały przekrój historyczny c++. No i nie wszyscy po norweskiej stronie chcą się uczyć nowych rzeczy także piszą po staremu. Nie będę tu wrzucał ładnych fragmentów bo nie byłoby z czego się śmiać.

jarekr000000

Szacun, że ten kod się konpiluje i działa na nowszych kompilatorach. Myślałem, że kod bazujący na UB w C/C++ to nadal norma. A w latach 90tych na pewno była.

several

@jarekr000000: Parcie na nowy toolset i portowanie niekompatybilnego kodu to jedna z najlepszych decyzji jakie mogli podjąć w tym projekcie, to wcale nie jest norma w świecie c++. Mieliby by spory problem ze znalezieniem pracowników gdyby nadal siedzieli na VS2010 czy 2013. Poza tym nie wszystkie stare fragmenty wyglądają tak źle. Jest sporo kodu pisanego typowo w C (pewnie jakiś sceptyk C++) i widać, że człowiek wiedział co robi. Szkoda, że już nie pracuje.

amd

Ja bym nie dał rady robić w projekcie który nie ma przynajmniej c++11. Ani w teamie gdzie nie ma wizji chociaż na c++17. Wiec rozumiem co masz na myśli.

jarekr000000

@amd młody jesteś, więc może Ci się wydaje, że nieprzekupny.

amd

Nie wiem czy taki młody. Niestety nastały takie czasy że jestem w teamach do których trafiam już jednym z najstarszych. (po Polskiej stronie)
A co do nieprzekupności, to można zarabiać bardzo dobrze nie zgadzając się na siedzenie w łajnie.

jarekr000000

@amd w temacie nie siedzenia w łajnie z OK kasą to jakbyś słyszał o pracy w Haskellu (może być Idris), bez Scruma, gdzieś nad morzem śródziemnym i za 180k EUR rocznie...

amd

Co jest złego w siedzieniu w Haskelu bez Scruma. Ja raczej mówiłem o siedzieniu w javie 1.2, c++98.

jarekr000000

No właśnie nie ma nic złego, tylko żeby kasa sie zgadzała.

amd

No to jest oczywiste. Wiadomo że zawsze do tego trzeba podchodzić jak do wagi sztabkowej. Jeśli ktoś oferuje mi milion złotych rocznie to mogę przymknąć oko na technologie. Ale takich ofert w PL nigdy nie widziałem. W sumie nie widziałem za bardzo ofert na wolnym rynku które by znacznie przekroczyły 100k USD(Co jest odpowiednikiem ~30k brutto). Zakładam że pewnie się jakieś znajdą tylko trzeba mieć odpowiedni background + odpowiednie znajomości.
Natomiast jeśli w fajnych technologiach mogę robić za 30k to nie będę w słabych robił za ~33k (10% więcej)

azalut

wiecie.. ostatnio siedze nad takim wschodnim kodzikiem, że jakby tylko nie było presji czasowej to bym bloga otworzył