Wątek przeniesiony 2019-06-04 21:37 z przez somekind.

wyjątki kompletnie bez sensu

Odpowiedz Nowy wątek
2019-05-30 10:21
0

Funkcja niezbyt długa, w środku blok try, i sprawdzenie warunku który może często zachodzić, jak tylko user się pomyli.
Jeśli true to leci wyjątek standardowy (znaczy nie jakiejś specjalnej klasy)
W catch parę linijek niżej łapiemy wszytko , zakładamy że jest to powyższy wyjątek i pokazujemy userowi komunikat
Oczywiście prawdziwy wyjątek nie ma szans na sensowną obsługę....
Facepalm
Skoro lameriada nie umie pisać to może niech goto używa na to samo wyjdzie

Ale to pytanie jest, czy bardziej do działu Programistyczne WTF jakie Was spotkały? - Silv 2019-06-04 22:50
A to już wiem po przeczytaniu wątku, zapomnij o moim pytaniu. :) - Silv 2019-06-04 23:24

Pozostało 580 znaków

2019-06-06 14:20
1
Gworys napisał(a):

Lecz osobiście uważam testowanie IsEmpty, getLeft, jest bez sensu w krytycznych wypadkach, kiedy aplikacja nie działa tak jak powinna działać.

Co przez to rozumiesz?


Spring? Ja tam wole mieć kontrole nad kodem ᕙ(ꔢ)ᕗ
Haste - mała biblioteka do testów z czasem.

Pozostało 580 znaków

2019-06-06 14:21
0
danek napisał(a):
Gworys napisał(a):

Lecz osobiście uważam testowanie IsEmpty, getLeft, jest bez sensu w krytycznych wypadkach, kiedy aplikacja nie działa tak jak powinna działać.

Co przez to rozumiesz?

Optionala albo Eithera zwracam tylko wtedy kiedy faktycznie jakiś zasób jest albo może być pusty, a nie np. wtedy kiedy nie mogę czegoś sprasować albo coś innego poszło nie tak.


Unhandled Exception: System.MissingMethodException: Constructor on type 'System.Exception' not found.
edytowany 2x, ostatnio: Gworys, 2019-06-06 14:25

Pozostało 580 znaków

2019-06-06 14:48
2

No i co robisz jak nie uda się sparsować? Wyjątek? I tak musisz go gdzieś złapać i coś z nim zrobić. Po to jest taki Either żeby mieć w lewej 'cześci' ewentualny błąd, a w prawej prawidłową wartość.


Spring? Ja tam wole mieć kontrole nad kodem ᕙ(ꔢ)ᕗ
Haste - mała biblioteka do testów z czasem.

Pozostało 580 znaków

2019-06-06 15:05
0
danek napisał(a):

No i co robisz jak nie uda się sparsować? Wyjątek? I tak musisz go gdzieś złapać i coś z nim zrobić. Po to jest taki Either żeby mieć w lewej 'cześci' ewentualny błąd, a w prawej prawidłową wartość.

Robię tak, aby nie poleciał wyjątek - wykorzystując do tego odpowiednie wzorce, dzięki czemu nie kaleczę języka domenowego oraz modelu, lecz zależy to od faktycznego kontekstu owej sytuacji. Jeśli poleci wyjątek to znaczy, że coś robię nie tak i wtedy przydaje się stackTrace z wyjątku, no chyba, że wolisz przez breakpointy skakać do tyłu i przodu.


Unhandled Exception: System.MissingMethodException: Constructor on type 'System.Exception' not found.

Pozostało 580 znaków

2019-06-06 15:18
2

I takim odpowiednikiem odpowiedniego wzorca też mogą być monady, więc trudno tu mówić o kaleczeniu ;)


Spring? Ja tam wole mieć kontrole nad kodem ᕙ(ꔢ)ᕗ
Haste - mała biblioteka do testów z czasem.

Pozostało 580 znaków

2019-06-06 15:29
1
danek napisał(a):

I takim odpowiednikiem odpowiedniego wzorca też mogą być monady, więc trudno tu mówić o kaleczeniu ;)

Słowo Optiona albo Ether jest jakoś mało domenowe. :P

A przelecenie wszystkiego Mapem i FlatMapem w jednej metodzie nie zawsze musi być najbardziej eleganckim i czytelnym sposobem.

Jak powiedziałem, zależy to od sytuacji.

Jeśli mówisz: "Taka sytuacja nigdy nie może się przydarzyć", czyli jest to przypadek krytyczny, to bardziej pasuje wyjątek.

Jeśli przewidujesz, że taka sytuacja jak brak możliwości sparsowania jest ok i aplikacja może działać dalej, to tak jak mówisz Optional czy Either też jest Ok.


Unhandled Exception: System.MissingMethodException: Constructor on type 'System.Exception' not found.

Pozostało 580 znaków

2019-06-07 13:24
0

Coś takiego dziś wyskoczyło mi na twitterze : Exceptions? No, just Try them off!


edytowany 1x, ostatnio: Kamil Żabiński, 2019-06-07 13:25
cos chyba link nie pykł - danek 2019-06-07 13:24
poprawione, na co dzień używam inne (nowszej) składni markdowna :D - Kamil Żabiński 2019-06-07 13:26

Pozostało 580 znaków

2019-06-07 13:30
1

@Kamil Żabiński: tylko Try z vavra powinno się używać do owrapowania wyjątków z jakichś zewnętrznych bibliotek na które nie masz wpływu. Jeśli używasz go tylko po to by mieć inną składnie niż try catch to tak na prawdę problem jest dalej ten sam


Spring? Ja tam wole mieć kontrole nad kodem ᕙ(ꔢ)ᕗ
Haste - mała biblioteka do testów z czasem.

Pozostało 580 znaków

2019-06-07 17:20
1

IMO ludzie maja problem z wyjątkami, bo mają w głowie przekonanie, że muszą je obsłużyć tu i teraz zaraz.
Właśnie takie podejście czyni z wyjątków wielki problem. Wystarczy chwila oddechu, stwierdzenie "nie muszę łapać tego tutaj", zastanowić się gdzie wyżej łapać wyjątki jeśli w ogóle.
Nawet w obecnym moim projekcie, widzę takie kwiatki. Zamiast jednego try catch w jednym miejscu kodu, to są rozsiane w +100 miejscach (przy chwili oddechu podczyszczę to).


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
edytowany 1x, ostatnio: MarekR22, 2019-06-07 17:21
Mozna lapac wyjatki w wielu miejscach. Np w celu wzbogacenia ich o dodatkowa informacje i rzucenia dalej. Gorzej jesli te miejsca to logowanie. - vpiotr 2019-06-07 20:20

Pozostało 580 znaków

2019-06-07 23:25
2
Gworys napisał(a):

Słowo Optiona albo Ether jest jakoś mało domenowe. :P

I bardzo dobrze.to jest słowo zrozumiałe w kontekście programowania, tak samo jak map, flatmap. Alternatywy gdzie tworzymy business friendly nazwy jak Vernon proponuje (Completes?) to chaos dla programistów.
Jak już muszę mniejsze zło wybrać to wolę, żeby programiści sie w kodzie nie gubili, a biznes gubi się w nim i tak.

Mozę nie uwierzysz, ale chodzą na tym świecie takie kwiatki, które uważają, że wyjątki i nulle to efekt zacofania programistycznego a jak się używa optionala to nie ma potrzebny pisać testów, które sprawdzają nulle i wyjątki.

To zupełnie dziwnne co więcej Twoje dalsze wypowiedzi jakby zupełnie idą w innym kierunku.
Tym niemniej - dokładnie: jeśli stosujemy Optionale i Eithery to dlatego, żeby nie testować nulli i wyjątków. Jak ktoś wrzuci do argumentu Optional null ( a nie None) to znaczy, że prosi o NullPointerException i należy prośbę spełnić. Robienie testów na niepoprawny kod IMO jest sensu, zwłaszcza jak daje sietakie kwiatki dość łatwo wykryć.

Jedynym sensownym dodatkiem w bardziej krytycznych fragmentach kodu będą tu asercje.
(btw. z róznycmi dziwnymi ludźmi miałem do czynienia, ale generalnie wsadzanie nulli w argument Optional lub rzucanie wyjątku jak jest Either to rzadkość, zwykle po pierwszym wyjaśnieniu ludzie ogarniają).


Bardzo lubie Singletony, dlatego robię po kilka instancji każdego.
edytowany 2x, ostatnio: jarekr000000, 2019-06-07 23:57

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0