Deklaracja możliwości wystąpienia wyjątku

Deklaracja możliwości wystąpienia wyjątku
0

Deklaracja, że metoda wyrzuca taki wyjątek jest tylko dla nas? Jak nie zadeklaruję to i tak mogę go przechwycić.
Czy coś się zmieniło?

staszkox
  • Rejestracja:ponad 9 lat
  • Ostatnio:prawie 3 lata
  • Postów:12
0

Checked exception albo obsługujesz w try/catch albo rzucasz dalej. Deklarowanie rzucenia wyjątkiem w metodzie A służy do wymuszenia obsługi, bądź ponownego rzucenia wyjątkiem przez metodę B, która skorzysta z A. Trochę nie rozumiem pytania :D.

0

Jak pisałem od góry i coś wyrzucałem z metody, to IDE automatycznie mi poprawiało że trzeba zadeklarować.
Mało z Javą robiłem.

staszkox
  • Rejestracja:ponad 9 lat
  • Ostatnio:prawie 3 lata
  • Postów:12
0

I dobrze podpowiadało, jeśli rzucasz checked exception "ręcznie" używając konstrukcji "throw new *Exception();" to... rzucasz wyjątek. Skoro rzucasz wyjątek to musi o tym wiedzieć deklaracja metody (bo go nie obsługujesz, tylko wyrzucasz dalej).
Analogicznie, niektóre API również deklarują wyjątki, jeśli w metodzie używasz takiego API, ale nie obsłużysz wyjątku, to wyjątek z tego API musisz przekazać dalej odpowiednio deklarując metodę (po prostu, jeśli czegoś nie obsługujesz, tylko rzucasz, to informacja o rzucaniu musi znaleźć się w deklaracji metody - dotyczy checked exceptions).

0

Jeżeli String jest empty, a w tym wypadku to nie może mieć miejsca, to nie ma sensu deklarować, po prostu wyrzucam, niech sypie błędami.
I dzięki za wyjaśnienie.

Źle to nazwałem - wydawało mi się że wymuszało a nie podpowiadało. Musiałem się poprawić :P

staszkox
  • Rejestracja:ponad 9 lat
  • Ostatnio:prawie 3 lata
  • Postów:12
0

Może inaczej, w javie mamy tak zwane checked exceptions - jeśli ich nie obsłużysz bądź nie wyrzucisz dalej dostaniesz błąd kompilacji. Dlatego większość IDE podpowiada (a właściwie wymusza) te rozwiązania w takiej sytuacji. Są też unchecked exceptions (np. NullPointerException), o które IDE się nie upomni, bo nie ma po co - ich obsługa jest opcjonalna ;)

PI
  • Rejestracja:ponad 9 lat
  • Ostatnio:3 miesiące
  • Postów:2787
0

Warto dodać, że rozwój technologii idzie się w kierunku unchecked exceptions (są one wygodniejsze). Ewentualną informację o wyrzuceniu takiego wyjątku można dodać w celu lepszej czytelności dla przyszłego programisty patrzącego w ten kod, aczkolwiek informacja o tym, że jest możliwy NullPointer nie jest żadną informacją, bo on wszędzie może wystapić.

Shalom
Jak używasz Optional to nigdzie nie powinien wystąpić nullpointer ;)
0

Ale tutaj ludzie są chętni do pomocy.
Chyba przez swoją pychę przymykam czasem oko na podstawy :D

Jeżeli się da uratować określając wartość domyślną to spoko, ale ja wole do tego moim zdaniem czytelniejszy operator trójargumentowy.
Jak coś zwracasz to można się pokusić o optional, albo gdy chcesz zamarkować argument że jest opcjonalny.
Chyba że źle optional zrozumiałem :P

Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0

Chyba źle zrozumiałeś. Optional to raczej coś stosowane jako wartość zwracana a nie jako argument. Żeby zasygnalizować ze dana metoda może nie zwrócic wyniku i trzeba to brać pod uwagę, szczególnie kiedy taka metoda nie rzuca wyjątku bo uważamy tą sytuacje za nie-wyjątkową.
Np. masz metodę która czegoś szuka w jakimś zbiorze danych i nie znalazła. Rzucenie wyjątku w takiej sytuacji może być dość dziwne, bo fakt że "nie znalazłeś" wcale nie jest wyjątkowy. Zwrócenie nulla jest ryzykowne bo ktoś może nie pomyśleć o tym że taka sytuacja wystąpi. Zwrócenie optionala od razu sygnalizuje że wartość może być "pusta" i trzeba coś z tym zrobić.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
0

Aha
No to jego siłą jest sama nazwa.
Jako argument spoko, bo wtedy można często obejść się bez tworzenia kolejnego konstruktora lub metody.
A jak można zwrócić coś surowego, jakieś empty, to używanie optional moim zdaniem siało by tylko niepotrzebny zamęt.

Co do wyjątków to jeżeli można, to wolę dać metodę w stylu boolean będzieDobrze(), niż zaśmiecać komuś lub sobie kod : D

No ale jeżeli tak się piszę w Java to spoko, trzeba się dostosować.

Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0

@Wielki Lew ale czasem nie ma czegoś takiego jak "jakieś empty" bo każda mozliwa wartość jest poprawna.
Co do robienia własnej metody zamiast rzucenia wyjątku to znów bez sensu, bo robisz jeszcze gorszy bajzel. Bo teraz to user musi sie martwić żeby sprawdzać czy metoda sie poprawnie wykonała. Ciekawi mnie w ogóle jak to robisz, bez wykonania tych samych operacji dwa razy. Założmy że operacją jest wczytanie konfiguracji. Jak chcesz sprawdzić czy będzie dobrze bez wczytania? :D I rozumiem że wczytasz żeby sprawdzić czy będzie dobrze a potem żeby faktycznie wczytać? Dla kosztownych czasowo operacji to jest po prostu śmieszne. Nie mówiąc już o tym że to klasyczny błąd check-then-act bo przecież stan może się zmienic pomiędzy wykonaniem tych 2 metod...
A wracając do tego sprawdzania to teraz user się musi martwić jak obsłużyc ten błąd i w efekcie pewnie skończy sie właśnie tym że sam rzuci wyjątek żeby to ogarnąć gdzieś kilka poziomów wyżej w kodzie ;]


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
0

@Wielki Lew ale czasem nie ma czegoś takiego jak "jakieś empty" bo każda mozliwa wartość jest poprawna.

A no prawda, bywa i tak, i wtedy tak.

Wiesz, jeżeli to jest aż takie śmieszne, że aż mnie śmieszy, to wtedy tak nie robię : D
To wszystko zależy od sytuacji, łatwo jest tak gadać...
Bywa że staram się umieścić taką metodę, czasem dodatkowo też puszczam cichacze (wyjątki ninja, na które trzeba ustawiać pułapki) i w razie czego , to cofnąć zmiany, lub zwrócić przysłany obiekt.

Co do przykładu Twojego,
aż takim pajacem nie jestem - wtedy bym puścił obviousa : D

Przeważnie jak zostawiasz implementacje to zostawiasz problem.

W ogóle to nick mi się zmienił :P

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)