Leciwe cechy Javy [Dyskusja]

Leciwe cechy Javy [Dyskusja]
0

Jak dla mnie platforma NET straciła swoją siłę i zalety wraz z końcem aplikacji desktopowych. W WinFormsach pracuje się genialnie, w WPF też nieźle, ale już w webowym ASP MVC już średnio - jakoś mi to nie podeszło zupełnie, choć na pewno znajdą się zwolennicy klepania stron w ASP MVC. Jedyne co się może podobać w platformie NET to IMO XAMARIN, ale czy się przyjmie to też trudno powiedzieć (jeszcze trochę mu brakuje do stabilnej, pewnej pracy). Samo Visual Studio też jest świetnym IDE (to IMO najlepszy produkt Microsoftu), ale co z tego, dobre IDE to za mało.

Ty trollujesz prawda?

0

Mi jako programiście Javy nie przeszkadza pisanie w tego boilerplejtu i posiadania dyskusyjnie gorszej składni dopóki pisze się w niej ciekawe projekty :) A najmocniejszym punktem javy i tak jest jej ekosystem, a nie sam język.

Jednej i drugiej grupie skrajnych zwolenników i przeciwników chyba troszeczkę w główkach się poprzewracało.

S9
  • Rejestracja:ponad 10 lat
  • Ostatnio:5 miesięcy
  • Lokalizacja:Warszawa
  • Postów:3573
0

Boilerplate i Java?
Hmm czegoś takiego nie zauważyłem


"w haśle <młody dynamiczny zespół> nie chodzi o to ile masz lat tylko jak często zmienia się skład"
Shalom
To porównaj ile kodu potrzeba żeby np. w javie wczytać plik, zdekodować z niego base64 z długim hex intem a potem tego hex inta zamienić na ascii, a ile kodu potrzeba dla tego samego zadania w pythonie ;)
Wibowit
w javce pewnie znajdzie się jakaś biblioteczka do tego
Shalom
@Wibowit no to albo bojlerplejt albo zewnętrzna zależność, nie wiadomo co gorsze ;)
Wibowit
Zależy od sytuacji. Ale zwykle wolałbym zewnętrzną zależność, dobrze wytestowaną. Np takie Apache Commons.
Shalom
A no tak, to co innego ;) Jakby to była Guava czy Apache Commons to ok, szczególnie ze pewnie i tak już jest w zaleznościach i tak. Ale nie dajmy się zwariować, bo się skończy left-padem ;)
0
  • obecność nulli
  • sztucznie dodane programowanie funkcyjne (ale i tak dobrze, że jest)
  • checked exceptions, w szczególności przeszkadza jak trzeba je łapać gdzieś w lambdach
  • brak akcesorów których wymaga np. jsf czy jpa/hibernate (chociaż tu akurat jest takie coś jak @Access(AccessType.FIELD) )
  • czekam na Valhalle
KA
checked exceptions, w szczególności przeszkadza jak trzeba je łapać gdzieś w lambdach Zainteresuj się javaslang ;]
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0
  • @Mały Kot te nulle to trochę jak goto w C++. Jest bo jest, ale to nie znaczy że należy korzystać skoro jest tez Optional a pewnie kiedyśtam będzie Either.
  • Nie wiem co jest tam sztucznego, szczególnie że Guava już dawno temu dawała podobne możliwości i od dawna można było tak pisać.
  • W wielu sytuacjach na te wyjątki w lambdach moze zaradzić:
Kopiuj
@FunctionalInterface
public interface CheckedFunction<T,S,E>{
    T apply(S arg) throws E;
}

Bo wtedy w swoich metodach przyjmujesz taki CheckedFunction zamiast Function i już nic nie trzeba łapać przy definicji lambdy.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
edytowany 1x, ostatnio: Shalom
S9
  • Rejestracja:ponad 10 lat
  • Ostatnio:5 miesięcy
  • Lokalizacja:Warszawa
  • Postów:3573
0

Dlaczego nulle to takie zło?


"w haśle <młody dynamiczny zespół> nie chodzi o to ile masz lat tylko jak często zmienia się skład"
Wibowit
  • Rejestracja:prawie 20 lat
  • Ostatnio:około 13 godzin
2

Bo bardzo łatwo o NullPointerException. Jakakolwiek (no dobra, może przesadzam) metoda by zaznaczyć, że referencja może być pusta jest dobra. W Scali od zawsze jest Option. W Javie doszło niedawno Optional. W Kotlinie są typy z pytajnikiem.


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
jarekr000000
W Javie tak naprawde powinno się używać Option z Javaslang - ten optional z JDK to pomyłka. (Nieważne jak bardzo chłopaki by starali się to uzasadnić - Brianie Goetz... zepsułeś). Tu dobre wideo , z którego jednak całą końcówką się nie zgadzam (razem z Mario Fusco i innymi monadowymi wariatami) Stuart Mark: https://www.youtube.com/watch?v=Ej0sss6cq14
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
3

@scibi92 pisałem o tym juz gdzieś -> bo nulle są niewidzialne. Zwrócenie nulla to największy hardkor jaki mozesz zrobić. Rzucenie checked exception widać. Zwrócenie optionala czy either widać. I musisz to jakoś obsłużyć - musisz się zastanowić co się ma stać kiedy gdzieś coś poszło nie tak. Zwrócenia nulla nie widać a często musiałbyś długo kopać w kodzie żeby dojść do miejsca z którego go ktoś faktycznie zwrócił. W efekcie często w kodzie nikt nie bierze pod uwagę że cos może być nullem i taki obiekt sobie lata aż nie wywali NPE i potem siedzisz i debugujesz szukając skąd to się wzięło.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
jarekr000000
  • Rejestracja:ponad 8 lat
  • Ostatnio:około godziny
  • Lokalizacja:U krasnoludów - pod górą
  • Postów:4707
2
Shalom napisał(a):

. W efekcie często w kodzie nikt nie bierze pod uwagę że cos może być nullem i taki obiekt sobie lata aż nie wywali NPE i potem siedzisz i debugujesz szukając skąd to się wzięło.

Jest jeszcze jeden gorszy poziom niż tylko rzucenie nulla - przekazanie nulla dalej.

Właściwie nie wiem ile razy widziałem w kodzie taki patent - obsługa Nulla "like a boss"

Kopiuj
public UserSettings getUserSettings(User user) {
    if ( user == null) {
       return null;
    } 
..... 
}

Najbardziej lubię jak taki kod ktoś dopisuje "potem" z komentarzem - obsługa nulla.

Chciałem napisać plugin do mavena, który po wykryciu takiego kodu od razu formatuje dysk. To powinien być obowiązkowy plugin - nawet na CI.

user image


jeden i pół terabajta powinno wystarczyć każdemu
edytowany 10x, ostatnio: jarekr000000
AD
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 8 lat
  • Postów:67
0

Mi po doświadczeniach ze Scalą najbardziej brakuje:

  • inferencji typów
  • struktury danych immutable (Vector, List, itp)
  • case class i pattern matching (wiem że jest JavaSlang ale strasznie topornie to wygląda)
  • system makr / metaprogramowania

Jakby jeszcze zostały dodane typy wyższego rzędu to dałoby się uprawiać jakieś sensowne programowanie funkcyjne.

somekind
Tylko po co dodawać to do Javy? Nie lepiej od razu pisać w sensownym języku?
AD
Po to żeby Java stała się sensownym językiem :P.
somekind
Nadal będzie miała null, klamerki i upośledzone generyki. Nigdy nie stanie się sensownym językiem.
AD
Nulla można przeżyć jeśli się pamięta o tym by je pakować w Optional tam gdzie mogą się pojawić. Co do klamerek to dzięki lambdom jest ich trochę mniej, ale zawsze można by wprowadzić opcjonalne bloki kodu przez wcięcia jak np. w Scalite (https://github.com/lihaoyi/Scalite). Jeśli chodzi o generyki to bez wprowadzenia implicitów chyba by się nie dało tego sensownie rozwiązać.
TD
@somekind tylko jaki masz ten sensowny język? Scala mimo że jest pod wieloma względami lepsza to pewnie nigdy mainstreamem nie będzie. Fajnie gdyby w Javie było chociaż to o czym pisze @adwy.
somekind
@adwy, jeśli w języku jest null, to ludzie go używają, bo im tak jest "łatwiej". Istnieją tysiące bibliotek, które rzucają nullami na lewo i prawo, wszystkie je opakujesz w jakieś wrappery aby uniknąć NPE? Nie sądzę. Co do generyków - wystarczyłoby nie trzymać się "kompatybilności wstecznej" i nie implementować ich jako type erasure. @tdudzik - nie przeczę, oby tylko nie przesadzić. Do C# ciągle dodają nowe ficzery, i efekt jest tragiczny, 2/3 z nich w ogóle nie pasuje do języka, przez co kod wygląda jak połączenie C++ z Perlem.
KA
Do C# ciągle dodają nowe ficzery, i efekt jest tragiczny, 2/3 z nich w ogóle nie pasuje do języka, przez co kod wygląda jak połączenie C++ z Perlem. no to @somekind nie lepiej przerzucić się na Jave?
somekind
Raczej nie, cofanie się nigdy nie jest dobre.
KA
dobra przecież widać, że interesujesz się javą. lepsze to niż C++ z Perlem :P
somekind
Nie interesuję się, po prostu muszę z nią współpracować. No, a poza tym - kto by mi za to zapłacił?
KA
to Ty też piszesz w Javie? a zapłacił? no przecież w Javie jest więcej roboty niż w C# . zresztą opłacalna inwestycja nie zawsze od razu przynosi korzyści
somekind
No i co z tego, że w Javie jest więcej pracy, skoro mi płacą lepiej w czym innym? :)
KA
ale tak to byś pisał w Javie a nie jakimś słabym języku. zresztą czy serio liczy się tylko hajs?
somekind
Liczy się także przyjemność, dlatego nie pisuję w aż tak słabych językach jak Java.
KA
tak to ciekawe w jakim lepszym języku niż Java piszesz. bo chyba nie C# który wygląda jak perl z C++ ani TP
somekind
Wystarczy nie używać tych konstrukcji, które wyglądają jak Perl połączony z C++.
vpiotr
Java i C# to prawie to samo, przykłady: http://www.25hoursaday.com/csharpvsjava.html
somekind
No, artykuł sprzed 15 lat na pewno to udowadnia. :P
SO
LUL. No w 2001 roku to rzeczywiście pewnie C# za dużo się nie różnił od Javy.
vpiotr
@somekind: no przecież wiadomo nie od dziś że C# to podrasowany klon Javy i na początku były bardzo podobne, a to że dzisiaj jak to napisałeś w innym wątku o C# że ma "dużo więcej cukru składniowego" nie oznacza że nie są podobne. Po prostu po paru latach się rozjechały. Poczytaj co o tym pisali Bill Joy & Gosling. @some_ONE: LUL? Jesteś w Holandii?
KA
ej w sumie to fajne. zamiast LOL pisać LUL XD. #challenge_accepted
somekind
Owszem, bardzo wiele lat temu faktycznie można było powiedzieć, że C# to klon. Ale to jest nieaktualne od jakichś 10 lat, więc jeśli ktoś jeszcze używa tego argumentu, to albo jest ignorantem albo trollem.
jarekr000000
  • Rejestracja:ponad 8 lat
  • Ostatnio:około godziny
  • Lokalizacja:U krasnoludów - pod górą
  • Postów:4707
2
adwy napisał(a):

Mi po doświadczeniach ze Scalą najbardziej brakuje:

  • inferencji typów
  • struktury danych immutable (Vector, List, itp)
  • case class i pattern matching (wiem że jest JavaSlang ale strasznie topornie to wygląda)
  • system makr / metaprogramowania

Wygląda na to, że wielu brakuje i zamierzają to wprowadzić (poza makrami - tu mi krótko odpowiedział Mark Reinhold - myślą nad alternatywami (method handlers etc) ).
Wczoraj na Devoxxie w Antwerpii Brian Goetz miał interesującą prezentację na temat przyszłości Javy:

Ogólnie to ciekawe wyjasnienie - nie dodają do Javy za szybko nowych rzeczy bo chcą zobaczyć co się przyjmie i czego ludziom brakuje. Bo dodać coś jest łatwiej - niż potem usunąć (see null - Scala w zasadzie ma go nadal, albo cholerne '==' w JavaSkrypcie. Wiadomo, że kiepskie ale teraz to już trudno usunąć). Całkiem to rozumiem...

ALE

Z takim podejściem jest niestety problem - poczekamy sobie do Javy 10 albo 11 (czyli 2021?). Poczekamy na rzeczy, które już dziś wiadomo, że są dobre i zaakceptowane przez twórców Javy!

W tym momencie rozumiem, że jak mam taki sobie zespół Javowców i dłuższy projekt - to zaciskam zęby i jade w Javie. I będe rypał te equalsy, gettery, settery jeszcze przez następne 5 lat....

5 lat.... a możliwe, że za pięć lat pisanie kodu przez ludzi bedzie już tylko dyscypliną sportową.

Jeśli więc tylko jest jakaś szansa (niekrytyczny podprojekt, mały zgany zespół, projekty domowe) - to po co się męczyć - można sobie troszkę poszaleć. I to już.
Jest Scala, jest Kotlin, Rust, jest Haskell/Frege. Polecam - wyjście z grajdołka Javowego - z pewnością trochę odświeża. Potem sie wraca do Javy i pisze zupełnie inaczej (chociaż ile razy pisze buildera to płaczę :-( ).


jeden i pół terabajta powinno wystarczyć każdemu
edytowany 2x, ostatnio: jarekr000000
KA
(...)gettery, settery jeszcze przez następne 5 lat.(...) chociaż ile razy pisze buildera to płaczę https://projectlombok.org/ masz i https://www.youtube.com/watch?v=ukbIh0q9X3A
jarekr000000
@karolinaa używasz Lomboka? Bo to dobry wskaźnik tego, że Java jest dla Ciebie za słaba, i wolisz pisać np. w Kotlinie. Tylko nie chce Ci sie zmieniać rozszerzeń plików.
jarekr000000
Życie pisze najlepsze dowcipy: na stronie http://annotatiomania.com/ od dawna stało jako dowcip: My code tomorrow " var employees;". I jeśli wierzyć Oraclowi (patrz video z Devoxxa) - to właśnie jest przyszła składnia Javy. JavaScript górą jak zwykle :/
0

A jak ktoś nie zna w ogóle Javy, to może zaczynać od Scala lub Kotlin ?

KA
nie.
jarekr000000
tak, na pewno w przypadku Scali ma to sens. W Kotlinie trudno powiedzieć (jest mniej przykładów i pomocy "kotlin only")
Shalom
Może być problem ze znalezieniem informacji na temat API Javowego w Scali, tzn example będą głównie dla Javy. Ale to nauki samego języka nie powinno być problemu w kontekscie scala/java.
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)