Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Java8 krótki przegląd.


Gość povskill

Rekomendowane odpowiedzi

Opublikowano

Jak każdy zapewne już się dowiedział powitała nas oficjalna wersja Javy - ósemki co nowego?
 
 
 
 

Otóż jak dla mnie "dupy nie urywa" ale jest w porządku.

  • Wyrażenie "Lambda"
  • Pozbycie sie "perm gen"
  • Malutka virtualna maszyna
  • Sortowanie równoległe dla tablic, nowe api dla daty i inne pierdoły.

Wyjaśnienia:
Na początku tworzenia tematu nie wiedziałem kompletnie nic o tym co będę pisał, więc starałem się pisać językiem, który i ja rozumiem, także lektura jest dla osób znających podstawowe pojęcia Javy i programowania.
 



1. Wyrażenie "Lambda":

 

Prawdopodobnie najbardziej spopularyzowana aktualizacja ósemki. Głównym celem owego wyrażenia jest to aby części naszego kodu z obiektami pozamieniać na zwykłe metody. Jeszcze w 100% nie ogarniam tego ale postaram się przybliżyć problem.

Przyjmijmy, że mamy interfejs z jedną funkcją tudzież metodą w środku (tzw @FuctionalInterface, dawniej SAM - Single Abstract Method):
 
Wfgnt9c.png
 
Do tej pory aby stworzyć nową implementacje tegoż interfejsu robiliśmy:
 
8KUPyzB.png
 
Teraz dzięki Labdzie, Lamb,Lambiątku, Lambibambi (nwm jak to odmienić) kod sprowadza się do jednej linii:
 
vw40iwW.png
 
Ogólne założenie jest takie: InterfejsZJednąMetodoą nazwa = (parametry) -> kod Czyli jeśli do interfejsu dodamy 2 parametry dajmy na to int i Rectangle i nwm bd chcieli różnymi sposobami tymi dwoma parametrami manewrować to:

4D7dNzH.png
Ten przykładowy kod zwróci nam : "java.awt.Rectangle[x=0,y=0,width=6,height=6]"
 
Więc tak, poznaliśmy już '->' a teraz druga część czyli '::' co dla programisty c++ teoretycznie powinno być zrozumiałe (choć nie do końca).
Więc tak, jak wspomniałem gdzieś tam wyżej, że dzięki lambdzie możemy pozamieniać metody na obiekty albowiem niech się stanie metoda obiektem!
 
Enc tak, rozszerzamy naszą klase z prostokącikami o dodatkową 'RectangleActions' która będzie statyczna. (pewnie zdarzyło się już komuś robić full static class czyli tzw klasy pomocne do np zamieniania pierwszej litery na dużą, sortowania etc, chodzi o to aby kod był dostępny z każdego poziomu programu, na tej zasadzie będzie się opierać operator '::' w tym przykładzie)
 
ZPKICB6.png
Boom! Jak widzimy metody grow i shrink w naszej klasie pomocniczej są statyczne więc dostęp do nich tradycyjnie mógłby wyglądać na zasadzie RectangleActions.shrink/grow(integer,rectangle). A my zrobiliśmy coś magicznego, czyli tak naprawdę przyrównaliśmy odwołanie metody do lokalnej zmiennej o typie interfejsu RectangleAction!
 
Tak, a teraz na 'Chopski rozum' w interfejsie mamy 1 metode o parametrach int i rect tak? tak. Metoda shrink ma dokladnie te same parametry co nasz funkcyjny interfejs więc jak dla mnie to nie widzę problemu by to przyrównać ;)
 
Jeśli stworzymy nowy funkcyjny interfejs np RectangleAction2 o identycznej strukturze czyli takiej samej metodzie funkcyjnej, to możemy go tak samo przypisać.
 
Operator '::' można także używać bez odwołań statycznych tzn na normalnych obiektach, czyli dla naszego przykładu musielibyśmy zmienić metody klasy RectangleActions na publiczne, następnie utworzyć nowy obiekt tejże klasy RectangleActions ra = new ... i odwołać się do metody za pomocą operatora '::' jak poprzednio, ale tym razem już poprzez użycie zmiennej tego obiektu czyli ra::shrink;

To by bylo na tyle jeśli chodzi o Lambdy, myślę że przybliżyłem ten temat, nie widzę sensu go bardziej rozpisywać bo jeśli ktoś ogarnie to co tutaj napisałem to bez problemu odkryje więcej możliwości ich użycia.
 

2. Pozbycie się 'PermGen'

 

PermGen (Permanent Genaration) - To część pamięci która zawiera informacje o załadowanych klasach i ich metadanych, jest to oddzielna część heap-u. (własnymi slowami).


Owy perm gen został zastąpiony tzw 'MetaSpace', cóż tu dużo gadać na ten temat. Teraz nasze informacje o klasach są przechowywane na stosie, daje nam to tyle, że nie musimy się już martwić o błąd typu "Permgen out of space", nie będzie już również parametrów dla jvmki "permSize" i "MaxPermSize". Ale nie należy też nie zapominać o memory leakach spowodowanych classloaderami ;) tego nic nie niweluje huehue.


3. Malutka jvmka

 

Krótko: wirtualna maszyna javy nie przekracza 3 megabajtów, a to, że samo api ma 100 to już inny problem ;) Głównie chodzi o to, żeby na małych urządzeniach java sprawowała się lepiej.
 

4. API API API.

 

Dużo udogodnień w api typu sortowanie równoległe etc (java.utils.Arrays) tego chyba raczej nie będę opisywał, wystarczy przejrzeć javadoc.
 
 
To by bylo na tyle ode mnie, życzę miłej zabawy.

Listę wszystkich aktualizacji można znaleźć: http://openjdk.java.net/projects/jdk8/features

Opublikowano

Jak dla mnie nie różni się od zwykłej javy za bardzo

 

Zrobiłeś mój dzień.

Opublikowano

Wątpię by ta Lambda była taka przydatna :) Jak dla mnie (programisty) najbardziej przydatne zmiany są w API a tego nie opisałeś, reszta to tylko czysto techniczne zmiany które mnie średnio obchodzą.

 

Wlasnie taki myk, że te przydatne zmiany w api są stworzone za pomocą lambdy ;x Dodam to może później

  • 1 miesiąc temu...
Opublikowano

Wątpię by ta Lambda była taka przydatna :) Jak dla mnie (programisty) najbardziej przydatne zmiany są w API a tego nie opisałeś, reszta to tylko czysto techniczne zmiany które mnie średnio obchodzą.

Trochę spóźniona odpowiedź, ale jak dla mnie dodanie Lambdy jest bardzo istotne. Dzięki temu można w Javie pisać funkcyjnie (czyli w sposób którego coraz więcej uroków zaczynam dostrzegać):

http://pl.wikipedia.org/wiki/Programowanie_funkcyjne

co naprawdę daje wiele możliwości.

708121422388637873334.png

Opublikowano

Jak narazie z tego co wypisałes nie rozumiem tylko zastosowania tej lambdy, moze z czasem gdy wiecej sie naucze bedę w stanie to zrozumiec:D

 

a pozostałe rzeczy opisane przez ciebie wydaja sie bardzo przydatne ;)

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...