Java a JavaScript, czy takie różne?

| 7 maja 2017

Języki Java i JavaScript często są ze sobą mylone. Nie raz zdarzyła nam się sytuacja, gdzie dostawaliśmy pytania, w których ktoś pytał o kursy na przemian pytając o jedno i drugie nie widząc między nimi różnicy. Również niektórzy rekruterzy mają z tym problem i np.w ogłoszeniach związanych z JavaScriptem dodają logo Javy.

Jest nawet taki żart…

Żeby nauczyć się Javy najlepiej najpierw nauczyć się JavaScriptu i później oduczyć się Scriptu

 

java javascript typescript

może coś w nim jest? Czy Java i JavaScript aż tak bardzo się od siebie różnią?

 

Jak to było kiedyś

W przeszłości istniał bardzo prosty podział. Java była technologią z ogromnym ekosystemem i dedykowana była głównie do rozwiązań biznesowych, tworzenia tzw. backendu, czyli części aplikacji działającej po stronie serwera. JavaScript był językiem, który stanowił uzupełnienie strony wizualnej stron internetowych, pozwalał dodać do nich animacje i trochę dynamiki, dzięki czemu strony wydawały się przyjemniejsze, rzadziej się przeładowywały.

Z punktu widzenia samego języka Java oparta była wyłącznie na fundamentach programowania obiektowego, czyli pojęciach takich jak klasy, interfejsy i obiekty. JavaScript oparty został na odmiennych założeniach, łączył paradygmat programowania obiektowego oraz funkcyjnego, próżno było jednak szukać w nim klas, czy interfejsów, zamiast tego mieliśmy dziedziczenie oparte jest o prototypy.

Największą różnicą jest jednak do dziś statyczne typowanie w Javie vs dynamiczne typowanie w JavaScripcie. W skrócie w Javie musimy powiedzieć, że jeśli przypisujemy coś do x, to ten x jest np. liczbą. W JavaScripcie do x można przypisać dowolną wartość bez mówienia, czym ten x jest.  Jedno i drugie podejście ma swoje wady i zalety, zazwyczaj ktoś dla kogo Java jest głównym językiem nie za bardzo lubi dynamiczne typowanie, a dla kogoś, kto używa głównie JS nie potrafi sobie wyobrazić programowania bez tej funkcjonalności.

 

Jak to jest dziś

Zarówno Java, ale szczególnie JavaScript przebyły daleką drogę i dziś znacznie różnią się od tego jak wyglądały kiedyś, jednocześnie zbliżając się ku sobie. Java doczekała się największych zmian w wersji 8, gdzie przedstawiono wsparcie dla programowania funkcyjnego w oparciu o konstrukcje takie jak interfejsy funkcyjne i wyrażenia lambda. Wiele rzeczy można dzięki temu zapisać dużo krócej, bardziej ekspresywnie, a dzięki temu wiele rzeczy udało się uprościć.

JavaScript z kolei poszedł w odwrotnym kierunku, standard EcmaScript, którego JavaScript jest najpopularniejszą implementacją wprowadził w wersji 2015 (zwaną ES6, później ES2015) klasy, czy dziedziczenie oparte o rozszerzanie klas, a nie prototypów. Dodano również nowe kolekcje jak zbiory, czy mapy, które w Javie istnieją od bardzo dawna (wersja 1.5). JavaScript zaczął być również stosowany poza frontendem i dziś można w zasadzie napisać kompletną aplikację (backend + frontend) korzystając tylko z tego języka. Powstają rozbudowane frameworki jak Angular, React, które sprawiają, że JavaScript jest dziś traktowany dużo poważniej niż jakieś 10 lat temu.

Powstał także język o nazwie TypeScript, który jest rozszerzeniem standardu ES2015. Oprócz klas znajdziemy tutaj także interfejsy, typy generyczne i wyliczeniowe, ale przede wszystkim statyczne typowanie, które pozwala znacznie uodpornić kod na błędy jeszcze na etapie kompilacji (kod napisany w TypeScript musi być transpilowany do JavaScriptu, aby mógł być uruchomiony).

Sprawia to, że JavaScript (a szczególnie TypeScript) wyraźnie podążają w kierunku Javy (i C#), natomiast obserwując Javę można zauważyć pewne ruchy, które co prawda w dużo mniejszym, ale jednak widocznym stopniu przybliżają Javę do JavaScriptu (np. zapowiadane wprowadzenie słowa kluczowego var w Javie 10, które pozwoli na „prawie dynamiczne typowanie”).

Poniżej porównanie kilku próbek kodu.

Java

class Product {
    private String name;
    private double price;

    Product(String name, double price) {
        this.name = name;
        this.price = price;
    }
}

TypeScript

class Product {
    private name: string;
    private price: number;

    constructor(name: string, price: number){
        this.name = name;
        this.price = price;
    }
}

TypeScript (krócej)

class Product {
    constructor(private name: string, private price: number){}
}

JavaScript (ES2015)

class Product {
    constructor(name, price) {
        this.name = name;
        this.price = price;
    }
}

JavaScript (ES5)

var Product = (function () {
    function Product(name, price) {
        this.name = name;
        this.price = price;
    }
    return Product;
}());

Jeżeli jako programista Java próbowaliście kiedyś poznać JavaScript i język ten was obrzydził tworzeniem konstrukcji takich jak ostatni fragment kodu powyżej, brakowało wam klas, kolekcji, to warto dać mu drugą szansę. Jeśli nie możecie żyć bez statycznego typowania, to szczególnie TypeScript jest ciekawym językiem, który dla typowego Javowca powinien być bardzo naturalny.

11 thoughts on “Java a JavaScript, czy takie różne?

  1. Adam

    Błąd w przykładzie kodu Java:
    – jest: private String price;
    – powinno być: private double price;

    Reply
  2. Kotlin

    Czy będzie jakiś kurs o Kotlin? Wybrałem ten język do nauki i jest świetny. Trzeba się rozwijać i iść z duchem czasu i postępu.

    Reply
    1. JavaStart Post author

      Obserwujemy jak kotlin się rozwija i jest to świetny język, ale na razie jednak pozostaje to mocna nisza z marginalnym udziałem w rynku dlatego z kursem raczej się wstrzymujemy

      Reply
      1. ES6

        Czy przykład JavaScript (ES2015) jest równoznaczny ze standardem ECMAscript 6 / ES6?
        Mam jeszcze takie pytanie, czy nadchodząca modułowa Java 9 wniesie tyle nowych zmian, że uczenie się Javy w starszych wersjach 5, 6 ,7 nie będzie miało sensu? Ponieważ będzie się to wiązało z przyswajaniem sobie starych, niepraktycznych już nawyków?

        Reply
        1. JavaStart Post author

          Co do pierwszego pytania – tak.
          Jeśli chodzi o javę 9 to nie, nie jest ona aż taką rewolucją, że wszystko co było wcześniej przestaje być aktualne. Java jest fajna z tego względu, że każda kolejna wersja to ewolucja, nie rewolucja, przy wersji 8 niemal wszystko z wersji 7 jest aktualne, przy wersji 7 niemal wszystko z wersji 6 było aktualne itd. To samo tyczy się Javy 9, moduły, które będą największą zmianą, wprowadzają dodatkowy poziom separacji, ale nie sprawiają, że java 8 przestaje być aktualna

          Reply
          1. Javdev

            Chciałbym jeszcze dodatkowo wspomagać się oprócz tego kursu dobrą książką do Javy 8, co polecasz?

  3. Sławek Ludwiczak

    Książka to bardzo indywidualny temat, generalnie polecam przejść się do księgarni i przejrzeć po kilka stron różnych książek. Zazwyczaj sama zawartość książek traktujących o podstawach jest bardzo zbliżona, więc liczy się to, żeby nam się ją dobrze czytało. Ja np. nienawidzę serii „head first” z komiksami, inni ją bardzo polecają. Na pewno warto zwrócić uwagę, żeby książka była dostosowana do Javy 8.

    Reply
  4. M

    Osobiście wolę naukę z mini projektów + tutoriale YT / kursy video. Książka może się przydać raz na sam początek przygody aby zapoznać się ze składnią, ale można się bez niej obyć ; ) Trzeba coś robić.

    Reply
  5. Tomek

    Jak to się ma do przeglądarek internetowych, które teraz blokują Javę, czy nie oznacza to wyższości JavyScript/TypeScript nad Javą. Zastanawiam się nad rozpoczęciem przygody z Javą i myślę jaką drogę wybrać, czy Javę, czy JavęScript 🙂

    Reply
    1. Sławek Ludwiczak

      Javascript wykorzystuje się głównie do tego co widzi użytkownik (np. interfejs banku, czy allegro), java to wszystko to, czego tak naprawdę nie widzisz (faktyczne wykonanie przelewu na inne konto, obsługa wysyłki email, dostarczanie danych, generowanie raportów).
      Oczywiście jedną i drugą technologię można używać też w innych miejscach, ale najczęściej wyróżnia się właśnie taki podział. Musisz więc wybrać, czy bardziej kręci Cię to, żeby pisać aplikacje, z których będzie korzystał użytkownik, czy raczej złożone systemy, które każdą akcję użytkownika później przetwarzają.

      Reply

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *