Zwracanie nulla a dobre praktyki

Zwracanie nulla a dobre praktyki
Lectre
  • Rejestracja:około 10 lat
  • Ostatnio:ponad 6 lat
  • Lokalizacja:Warszawa
  • Postów:293
0

Cześć. Używam JDBC do połączenia z bazą. Stworzyłem metodę, która jako argument przyjmuje polecenie sql, a zwraca w zależności ResultSet przy SELECT, lub null przy poleceniach, które nic zwracać nie mają. Null jest też zwracany w przypadku wyjątku złego polecenia sql, tak aby szybko korzystać z bazy za pomocą jednej metody, bez bawienia się w wyjątki na poziomie programowania tego, co faktycznie ma robić aplikacja. Moje pytanie brzmi: Czy zwracanie nulla w tych wypadkach i w ogóle ten sposób myślenia to dobra praktyka, czy nie koniecznie?

niezdecydowany
niezdecydowany
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 9 lat
  • Lokalizacja:Bieszczady
1

Mega słabym pomysłem jest informowanie o błędzie zwracając nulla i zwracając nulla jako brak wyniki... nawet nie że złym, ale bezsensownym.

Nie zwracasz nulla, zwracasz albo kolekcję która jest pusta jak nie ma wyników albo (lepszy pomysł) zwracasz Optional<Typ>
O błędzie z poleceniem informujesz wyjątkiem - po to one są.

EDIT

bez sensu, ja napisałem tylko swoją opinie, nie akceptuj odpowiedzi po 20min... poczekaj, ja chętnie posłucham co napiszę, bo ja wiem, @Shalom, @Koziołek, @Xix , @karolinaa or @katelx


"Perhaps surprisingly, concurrent programming isn’t so much about threads or
locks, any more than civil engineering is about rivets and I-beams."
edytowany 1x, ostatnio: niezdecydowany
Zobacz pozostały 1 komentarz
complex
Rzucanie wyjątku podczas niepowodzenia operacji to mega zły pomysł.
katelx
w jakiej elicie mi sie przyszlo znalezc, przyznam ze dopiero teraz czuje jak dobra decyzja byla rejestracja
panryz
uważaj na @karolinaa i @Xix oni potrafia omamić.
katelx
@panryz obawiam sie ze juz za pozno...
KA
KA
  • Rejestracja:prawie 12 lat
  • Ostatnio:prawie 5 lat
  • Lokalizacja:Warszawa
  • Postów:1683
0

dobra jako, że @niezdecydowany wywołał EKSPERCKIE SPEC GRONO DS. JAVA (jeszcze @complex niech się wypowie ). do rozważenia proponuję przypadek
w którym jest metoda ala Integer getJakasTamWartosc(); i gdy tej wartości nie ma to zwraca nula. Pomijając, że to taki dodatkowy stan w stosunku do int, to
żeby być uczciwym wobec Optionala - muszę wszystkie takie rzeczy przerabiać na niego? dużo tego ehh ;/ .


PROGRAMY NA ZAMÓWIENIE, ZALICZENIA STUDENCKIE, KONFIGURACJA SERWERÓW, SYSTEMÓW I BAZ DANYCH, STRONY INTERNETOWE, POMOC W PROGRAMOWANIU, POPRAWIENIE I OPTYMALIZACJA APLIKACJI
JAVA, C++, LINUX, WWW, SQL, PYTHON
POSIADAM KOMERCYJNE DOŚWIADCZENIE
TANIO, SZYBKO I PORZĄDNIE
Z KOMENTARZAMI OBJAŚNIAJĄCYMI KOD
PISZ NA PRYWATNĄ WIADOMOŚĆ
CENY JUŻ OD 49,99ZŁ ZA PROGRAM
ZAJMIJ SIĘ TYM CO CIĘ NAPRAWDĘ INTERESUJE!
niezdecydowany
niezdecydowany
wywołałem, bo jestem za stworzeniem takiego kółeczka wzajemnej adoracji :D:D:D będziemy sobie pisać jacy zj1@sci jesteśmy, co Wy na to ?
KA
oki i będziemy rozwiązywać problemy milenijne jak ten mój. serio
niezdecydowany
niezdecydowany
dla mnie dzisiaj problemem jest niedziałająca formatka dla klienta na wczoraj - także też nic sofitikejted - nie wiem... może rozwiążmy jakiś problem z zaawansowanym algorytmem, znaczy wy rozwiążcie a ja się podepnę - bo nie umiem algorytmów, potem będziecie jeździć na konferencje, a ja z wami - będę siedział w starbaksie z białym maczkiem ...
spartanPAGE
Albo krzyżówkę, w końcu piątek jest
katelx
@niezdecydowany jeszcze wymysl haslo i statut dla tego koleczka
XI
  • Rejestracja:około 10 lat
  • Ostatnio:prawie 9 lat
  • Postów:231
0

To ja jestem od zadawania pytań i ja baz danych jeszcze nie programowałem :) jeśli wy bardzo byście chcieli to mogę spytać <ort>wójka</ort> google :) Ale więcej z wami będę mógł gadać jak w końcu książkę o Java przeczytam (tak, chyba zostanę przy kochanej Javie po tym jak mnie z tremy po C++ Builder i C++ Vizual Studio wyzwoliła)

Zresztą mam braki w klasach z Java :)

edytowany 2x, ostatnio: bogdans
niezdecydowany
niezdecydowany
masz braki nie tylko w javie, w życiu też :D
bogdans
Java wyzwoliła cię z tremy, czy z traumy?
XI
i z tego i z tego :)
complex
  • Rejestracja:prawie 10 lat
  • Ostatnio:ponad 9 lat
  • Postów:21
1

Zwracanie wartości null przy błędzie nie należy do dobrych praktyk programistycznych. Lepiej zamiast tego zwrócić false, a gdy operacja się powiodła zwrócić true w przypadku funkcji boolean. W twoim przypadku ResultSet przy powodzeniu, pusta kolekcja i wyjątek przy niepowodzeniu.

edytowany 3x, ostatnio: complex
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
3

@Lectre moim zdaniem powinieneś tą metodę rozbić na dwie i tyle. Zresztą tak jak i samo JDBC robi. Jedna która zwraca resultSety i powinna przyjmować np. selecty a druga która zwraca np. tylko czy sie coś powiodło albo ilość wierszy które zostały zmienione (insert, update). Robienie z tego jednej metody jest po prostu bez sensu.


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

Do końca nie rozumiem, skąd ta nienawiść do null'i. Wydaje mi się, że ich nadużywanie doprowadziło do sytuacji, w której zwracanie nulli jest złe na zasadzie "wszyscy wiedzą o tym". Tak, czytałem książki, Clean Code w szczególności. Zgadzam się z tym, że jeśli danych nie ma to należy zwracać puste kolekcje zamiast nulli.

ALE:
Mamy metodę zwracającą Integer. Jak rozróżnić, czy wartość jest niedostępna, czy też po prostu zerowa? Zakładając, że OBIE wartości mają swój sens biznesowy (przykładowo: kurs waluty na dzień bieżący - może być niedostępna i w teorii może być zerowy. Niedostępność kursu jednej waluty nie powinna blokować operacji).

panryz
Tutaj z pomocą może nam przyjść wzorzec projektowy o nazwie NullObject
airborn
Null jest w takiej sytuacji bez sensowny dlatego, że program jasno nie określa że ta metoda może nie zwrócić oczekiwanego wyniku i wymusza później defensywne sprawdzanie czy rezultat nie jest null'em. Jeżeli z góry zakładasz, że dana metoda może zwrócić NIC, to albo jawnie opakuj to w optionala (i nigdy nie zaskoczy Cię NPE dwie warstwy wyżej) albo tak jak napisał @panryz nie zwracaj typów prostych, tylko opakuj to w obiekt i zwróć NullObjecta powiązanego z tym obiektem.
panryz
Optional jest od Java 8 dopiero :)
airborn
W Guavie jest od dawna ;)
katelx
  • Rejestracja:prawie 10 lat
  • Ostatnio:5 miesięcy
  • Lokalizacja:Hong Kong
3

imo nulle powinny byc zbanowane, ciezko mi uzasadnic ich istnienie w jezyku obiektowym. w twoim wypadku powinenes rozdzielic funkcjonalnosc na co najmniej dwie metody, nawet klasy i rzucac wyjatek a nie zwracac nulle

KA
tak? to jak miałoby wyglądać mapowanie nuli z baz danych !!??!
niezdecydowany
niezdecydowany
@karolinaa dalej jesteś pijana ? a jak wgląda mapowanie nulli w scali ? chodzi przecież o język programowania, a nie o to co siedzi w bazie.
KA
nie wiem jak wygląda
niezdecydowany
niezdecydowany
no to popatrz przez okno.
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)