--
Otrzymujesz tę wiadomość, ponieważ subskrybujesz grupę dyskusyjną Google o nazwie „Warszawa Java User Group (Warszawa JUG)”.
Aby zamieszczać posty w tej grupie, wyślij e-mail na adres warsza...@googlegroups.com.
Aby anulować subskrypcję tej grupy, wyślij e-mail na adres warszawa-jug...@googlegroups.com.
Aby uzyskać więcej informacji, odwiedź tę grupę pod adresem http://groups.google.com/group/warszawa-jug?hl=pl.
> abstract class A {
> List<A> getChildren();
> }
Sądzę, że tutaj należy szukać rozwiązania. Pytanie pomocnicze: czy
można mieć metodę bez ciała niebędącą jednocześnie abstract? Sądzę, że
odpowiedź brzmi: zdecydowanie nie. Przy kompilacji powinieneś otrzymać
błąd kompilacji: "missing method body, or declare abstract".
Jacek
--
Jacek Laskowski
Java EE, functional languages and IBM WebSphere - http://blog.japila.pl
Warszawa JUG conference = Confitura (formerly Javarsovia) :: http://confitura.pl
Zawsze podziwiałem osoby, które potrafią zrozumieć tajniki
posługiwania się typami generycznymi. Ten zapis Arrays.<A>asList() nie
pozostawia złudzeń, że nowi w nauce języka nie mają lekko, bo i
starszym (doświadczeniem) przychodzi to z pewnym wysiłkiem (zakładam,
że nie związanym w żaden sposób z wiekiem) :-)
2011/6/22 Jacek Kunicki <jacek....@gmail.com>:
Sądzę, że tutaj należy szukać rozwiązania. Pytanie pomocnicze: czy
> abstract class A {
> List<A> getChildren();
> }
można mieć metodę bez ciała niebędącą jednocześnie abstract? Sądzę, że
odpowiedź brzmi: zdecydowanie nie. Przy kompilacji powinieneś otrzymać
błąd kompilacji: "missing method body, or declare abstract".
Rzeczywiście kod, który wysłałem, się nie kompilował, w rzeczywistości metoda getChildren nie jest abstrakcyjna, ale zwraca jakąś listę. Na sam eksperyment nie ma to jednak wpływu.
W dniu 22 czerwca 2011 14:24 użytkownik Jacek Laskowski <ja...@japila.pl> napisał:2011/6/22 Jacek Kunicki <jacek....@gmail.com>:
Sądzę, że tutaj należy szukać rozwiązania. Pytanie pomocnicze: czy
> abstract class A {
> List<A> getChildren();
> }
można mieć metodę bez ciała niebędącą jednocześnie abstract? Sądzę, że
odpowiedź brzmi: zdecydowanie nie. Przy kompilacji powinieneś otrzymać
błąd kompilacji: "missing method body, or declare abstract".
A ja sądzę , że odpowiedź brzmi "przeczytaj wątek zanim przedstawisz swoje zdanie" :)
> A ja sądzę , że odpowiedź brzmi "przeczytaj wątek zanim przedstawisz swoje
> zdanie" :)
Michał,
Przeczytałem wątek i odpowiedziałem, aby mniej zaawansowani mogli
skorzystać i czegoś się nauczyć. Wiadomość Jacka (przedmówcy) była
myląca i niedoświadczeni mogliby wyciągnąć z tego mylne wnioski. A po
co? Stąd moja odpowiedź (uzupełniająca).
Uważam, że niczym złym uczestniczyć w dyskusji (nawet w tej, która
kończy się niepomyślnie dla uczestników - właśnie doświadczam tego
uczucia). Nawet w dobie "Google Ci powie", gdzie odpowiedzi leżą na
"wyciągnięcie klawiatury".
--
Otrzymujesz tę wiadomość, ponieważ subskrybujesz grupę dyskusyjną Google o nazwie "Warszawa Java User Group (Warszawa JUG)".
Aby zamieszczać posty w tej grupie, wyślij e-mail na adres warsza...@googlegroups.com.
Aby anulować subskrypcję tej grupy, wyślij e-mail na adres warszawa-jug...@googlegroups.com.
Aby uzyskać więcej informacji, odwiedź tę grupę pod adresem http://groups.google.com/group/warszawa-jug?hl=pl.
-- m.
2011/6/27 Irek Matysiewicz <iir...@gmail.com>:
--
Maciej Biłas
Wspomniana wyżej funkcja jest dostępna w Guavie (oczywiście operuje na
typach w com.google.common):
http://guava-libraries.googlecode.com/svn/trunk/javadoc/com/google/common/base/Functions.html#compose(com.google.common.base.Function,
com.google.common.base.Function)
> Wsparcie do FP w Guavie ogranicza się chyba tylko do dwóch prostych klas. Te
> dwie biblioteczki co zacytowałem wyżej trochę więcej, ale i tak nic nie może
> równać się z FP w Groovim czy Scali. Niedoskonałości języka nawet najlepsza
> biblioteka sensownie nie rozwiąże.
A Clojure, które jest językiem funkcyjnym i reklamowane jest m.in.
jako biblioteka do programowania współbieżnego?
A tak przy okazji, dziwi mnie, że tak łatwo stawia się znak równości
między Groovy i Scalą a FP. Mam nieodparte wrażenie, że w przypadku
Grooviego można założyć, że to chęć utrzymania znanej składni na rzecz
wprowadzenia nowego, np. FP, ale Scala to krok znacznie dalej, bo nowa
składnia, więc już niedaleko do języka typowo funkcyjnego - Clojure.
Czyżby myślenie imperatywne i obiektowe tak utkwiło w naszych
umysłach, że niewielu pokusi się o Clojure? Pytam z czystej ciekawości
niż przekonania o słuszności stosowania Clojure (który mi osobiście
przypadł do gustu).
Jacek
--
Jacek Laskowski
Java EE, functional languages and IBM WebSphere - http://blog.japila.pl
A tak przy okazji, dziwi mnie, że tak łatwo stawia się znak równości
między Groovy i Scalą a FP. Mam nieodparte wrażenie, że w przypadku
Grooviego można założyć, że to chęć utrzymania znanej składni na rzecz
wprowadzenia nowego, np. FP, ale Scala to krok znacznie dalej, bo nowa
składnia, więc już niedaleko do języka typowo funkcyjnego - Clojure.
Czyżby myślenie imperatywne i obiektowe tak utkwiło w naszych
umysłach, że niewielu pokusi się o Clojure? Pytam z czystej ciekawości
niż przekonania o słuszności stosowania Clojure (który mi osobiście
przypadł do gustu).
Ave.2
"Self-bounding generics" też są ciekawe (nie licząc kwestii
dziedziczenia):
SelfBounded<T extends SelfBounded<T>>
http://www.artima.com/forums/flat.jsp?forum=106&thread=136394
On 27 Cze, 11:18, Pawel Cesar Sanjuan Szklarz <pawe...@gmail.com>
wrote:
> Czesc
>
> Czekawe ze rzadko widuje sie generiki z &, a przeciez to sie przydaje. Tutaj
> najbardziej porombane generyk, ktory dostalem w praktyce:
>
> AbstractEditGridPresenter<D extends WidgetDisplay & GxtStoreDisplay<B, A>, R
> extends Result, A extends Action<R>, B, K extends Result, L extends
> Action<K>>
> extends WidgetPresenter<D>
>
> Mysle, ze pojawienie sie takich konstrukcji w kodzie powinno byc uznane za
> podejzliwy brzydki zapach w kodzie. W moim przypadku napewno tan poprzebne
> jest refaktoring, ale wiadomo, zycie.
>
> Pawel Szklarz.
>
> //TODO Secure for NPE
> class Person{
>
> private final String name;
> private final String surname;
>
> public enum Comparators4Person implements Comparator<Person>{
> byName{
> @Override
> public int compare(Person base, Person with) {
> return base.name.compareTo(with.name);
> }
> },//
> bySurname{
> @Override
> public int compare(Person base, Person with) {
> return base.surname.compareTo(with.surname);
> }
> },//
> ...
> ;
> }
> }
Zaczynam powątpiewać w moją znajomość Javy :( To wyżej, to wciąż w
Javie?! Mógłbyś napisać, jak korzystasz z tych typów wyliczeniowych?
Jacek
--
Jacek Laskowski
Java EE, functional languages and IBM WebSphere - http://blog.japila.pl
Rzeczywiście elegancki przykład możliwości javy. Brakuje tylko
przykładu na komparator złożony :)
Pozdrawiam
Bartek "Koziołek" Kuczyński
http://koziolekweb.pl
Lepiej pomyśleć dwa razy i zacząć programować
niż dwa razy programować i potem zacząć myśleć
\ /
~00~
\_/
|||
W dniu 28 czerwca 2011 11:40 użytkownik Jacek Laskowski
<ja...@japila.pl> napisał:
2011/6/28 Lasu <develo...@gmail.com>:
> //TODO Secure for NPE
> class Person{
>
> private final String name;
> private final String surname;
>
> public enum Comparators4Person implements Comparator<Person>{
> byName{
> @Override
> public int compare(Person base, Person with) {
> return base.name.compareTo(with.name);
> }
> },//
> bySurname{
> @Override
> public int compare(Person base, Person with) {
> return base.surname.compareTo(with.surname);
> }
> },//
> ...
> ;
> }
> }
Zaczynam powątpiewać w moją znajomość Javy :( To wyżej, to wciąż w
Javie?! Mógłbyś napisać, jak korzystasz z tych typów wyliczeniowych?
> Ja tam bym chętnie jeszcze mu trochę sterydów dopakował ;) min.
> rozszerzył wsparcie dla generyków tak aby były w stanie spinać
> elementy różniące się typem.
Czy to nie to samo, co stworzenie wspólnego nadtypu? W końcu rozumiem,
że najbardziej zależy Ci na utrzymaniu silnego typizowania, tak?
Czyżby pora na Scalę?
> Nawet Jacek L. mówił o schyłku javy kiedy byliśmy w radio występowaliśmy w
> radio 4 lata temu! I co? i nic..
I przywołany do tablicy dopiszę, że po primo, nie było to 4 lata temu
(moja kariera blogerska ma 5 lat, a po roku daleko mi było do
publicznych wypowiedzi), a po sekundo, już niewielu siedzi na poziomie
samej składni javowej, a raczej skupia swoje wysiłki intelektualne na
poziomie rozpozna(wa)nia szkieletów/rusztowań, itp. Wiele wokół nas
warstaw wyższego poziomu, które ukrywają za nas niuanse programowania
i poznawania składni Javy => wprowadza się DSLe. Możnaby pokusić się,
że Groovy, Scala, Clojure to nic innego, jak właśnie takie DSLe i
warto przypomnieć, że całe zainteresowanie wokół Javy to ostatnimi
czasy właściwie wokół JVM. Stosunkowo niewiele jest zmian w samym Java
API (ale dalekim, aby stanowić wyrocznię, albo znawcę tematu).
Jacek
--
Jacek Laskowski
Java EE, functional languages and IBM WebSphere - http://blog.japila.pl
2011/6/30 Michal Margiel <michal....@gmail.com>:
I przywołany do tablicy dopiszę, że po primo, nie było to 4 lata temu
> Nawet Jacek L. mówił o schyłku javy kiedy byliśmy w radio występowaliśmy w
> radio 4 lata temu! I co? i nic..
(moja kariera blogerska ma 5 lat, a po roku daleko mi było do
publicznych wypowiedzi),
a po sekundo, już niewielu siedzi na poziomie
samej składni javowej, a raczej skupia swoje wysiłki intelektualne na
poziomie rozpozna(wa)nia szkieletów/rusztowań, itp.
Wiele wokół nas
warstaw wyższego poziomu, które ukrywają za nas niuanse programowania
i poznawania składni Javy => wprowadza się DSLe. Możnaby pokusić się,
że Groovy, Scala, Clojure to nic innego, jak właśnie takie DSLe i
warto przypomnieć, że całe zainteresowanie wokół Javy to ostatnimi
czasy właściwie wokół JVM. Stosunkowo niewiele jest zmian w samym Java
API (ale dalekim, aby stanowić wyrocznię, albo znawcę tematu).
"640K ought to be enough for anybody." - Bill Gates, 1981Normalnie kocham takie przewidywania.Żeby nie było - nie mam nic przeciwko "alternatywnym językom", ale każdy z nas moze spobie powróżyć z fusów - a co będzie za 5 lat tego nikt nie wie. Ile to ja już lat słyszę o schyłku javy.. ale na słyszeniu się kończy...Nawet Jacek L. mówił o schyłku javy kiedy byliśmy w radio występowaliśmy w radio 4 lata temu! I co? i nic..
Scala, czy groovy to zdecydowanie nie DLS. dls to po prostu wygodne API opartego na danym języku, a języki wymienione przez Ciebei realizują magię na poziomie bytecodu.
równie dobrze mógłbyś powiedzieć że każdy język wyższego poziomu jest DLSem assemblera. I pewnie ziarenko (czy raczej atom) prawdy by w tym było. ale sensy w tym żadnego nie widzę.
W dniu 30 czerwca 2011 04:31 użytkownik Irek Matysiewicz <iir...@gmail.com> napisał:W dniu 2011-06-29 20:22, Lasu pisze:Później to znaczy kiedy? Ile lat musięliśmy czekać na Javę 7 od czasów Javy 5 (Java 6 to był tylko nieznaczny update na Javę 5). Oracle wydaje mi się, że nie będzie się opieprzał tak jak Sun, ale nic nie wiadomo. I właśnie taką lukę wypełniają języki alternatywne. Sam Oracle używa Grooviego jako język walidacji w Oracle ADF.
Jestem sceptykiem jeśli chodzi o mutantów językowych. Później dojdą
nowe rzeczy do Javy i Scala straci na znaczeniu prawdopodobnie.
Akurat na DZone jest artykuł (na pierwszej pozycji), że za 5 lat ktoś szacuje taki udział w rynku: 50% Java, 20% Groovy, 20% Scala i 10% inne języki JVM - http://www.dzone.com/links/r/scala_in_5_years_my_prediction.html . Nawet te 20% to niemało i ja tam wolę być w tych 20% czy 40%. :-)
"640K ought to be enough for anybody." - Bill Gates, 1981
Scala, czy groovy to zdecydowanie nie DLS. dls to po prostu wygodne API opartego na danym języku, a języki wymienione przez Ciebei realizują magię na poziomie bytecodu.równie dobrze mógłbyś powiedzieć że każdy język wyższego poziomu jest DLSem assemblera. I pewnie ziarenko (czy raczej atom) prawdy by w tym było. ale sensy w tym żadnego nie widzę.
W dniu 30 czerwca 2011 12:00 użytkownik Jacek Laskowski <ja...@japila.pl> napisał:2011/6/30 Michal Margiel <michal....@gmail.com>:
I przywołany do tablicy dopiszę, że po primo, nie było to 4 lata temu
> Nawet Jacek L. mówił o schyłku javy kiedy byliśmy w radio występowaliśmy w
> radio 4 lata temu! I co? i nic..
(moja kariera blogerska ma 5 lat, a po roku daleko mi było do
publicznych wypowiedzi),IMHO to było ok maj 2008, więc nie 4, ale ponad 3.a po sekundo, już niewielu siedzi na poziomie
samej składni javowej, a raczej skupia swoje wysiłki intelektualne na
poziomie rozpozna(wa)nia szkieletów/rusztowań, itp.czy to znaczy że to schyłek javy? moim zdaniem wręcz odwrotnie.Wiele wokół nas
warstaw wyższego poziomu, które ukrywają za nas niuanse programowania
i poznawania składni Javy => wprowadza się DSLe. Możnaby pokusić się,
że Groovy, Scala, Clojure to nic innego, jak właśnie takie DSLe i
warto przypomnieć, że całe zainteresowanie wokół Javy to ostatnimi
czasy właściwie wokół JVM. Stosunkowo niewiele jest zmian w samym Java
API (ale dalekim, aby stanowić wyrocznię, albo znawcę tematu).
Scala, czy groovy to zdecydowanie nie DLS. dls to po prostu wygodne API opartego na danym języku, a języki wymienione przez Ciebei realizują magię na poziomie bytecodu.
równie dobrze mógłbyś powiedzieć że każdy język wyższego poziomu jest DLSem assemblera. I pewnie ziarenko (czy raczej atom) prawdy by w tym było. ale sensy w tym żadnego nie widzę.
--
Pozdrawiam/Best regards
Michał Margiel
http://www.confitura.pl (dawniej Javarsovia)
http://www.linkedin.com/in/MichalMargiel
http://www.margiel.eu
--
A tu sie nie zgadzam. Np. w guice konfiguracja jest oparta o DSL, dokladnie:
> Ok, zgadza się. Uprościłem sprawę.. ale wciąż, skoro groovy to DSL to jaką
> on ma domenę?
Zluzowanie karbów kompilatora javy i zrzucenie odpowiedzialności
kompilatora na programistę => stworzenie języka dynamicznego (może
niekoniecznie w zgodzie z definicjami słownikowymi, ale w ogólnym tego
słowa znaczeniu). Czasami mam wrażenie, że kompilator przesłania
możliwości bajtkodu.
Źle do tego podchodzisz: do każdej działalności którą wykonujesz czy
zamierzasz wykonywać należy podchodzić jak do inwestycji (np. giełdowej
czy w nieruchomości). Tu nawet jak nie inwestujesz własnych pieniędzy,
to inwestujesz swój czas. A w inwestowaniu nie należy skupiać się na
jednej rzeczy (np. Javie), tylko na kilku (ale nie za wielu) różnych
(nazywa się to dywersyfikacją). Przykładem jest podejście low-risk,
low-reward (developerów Java z roku na rok jest coraz więcej i firmy
naprawdę mają w czym przebierać, ale masz przynajmniej jakąś pracę za
niekoniecznie duże pieniądze) + high-risk, high-reward (np. Scala,
Groovy - kto wie, może wkrótce warszawskie firmy będą szukać speców w
tych technologiach za wszelkie pieniądze). Jak high-risk, high-reward
wypali to super, jak nie, to na pocieszenie masz przynajmniej to
low-risk, low-reward. No i nie wspominając, że nawet jak to high-risk,
high-reward nie wypali, to przynajmniej będziesz miał przy tym niezłą
zabawę.
Z tym high-risk, high-reward zawsze jest trochę zgadywania. Kto 15 lat
temu zainteresował się Javą, teraz jest javowym guru (a wcale nie było
jasne czy to wypali), kto kilka lat temu zainteresował się aplikacjami
na Facebooka czy urządzenia mobilne teraz pewnie zarabia kupę kasy (a
wtedy też nie było jasne czy to wypali), a dla odmiany kto 15 lat temu
zainteresował się BeOS-em (był taki system operacyjny wokół którego było
całkiem głośno), niestety przegrał, a jak nie miał jednocześnie siatki
bezpieczeństwa w postaci low-risk, low-reward, to przegrał podwójnie.