Zbliż się do Java 8

Zbliż się do Java 8

Java, język programowania stworzony przez Jamesa Goslinga w 1991 roku miał na celu napisanie programu, który mógłby działać w wielu systemach operacyjnych. Oracle ma teraz Stemanship for Java i kontynuuje projekt w imię Openjdk. Z czasem wydano kilka nowych ulepszonych wersji Java, z których obecny to 1.8 Popularnie znane jako Java 8.

  • Przeczytaj to => Jak zainstalować Java 8 na centro, Red Hat i Fedora
  • Przeczytaj to => Jak zainstalować Java 8 na Ubuntu & LinuxMint

Język został zaprojektowany z uwzględnieniem tych właściwości:

  • Niezależny platforma- Program wykorzystuje maszynę wirtualną Java jako abstrakcję i nie uzyskuje dostępu do systemu operacyjnego na podstawie bezpośredniej. Co sprawia, że ​​programy Java są bardzo przenośne.
  • Programowanie obiektowe- Oprócz prymitywnych typów danych, wszystkie elementy w Javie można uznać za obiekty.
  • Język programowania silnie typu- Tak! Java to silnie tytułowy język programowania. Na przykład typy używanych zmiennych muszą być wstępnie zdefiniowane, a konwersja na inne obiekty staje się dość surowe. Należy to zrobić w przypadku programisty.
  • Interpretowany i skompilowany język- Kod źródłowy Java wymaga przeniesienia do formatu bajtowego, który nie zależy od platformy docelowej. Instrukcje są interpretowane przez maszynę wirtualną Java (JVM). JVM zawierający tzw. Hotspot-kompilator może potencjalnie przełożyć instrukcje krytyczne dotyczące wydajności na instrukcje natywnego kodu.
  • Automatyczne zarządzanie pamięcią- Java to taka platforma, która z powodzeniem zarządza alokacją pamięci i odpadaniem do tworzenia nowych obiektów. Program nie ma żadnego bezpośredniego dostępu do pamięci. W rezultacie Garbage Collector automatycznie usuwa obiekty, do których nie ma aktywnego wskaźnika.

Będąc deweloperem JQuery, dużo pracowałem z Java 8 w ciągu ostatnich kilku lat, czy to nowych aplikacji, czy migrując istniejące. I myślę, że nadszedł właściwy czas, aby zanotować niektóre z najlepszych praktyk, które uznałem za przydatne. Ten post na blogu omawia strumienie, ja.mi. Najważniejsze operacje, które można wykonać w twoim kodzie. Domyślne metody, lambdas i strumienie oraz za pomocą opcjonalnych itdejg.

Domyślne metody w interfejsach

Możliwość określenia domyślnych implementacji metody w interfejsach została dodana przez JDK 8, aby kolekcje mogły ewoluować bez zerwania kompatybilności wstecznej. W poprzednich wersjach nie byliśmy w stanie dodać żadnej metody do interfejsu bez wszystkich podklas implementacyjnych. Z pomocą wersji 1.8, możemy zaznaczyć metodę domyślnym słowem kluczowym i podać treść metody bezpośrednio w interfejsie.
Wspomniany poniżej jest przykładem interfejsu o nazwie DeBugGable. Ma to pokazać, w jaki sposób interfejs API odbicia jest używany do uzyskania dostępu do pól obiektu i zapewnia przyzwoitą implementację ToString () dla obiektu, który drukuje wartości pól.

Public Interface Debuggable Domyślna debug.getClass ().getName ()); sb.append („[”); Pole [] pola = to.getClass ().getDeclaredFields (); dla (pole f: pola) f.setAccessible (true); spróbuj sb.Dodatek (f.getName () + "=" + f.uzyskać to)); sb.append (","); catch (nielegalargumentException | nielegalAccessException e) rzuć new RuntimeException (e); sb.dodać("]"); zwrot sb.ToString ();
123456789101112131415161718Public Interface Debuggable Domyślna debug.getClass ().getName ()); sb.append („[”); Pole [] pola = to.getClass ().getDeclaredFields (); dla (pole f: pola) f.setAccessible (true); spróbuj sb.Dodatek (f.getName () + "=" + f.uzyskać to)); sb.append (","); catch (nielegalargumentException | nielegalAccessException e) rzuć new RuntimeException (e); sb.dodać("]"); zwrot sb.ToString ();

Lambdas w strumieniach

Niestety do tej pory Java była uważana za odpowiedni język programowania dla technik programowania funkcjonalnego. Jedynym powodem było to, że funkcje nie były obywatelami pierwszej klasy w języku. W rzeczywistości nie było żadnego schludnego i akceptowanego sposobu odniesienia się do bloku kodu według nazwy i przekazania go. W rezultacie Lambdas wprowadza drastyczną zmianę. Dzisiaj odniesienia do metod można stosować na lepsze lub gorsze, w odniesieniu do określonej metody, przypisania funkcji do zmiennych, przekazywania ich i cieszących się wszystkimi dodatkami, które oferuje paradygmat programowania funkcjonalnego.
Podstawy są prawie proste, tworzone jest kilka interfejsów. Na przykład:

// zajmuje długie, zwraca funkcję ciągów f = l -> l.ToString (); // nic nie daje ci wątków dostawca s = wątek :: CurrentThread; // bierze ciąg jako parametr Consumer C = System.OUT :: println;
12345678// zajmuje długie, zwraca funkcję ciągnięcia f = l -> l.ToString (); // nie bierze nic, co daje ciadssSpplier S = wątek :: CurrentThread; // bierze ciąg jako parametr Consumer C = System.OUT :: println;

Wspomniane tutaj zastrzeżenie to kod używany do zarządzania na wypadek, jeśli pozwalasz rosnąć funkcje anonimowe na określony próg. Kod określa przepływ danych. Wszystko, co musisz zrobić, to po prostu podłączyć określoną funkcjonalność, zwłaszcza tę, którą chcesz wpaść.

W skrócie

Podczas pracy ze strumieniami zawsze pamiętaj, że musisz przekształcić wartości zawarte w strumieniu za pomocą funkcji, które na przykład za pomocą składni Lambda. Kilka wynosów:

  • W przypadku, gdy kod nie określa ramy przepływu danych, do których podłączasz swoje funkcje, warto rozważyć, aby uniknąć pomnożenia Lambdas. Właściwa klasa może być bardziej czytelna.
  • Jeśli lambda rośnie powyżej 3 wierszy kodu - podziel go: na kilka inwokacji map (), które przetwarzają dane w krokach lub wyodrębnia metodę i użyj składni referencyjnej metody, aby się do niej odwołać.
  • Nie przypisuj lambdas i funkcji do pola obiektów. Lambdas reprezentują funkcje i najlepiej je obsługiwać czyste.