Kako postaviti pametne telefone i računala. Informativni portal
  • Dom
  • Windows Phone
  • Javascript ili java što je lakše. Koja je razlika između Jave i JavaScripta

Javascript ili java što je lakše. Koja je razlika između Jave i JavaScripta

Nazivi koji su slične sintakse ponekad dovode u zabludu, uzrokujući brkanje pojmova Jave i Javascripta ili njihovo generaliziranje u jedan programski jezik. Zapravo, radi se o različitim jezicima koji se razlikuju po strukturi, opsegu i funkcionalnosti. Da biste razumjeli razliku između Jave i Javascripta, morate saznati što su oni. Kroz tečajeve u školi ITlandia možete steći dublje znanje iz područja programiranja.

Što je Java?

Java je programski jezik koji se koristi za pisanje aplikacija i apleta. Kreirao J. Gosling u Sun Microsystems Corporation.

Što je Javascript?

Java Script je skriptni jezik koji se koristi za dodavanje interaktivnosti web stranicama umetanjem u HTML kod. Kreirao B. Eiche u tvrtki Netscape Communications.

Kako se Java razlikuje od JavaScripta?

Razumijevajući što je Java i što je Java skripta, možete provesti komparativnu analizu na temelju niza kriterija:

Osim toga, Java se razlikuje od Javascripta po tome što se prvi prevodi, a drugi interpretira.

U kojim slučajevima treba koristiti Java i gdje je Java Script prikladan?

Da biste napravili izbor, morate jasno znati po čemu se Java razlikuje od JavaScripta. Osnova za odabir su zahtjevi za funkcionalnošću i brzinom izvršenja.

  • Funkcionalan. Odaberite Java Script ako trebate veće mogućnosti, budući da Java ima puno ograničenja.
  • Brzina izvršenja. Kodu napisanom u Java Scriptu trebat će više vremena da se izvrši nego kodu napisanom u Javi.
  • Za web razvoj trebate koristiti Java Script, ali za razvoj složenog softvera bolje je odabrati Javu. Oba programska jezika mogu se koristiti za izradu desktop i mobilnih aplikacija, ali s Javom će proces programiranja biti lakši i s manje grešaka.

    Recite svojim prijateljima o nama na društvenim mrežama:

    Obećao sam da ću napisati članak o korištenju GraalVM-a za miješanje Jave i JS-a. Evo je.


    U čemu je problem? U svakodnevnoj praksi često se susrećemo s aplikacijama koje se sastoje od dva dijela: JavaScript frontend i Java backend. Organiziranje međudjelovanja između njih zahtijeva napor. U pravilu ih rade ljudi s različitih strana barikada, a kada pokušaju ući u tuđe područje, počinju patiti. Postoje i full-stack web programeri, ali kod njih je sve jasno: uvijek moraju trpjeti.


    U ovom ćemo članku pogledati novu tehnologiju koja postupak može učiniti malo manje bolnim. Točnije, metoda postoji već dosta dugo, ali je nekako prošla kroz pozornost šire javnosti.


    Ako netko od Javaista još nije pisao u Reactu, ovdje će biti vodič koji će vam to omogućiti. Ako netko od Javascriptera nije pokušao pisati u Javi, tada ćete u ovom vodiču moći to dotaknuti (iako u samo jednom retku i kroz JS povezivanja).

    JS->Java. Protresimo stvari: Nashorn

    Ako želite Java->JS interop, postojala je takva tehnologija u JDK prije mnogo vremena, a zove se Nashorn (čitaj: "Nashorn").


    Uzmimo neku stvarnu situaciju. Ljudi s vremena na vrijeme, iz godine u godinu, nastavljaju pisati "poslužiteljske" validatore u Javi i "klijentske" validatore u JS-u. Poseban cinizam je u tome što se provjere nerijetko poklapaju u 80%, a sva ta aktivnost, zapravo, poseban je oblik izgubljenog vremena.


    Zamislimo da imamo vrlo glup validator:


    var validate = function(target) ( if (target > 0) ( return "uspjeh"; ) else ( return "fail"; ) );

    Možemo ga pokrenuti na sve tri platforme:

    • preglednik
    • Node.js

    U pregledniku je to trivijalno. Jednostavno ugradimo ovaj dio koda bilo gdje i on radi.


    U Node.js, ili morate poštovati njihov feng shui pristup korištenju require, ili ga hakirati dovraga s ovim jednostavnim kodom:


    var fs = require("fs"); var vm = require("vm"); var includeInThisContext = function(path) ( var code = fs.readFileSync(path); vm.runInThisContext(code, path); ).bind(this); includeInThisContext(__dirname + "/" + filename);

    Pripremite se na činjenicu da će vas kolege, ako koristite takve tehnike, vrlo brzo početi smatrati strašilom. Nama, Javaistima, ovo nije strano, ali profesionalni Javascripteri bi mogli biti posramljeni.


    Sada ćemo napraviti istu stvar, ali pod Nashornom na Javi.


    javna klasa JSExecutor ( privatni statički konačni Logger logger = LoggerFactory.getLogger(JSExecutor.class); ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn"); Invocable invoker = (Invocable) engine; public JSExecutor() ( try ( File bootstrapFile = new ClassPathResource("validator.js").getFile(); String bootstrapString = new String(Files.readAllBytes(bootstrapFile.toPath())); engine.eval(bootstrapString); ) catch (Exception e) ( logger. pogreška("Ne mogu učitati bootstrap JS!", e); ) ) public Object execute(String code) ( Object result = null; try ( result = engine.eval(code); ) catch (Exception e) ( logger. error("Can"t run JS!", e); ) return result; ) public Object executeFunction(String name, Object... args) ( Object result = null; try ( result = invoker.invokeFunction(name, args) ; ) catch (Iznimka e) (logger.error("Can"t run JS!", e); ) vrati rezultat; ) )

    Kao što vidite, možete povući i proizvoljni kod i zasebnu funkciju po imenu.


    Postoje, naravno, problemi koji se mogu riješiti samo ručno. Na primjer, možete napraviti polifil ovako:


    var global = ovo; var prozor = ovo; var proces = (env:()); var konzola = (); console.debug = ispis; console.log = ispis; console.warn = ispis; console.error = ispis;

    Ako želite da kôd validatora bude savršeno identičan i na poslužitelju i na klijentu, morat ćete napisati završne dijelove za metode "poslužitelja", koje se guraju samo u preglednik. To su već detalji konkretne implementacije.


    Usput, ab na mom laptopu (ab -k -c 10 -n 100 http://localhost:3000/?id=2) pokazuje 6-7 tisuća zahtjeva u sekundi za ovaj kod, i nije važno što radi na - na Nashorn ili Node.js. Ali u tome nema ničeg zanimljivog: prvo, ab na lokalnom hostu mjeri vrijeme na Marsu, a drugo, već vjerujemo da u ovim motorima nema očitih pogrešaka, oni su konkurenti.


    Jasno je da ako živite u "crvenoj zoni" Sh. krivulje, ne možete koristiti Nashorn bez uključivanja mozga i pisanja mjerila. Ako dobro razmislite, možete napisati benchmark gdje će Nashorn pokleknuti, a ispravnije bi bilo napisati nativni kod. Ali moramo jasno shvatiti da svijet nije ograničen na temama visokog opterećenja i izvedbe, ponekad je praktičnost pisanja važnija od bilo koje izvedbe.

    Java->JS. Problem

    Pokušajmo prenijeti podatke u suprotnom smjeru, iz Jave u JS.


    Zašto bi to moglo biti potrebno?


    Prvo, i najvažnije, u mnogim tvrtkama postoji aksiom o kojem se ne raspravlja: koristimo Javu. U nekim bankama. Drugo, tijekom rješavanja svakodnevnih problema takvi se zadaci stalno pojavljuju.


    Razmotrimo slučaj igračke iz stvarnog života. Zamislite: trebate generirati front s webpackom, a želite napisati trenutnu verziju aplikacije u gornjem desnom kutu web stranice. Vjerojatno se pozadinska verzija može izvući na normalan način samo pozivanjem nekog Java koda (naslijeđeno). To znači da morate stvoriti Mavenov projekt koji će raditi u dva prolaza: priložiti nekoj fazi Mavenovog životnog ciklusa izgradnje sklop nekoliko klasa i njihovo pokretanje, što će generirati datoteku svojstava s brojem verzije, koja će biti podignut od strane ručno pozvanog npm-a u sljedećoj fazi.


    Ovdje neću dati primjer takvog pom.xml-a, jer je odvratan :)


    Općenitije, problem je u tome što moderna kultura podržava i potiče programere poliglote i projekte napisane na više jezika. Iz ovoga proizlaze sljedeće točke:

    • Programeri žele koristiti jezik koji najbolje odgovara datom problemu. Vrlo je bolno pisati web sučelje u Javi (barem dok se JVM i OpenJDK ne stabiliziraju na WebAssemblyju), ali u JS-u je jednostavno i praktično.
    • Često želite razvijati nekoliko baza koda paralelno. Na primjer, u JS-u postoji jedna baza - prednja, a druga baza u Javi - stražnja. Želio bih razvijati projekte, polako prepravljajući cijelu aplikaciju u Node.JS, uključujući kod poslužitelja - na onim mjestima gdje Java nije smisleno potrebna. Ne bi trebalo postojati "dan broj nula" kada cijeli Java backend ili JS frontend ode u otpad, i neka cijeli svijet čeka dok ne napišemo novi.
    • Kada prelazite jezičnu granicu, morate ručno napisati puno smeća koda koji omogućuje međudjelovanje.

    Ponekad postoje gotova rješenja - na primjer, prelazak Java/C granice se vrši pomoću JNI.


    Korištenje takve integracije također je dobro jer, kako funkcionalni programeri vole reći, "ono što ne postoji, neće se pokvariti". Ako podržavamo pakleni pom.xml, svojstva i xml datoteke i druge ručne interoperacije u našem kodu, oni se obično pokvare u najneugodnijim trenucima. Ako su ovaj sloj napisali neki pravi borbeni štreberi, poput Oraclea ili Microsofta, gotovo da se ne kvari, a kad pukne, nije na nama da ga popravljamo.


    Da se vratimo na prethodni primjer: zašto trebamo dvaput ustati i činiti čuda s Nashornom, ako uopće ne možemo ustati i cijeli UI napisati samo na Node?


    Ali kako to učiniti, s obzirom da trebate transparentno crpiti podatke iz Jave?


    Prva pomisao koja pada na pamet je nastaviti koristiti Nashorn. Upiši sve potrebne biblioteke u to, arhiviraj i možda će čak i početi. Ako među njima nema onih kojima su potrebna izvorna proširenja. I ručno emulirajte cijelu infrastrukturu Node. I još nešto. Čini se da je ovo problem. Općenito, već je postojao takav projekt, zvao se Project Avatar i, nažalost, umro je. Ako ga programeri iz Oraclea nisu mogli dovršiti, kolika je onda šansa da će to uspjeti sami?

    Java->JS. Graal

    Srećom, imamo još jedan prilično nov i zanimljiv projekt - Graal.js. Odnosno, dio Graala odgovoran za pokretanje JavaScripta.


    Inovativni projekti iz svijeta JDK često se doživljavaju kao nešto daleko i nestvarno. Graal je u tom pogledu drugačiji - vrlo iznenada je došao na scenu kao zreli konkurent.


    Graal nije dio OpenJDK-a, već zaseban proizvod. Poznato je po tome što u najnovijim verzijama OpenJDK-a možete prebaciti JIT kompajler s C2 na onaj koji dolazi s Graalom. Uz to, Graal dolazi s okvirom Truffle koji se može koristiti za implementaciju raznih novih jezika. U ovom slučaju programeri iz Oracle Labsa implementirali su podršku za JavaScript.


    Da biste dobili osjećaj koliko je to jednostavno i praktično, pogledajmo primjer projekta igračke.


    Zamislimo da siječemo NLO na Habréu.



    U prvoj verziji Slashinga, UFO će moći banovati nasumične ljude, a gumb će se zvati “Ban nekoga!” U drugoj verziji gumb će zabraniti trolove ili spamere, a koga točno sada zabranjujemo učitati će se iz Jave. Kako bismo smanjili primjer, promijenit će se samo oznaka na gumbu, nećemo mijenjati poslovnu logiku.


    Postoji mnogo koraka za izradu aplikacije React, pa su oni uredno podijeljeni u korake. Na kraju dobijem radnu aplikaciju, provjerio sam.

    Dio 1. Priprema aplikacije1. Skinite “enterprise” GraalVM (putem poveznice) i postavite uobičajene varijable Java okruženja.

    Potrebna je Enterprise verzija jer jedina ima GraalJS.


    Možete, na primjer, napisati ovo u .bash_profile:


    graalvm () ( izvoz LABSJDK=/Korisnici/olegchir/opt/graalvm-0.33/Sadržaj/Početni izvoz LABSJRE=/Korisnici/olegchir/opt/graalvm-0.33/Sadržaj/Početna/jre izvoz JDK_HOME=$LABSJDK izvoz JRE_HOME=$LABSJRE izvoz JAVA_HOME=$JDK_HOME izvoz PATH=$JDK_HOME/bin:$JRE_HOME/bin:$PATH )

    I onda nakon ponovnog pokretanja ljuske, pozovite ovu funkciju: graalvm.


    Zašto predlažem da napravite zasebnu bash funkciju i pozovete je prema potrebi, a ne sve odjednom? Ovdje je sve vrlo jednostavno: nakon što GraalVM uđe u PATH, vaš uobičajeni sistemski npm (na primjer, /usr/local/bin/npm na macOS-u) bit će zamijenjen našom posebnom Java verzijom ($JDK_HOME/bin/npm). Ako ste JS programer, takva trajna zamjena nije najbolja ideja.

    2. Napravite direktorij za projekt mkdir -p ~/git/habrotest cd ~/git/habrotest 3. npm init (ispunite mudro, ali možete samo kliknuti gumb enter)4. Instalirajte potrebne module: Webpack, Babel, React npm i --save-dev webpack webpack-cli webpack-dev-server npm i --save-dev babel-core babel-loader babel-preset-es2015 babel-preset-react npm ja --save reagirati reagirati-dom

    Imajte na umu da npm može biti malo zastario (u odnosu na "pravu" verziju) i tražit će od vas da ažurirate. Ne isplati se ažurirati.

    5. Napravite direktorije u kojima će se rad odvijati: mkdir -p src/client/app mkdir -p src/client/public mkdir -p loaders 6. Naučite Babel naše jezike:
    ( "presets" : ["es2015", "react"] ) 7. Postavljanje webpacka:

    ./webpack.config.js:


    var p = require("put"); var webpack = require("webpack"); var BUILD_DIR = p.resolve(__dirname, "src/client/public"); var APP_DIR = p.resolve(__dirname, "src/client/app"); var config = ( izlaz: ( put: BUILD_DIR, naziv datoteke: "bundle.js"), unos: APP_DIR + "/index.jsx", modul: ( pravila: [ ( test: /\.jsx?/, uključi: APP_DIR , loader: "babel-loader" ) ] ) ); module.exports = config; 8. Napravite stranicu za našu aplikaciju:

    ./src/client/index.html


    Dobro došli u kormilarnicu UFO 9. Napravite indeks (tako da u njega možemo ubaciti demo komponentu):

    ./src/client/app/index.jsx


    import React iz "reagirati"; import (render) iz "react-dom"; import NLOComponent iz "./NLOComponent.jsx"; klasa App proširuje React.Component ( render () ( return (

    Dobrodošao u kormilarnicu, NLO

    ); ) ) render(, document.getElementById("aplikacija")); 10. Napravite komponentu!

    ./src/client/app/NLOComponent.jsx


    import React iz "reagirati"; klasa NLOComponent proširuje React.Component ( constructor(props) ( super(props); this.state = (banned: 0); this.onBan = this.onBan.bind(this); ) onBan() ( let newBanned = this. state.banned + 10; this.setState((banned: newBanned)); ) render() ( return ( Ban nekoga! 11. Pokrenite izgradnju: webpack -d

    Sve bi se trebalo uspješno spojiti i dati nešto poput:


    joker:habrotest olegchir$ webpack -d Hash: b19d6529d6e3f70baba6 Verzija: webpack 4.5.0 Vrijeme: 19358ms Izgrađeno u: 2018-04-16 05:12:49 Veličina sredstva Chunks Chunk Names bundle.js 1,69 MiB main main Entrypoint main = bundle. js [./src/client/app/NLOComponent.jsx] 3,03 KiB (main) [./src/client/app/index.jsx] 2,61 KiB (main) + 21 skriveni modul 12. Sada ga možete otvoriti u preglednik./ src/client/index.html i uživajte u sljedećem prikazu:

    Prvi dio tutorijala je završen, sada morate naučiti kako promijeniti oznaku na gumbu.

    Dio 2. Ubacujemo se u varijable13. Pokušajmo u našu komponentu implementirati varijablu “naziv gumba” (buttonCaption) i “popis opcija” (buttonVariants), o kojima se ništa ne zna u JS-u. U budućnosti će biti povučeni iz Jave, ali za sada samo provjeravamo da njihova upotreba dovodi do pogreške: import React iz "react"; klasa NLOComponent proširuje React.Component ( constructor(props) ( super(props); this.state = (banned: 0, button: buttonCaption); this.onBan = this.onBan.bind(this); ) onBan () ( let newBanned = this.state.banned + 10; this.setState((banned: newBanned, button: buttonVariants)); ) render() ( return ( Broj zabranjenih: (this.state.banned) (this.state.button) ) ; ) ) izvoz zadane NLOComponent;

    Vidimo iskrenu pogrešku:


    NLOComponent.jsx?8e83:7 Uncaught ReferenceError: buttonCaption nije definiran na novoj NLOComponent (NLOComponent.jsx?8e83:7) na constructClassInstance (react-dom.development.js?61bb:6789) na updateClassComponent (react-dom.development. js?61bb:8324) na beginWork (react-dom.development.js?61bb:8966) na performUnitOfWork (react-dom.development.js?61bb:11798) na workLoop (react-dom.development.js?61bb:11827 ) na HTMLUnknownElement.callCallback (react-dom.development.js?61bb:104) na Object.invokeGuardedCallbackDev (react-dom.development.js?61bb:142) na invokeGuardedCallback (react-dom.development.js?61bb:191) na replayUnitOfWork (react-dom.development.js?61bb:11302) (anonimno) @ bundle.js:72 react-dom.development.js?61bb:9627 Gornja pogreška dogodila se u komponenti: u NLOComponent (kreirala aplikacija) u div (stvorio App) u App 14. Sada se upoznajmo s legalnim načinom prosljeđivanja varijabli u Webpacku. Ovo su utovarivači.

    Najprije trebate malo prepisati konfiguraciju webpacka kako biste prikladno učitavali prilagođene učitavače:


    var p = require("put"); var webpack = require("webpack"); var BUILD_DIR = p.resolve(__dirname, "src/client/public"); var APP_DIR = p.resolve(__dirname, "src/client/app"); let defaults = ( izlaz: ( put: BUILD_DIR, naziv datoteke: "bundle.js"), unos: APP_DIR + "/index.jsx", modul: ( pravila: [ ( test: /\.jsx?/, uključi: APP_DIR , loader: "babel-loader" ) ] ), resolveLoader: ( modules: ["node_modules", p.resolve(__dirname, "loaders")] ) ); module.exports = funkcija (sadržaj) ( let dd = defaults; dd.module.rules.push(( test: /index\.jsx/, loader: "preload", options: () )); return dd; );

    (Imajte na umu da možete staviti bilo koji podatak u opcije za učitavač i zatim ga pročitati pomoću loaderUtils.getOptions(this) iz modula loader-utils)


    Pa, sada, zapravo, pišemo utovarivač. Punjač je dizajniran glupo: primamo izvorni kod kao ulaz u izvorni parametar, mijenjamo ga po želji (možda ga ne mijenjamo) i onda ga vraćamo natrag.


    ./loaders/preload.js:


    const loaderUtils = require("loader-utils"), schemaUtils = require("schema-utils"); module.exports = funkcija main(source) ( this.cacheable(); console.log("applying loader"); var initial = "Ban the troll!"; var variants = JSON.stringify(["Ban the troll!" , " Ban spamera!"]); return `window.buttonCaption=\"$(initial)\";` + `window.buttonVariants=$(variants);` + `$(source)`; );

    Ponovno gradimo pomoću webpack -d.


    Sve radi kako treba, nema grešaka.

    Dio 3. Dodavanje Java koda15. Sada pitate: U redu, naučili smo jedan prljavi mali Webpack hack, ali kakve veze Java ima s tim?

    Zanimljiva stvar ovdje je da naš loader nije izvršen samo tako, već ispod Grala. To znači da, koristeći API sličan Nashornovom, možete raditi iz JS-a s Java tipovima.


    const loaderUtils = require("loader-utils"), schemaUtils = require("schema-utils"); module.exports = function main(source) ( this.cacheable(); console.log("applying loader"); //Možemo dobiti Java tipove i kreirati objekte ovog tipa var JavaString = Java.type("java.lang . String"); var initial = new JavaString("Ban the troll!"); //Možemo konvertirati podatke natrag i naprijed var jsVariants = ["Ban the troll!", "Ban the spammer!"]; var javaVariants = Java .to(jsVariants, "java.lang.String"); var variants = JSON.stringify(javaVariants); //Ali interop nije uvijek dobar, a onda morate koristiti štake return `window.buttonCaption=\" $(početno)\ ";` + `window.buttonVariants=$(varijante);` + `$(izvor)`; );

    I naravno, webpack -d .

    16. Prilikom pokušaja izgradnje s webpackom vidimo pogrešku: GREŠKA u ./src/client/app/index.jsx Izrada modula nije uspjela: ReferenceError: Java nije definirana na Object.main (/Users/olegchir/git/habrotest /loaders/preload. js:9:19)

    To nastaje jer Java tipovi nisu dostupni prema zadanim postavkama i omogućeni su posebnom zastavom --jvm, koja je dostupna samo u GraalJS-u, ali ne i u "običnom" čvoru.


    Stoga ga trebate prikupiti posebnom naredbom:


    čvor --jvm čvor_moduli/.bin/webpack -d


    Budući da je sve ovo tipkati prilično zamorno, koristim alias u bashu. Na primjer, u .bash_profile možete umetnuti sljedeći redak:


    alias graal_webpack_build="čvor --jvm čvor_moduli/.bin/webpack -d"

    Ili nešto još kraće kako bi tipkanje bilo ugodno.

    17. PROFIT!

    Rezultat se može vidjeti u mom GitHub repozitoriju. Prikupljene datoteke pohranjuju se izravno u repozitorij tako da ih možete vidjeti čak i bez prolaska kroz poduku do kraja.


    Zaključak

    Na ovaj jednostavan i praktičan način sada možemo integrirati Javu i JS. Sve ovo nije izolirani slučaj, mogu se smisliti mnogi načini primjene.


    Na kraju, kap masti u masti. U čemu je kvaka?

    • GraalJS još nije Open Source, iako ga, prema glasinama, žele otvoriti; Sve je već u redu.
    • Java npm je i dalje spor. Zašto – moramo učiti. Npm je taj koji usporava, a ne sam JS motor;
    • Ispod haube svega toga krije se žestoka magija, a kada pokušate ući u nju morat ćete proučiti puno dodatnih stvari;
    • Sve je to prikupljeno u odnosu na JDK8. Za nove značajke Jave 11 morat ćete čekati prilično dugo;
    • Graal je eksperimentalni projekt. To se mora uzeti u obzir kada se pokušava integrirati u vrlo krvavi pothvat bez ikakvog prostora za pogreške.

    Oznake: Dodajte oznake

    Webmastere početnike koji tek počinju s izgradnjom web stranice često zanima pitanje - što je JavaScript?! Također je relevantan za mnoge jednostavno radoznale korisnike računala koji ovu riječ mogu čuti na forumima, kada komuniciraju u krugovima IT stručnjaka, a naišli su na nju u izvješćima antivirusnih laboratorija. Što je?

    JavaScript ili JS je objektno orijentiran, interpretirani programski jezik koji se može koristiti za stvaranje aplikacija koje mogu biti samostalne ili ugrađene u HTML kod. U potonjem slučaju, Java Script se koristi za stvaranje interaktivnih elemenata na stranici - obrasci za autorizaciju, ankete, upitnici itd. Također, JavaScript se koristi u web preglednicima kao dodatna ekstenzija za organiziranje interaktivne kontrole preglednika, pokretanje skripti ugrađenih u kod stranica i rad s dokumentima unutar prozora preglednika. i njegovu interakciju s korisnikom, kontrolirati web preglednik i mijenjati sadržaj dokumenta koji se prikazuje unutar prozora web preglednika. Ova ugrađena verzija JavaScripta pokreće skripte ugrađene u HTML kod web stranica. Ova verzija se obično naziva JavaScript na strani klijenta.

    JavaScript uopće nije jednostavan jezik

    Iako mnogi programeri smatraju JavaScript lakim za korištenje, on nije tako jednostavan kao što se čini. Iza njegove prividne jednostavnosti krije se potpuni programski jezik, čak i složeniji od mnogih njegovih kolega.
    Programeri ga često koriste ne kao programski jezik, već kao alat za izradu skripti. Ovdje, činjenica da u nedostatku kontrole tipa, JavaScript oprašta mnoge pogreške koje rade neiskusni programeri i početnici. Kao što sam već rekao, zbog svoje višeplatformske prirode i rada s gotovo svim postojećim preglednicima, Java Script je popularan među izrađivačima web stranica. Koriste ga za rješavanje određenog niza problema vezanih uz povezivanje različitih elemenata interaktivnosti s web stranicama u obliku obrazaca, igara, agregatora, chatova, multimedijskih playera itd.

    Koja je razlika između Jave i JavaScripta

    Java Script ne treba brkati s drugim programskim jezikom - Javom. To su potpuno različite stvari! Java je objektno orijentirani programski jezik koji je razvio Sun Microsystems još 1995. godine, a potom ga je preuzeo Oracle. Za pokretanje aplikacija napisanih u Javi potreban vam je poseban virtualni stroj.
    Ali Java Script se može, uz natezanje, nazvati puno pojednostavljenijom verzijom Jave. Pojednostavljeno do te mjere da je samo sintaksa slična, i to samo u nekim aspektima. U svojoj jezgri to je drugačiji, poseban jezik koji postoji sam za sebe, a temelji se na međunarodnim standardima, što osigurava izvrsnu kompatibilnost
    između implementacija, iako kao takva, kompatibilnost JavaScript implementacija u različitim preglednicima obično donosi mnogo problema programerima koji koriste JavaScript jezik na strani klijenta.

    Što učiti Java ili Javascript?!

    Ovo pitanje postavljaju mnogi programeri početnici. Da biste odgovorili na njega, morate sami odrediti s čime ćete raditi u budućnosti. Ako su to potpune aplikacije za računala ili mobilne uređaje (telefone i tablete), odaberite Java.
    Ali ako vas zanima web programiranje i planirate raditi kao web programer, onda je vaš izbor Javascript

    Svi. To su nesrodni jezici.

    2018-12-04T00:00Z

    JavaScript je objektno orijentirani jezik skripte, koji vam omogućuje stvaranje dinamičkih HTML stranica, dopuštajući obradu unosa i održavanje podataka, obično u pregledniku.

    Java je programski jezik, temeljni skup biblioteka i platforma virtualnog stroja koja vam omogućuje stvaranje kompiliranih programa koji se izvode na gotovo svakoj platformi bez distribucije izvornog koda u izvornom obliku ili njegovog ponovnog kompajliranja.

    Iako imaju iste nazive, zapravo su dva potpuno različita programska jezika/modela/platforme i koriste se za rješavanje potpuno različitih problema.

    Uobičajena zabluda je da je JavaScript sličan ili blisko povezan s Javom; to je pogrešno. Oba imaju sintaksu sličnu C-u, objektno su orijentirani, obično su izolirani i naširoko se koriste u web aplikacijama na strani klijenta, ali sličnosti tu prestaju. Java je statički tipizirana; JavaScript postavka je dinamička (što znači da varijabla može sadržavati objekt bilo koje vrste i ne može biti ograničena). Java se učitava iz kompajliranog bajtkoda; JavaScript se učitava kao čitljiv kod. C je njihov posljednji zajednički jezik predaka.

    2018-12-11T00:00Z

    JavaScript je tako nazvao Netscape kako bi zbunio neoprezne da ima ikakve veze s Javom, popularnom riječi dana, i uspio je.

    Dva jezika su potpuno različita.

    2018-12-18T00:00Z

    Evo nekih razlika između ta dva jezika:

    • Java je statički tipiziran jezik; JavaScript je dinamičan.
    • Java se temelji na klasi; JavaScript se temelji na prototipu.
    • Java konstruktori su posebne funkcije koje se mogu pozvati samo kada je objekt kreiran; JavaScript "konstruktori" samo su standardne funkcije.
    • Java zahtijeva da sve neblokirajuće izjave završavaju točkom i zarezom; JavaScript umeće točku-zarez na krajeve određenih redaka.
    • Java koristi skaliranje blokova; JavaScript koristi funkcionalnu definiciju opsega.
    • Java ima implicitni ovaj opseg za nestatičke metode i implicitni opseg klase; JavaScript ima skriveni globalni opseg.

    Evo nekih značajki koje smatram posebnom snagom JavaScripta:

    • JavaScript podržava zatvaranja; Java može simulirati "zatvaranje" sortiranja koristeći anonimne klase. (Prava zatvaranja mogu biti podržana u budućoj verziji Jave.)
    • Sve JavaScript funkcije su varijable; Java funkcije su varijable samo ako su eksplicitno označene.
    • JavaScript prototipovi mogu se nadjačati tijekom izvođenja i imaju trenutni učinak na sve referencirane objekte. Java klase ne mogu se redefinirati na način koji utječe na postojeće instance objekta.
    • JavaScript vam omogućuje nadjačavanje metoda na objektu bez obzira na njegov prototip (mislite na Ruby, ali na steroidima); metode u Java objektu vezane su za njegovu klasu i ne mogu se nadjačati tijekom izvođenja.

    2018-12-25T00:00Z

    Java i Javascript slični su kao što su automobil i tepih slični.

    2019-01-01T00:00Z

    Gotovo svako računalo na svijetu prodaje barem jedan JavaScript prevoditelj instaliran na njemu.

    Većina (ali ne "gotovo sva") računala imaju instaliran Java VM.

    Za one koji tek počinju s programiranjem, bilo na strani poslužitelja ili klijenta, neizbježno je da će se susresti s programskim jezicima Java i JavaScript.

    Ako imate bilo kakvog iskustva u programiranju u jednom ili drugom, znate da nisu isti i vjerojatno znate razliku između njih. Ali ako tek počinjete, to može biti zbunjujuće iz više razloga, prvo kako se jezici nazivaju.

    Iako u svom imenu dijele naziv "Java", imaju vrlo malo atributa i karakteristika. U ovom članku ćemo pogledati neke od ključnih razlika između jezika, ispitujući neke od atributa visoke razine koje svaki jezik nudi.

    U konačnici, cilj nam je pomoći onima od vas koji ste novi u programiranju i niste sigurni koji jezik želite naučiti (ili naučiti prvi!). U ovom ćemo članku pogledati neke od ključnih razlika koje postoje među jezicima i gdje se koja primjenjuje u pokušaju da vas naoružamo informacijama koje su vam potrebne da napravite sljedeći korak u svojoj karijeri.

    Java i JavaScript

    Možda je najbolja poanta koju možete istaknuti kada počnete razlikovati dva jezika napraviti ovakvu usporedbu:

    Java je za JavaScript ono što je prosjak za hrčka.

    Nažalost, ovu analogiju ne mogu smatrati svojom. Jeremy Keith ga je smislio umjesto toga, ali to je sjajna ideja: jedina stvar koja jezicima je zajednička je da dijele "Javu" u svom imenu.

    Jedna sličnost je da su jezici ono što nazivamo jezicima "C stila", u smislu da su njihove sintakse slične sintaksi jezika C. To jest, oba imaju funkcije, zagrade, zagrade i točku-zarez.

    Međutim, osim ovoga, postoji vrlo malo zajedničkog. U ostatku ovog članka, svaki jezik ćemo promatrati na vrlo visokoj razini kako bismo vam dali ideju o tome što svaki jezik nudi i značajke svakog od njih.

    Nakon što to učinite, moći ćete vidjeti razliku u ta dva jezika i iako se zovu isto i imaju sličan sintaksa je jedino što im je zajedničko.

    Dakle, počnimo.

    Što je Java?

    Pokrili smo Javu u drugim tutorijalima na ovoj stranici i nastavit ćemo to činiti kako se jezik bude razvijao tijekom vremena.

    Java je dizajnirana s idejom "napiši jednom, pokreni bilo gdje", što znači da možete napisati program na računalu i zatim ga implementirati na bilo koji uređaj koji ima Java runtime okruženje.

    Ali čekajte: što je Java runtime?

    Prvo, važno je razumjeti da je Java prevedeni jezik, iako nije preveden u binarni izvršni kod. Umjesto toga, kompajlira se u bajt kod.

    Java bajt kod je skup uputa za Java Virtual Machine. Svaki bajt kod sastoji se od jednog, au nekim slučajevima i dva bajta koji predstavljaju naredbu (op kod), zajedno s nula ili više bajtova za prosljeđivanje parametara.

    Ne zvuči tako uzbudljivo, zar ne? Ovo je u redu! Kao programeri, nismo odgovorni za pisanje bajt koda. Umjesto toga, Java kompajler kompilira naš kod u bajt kod.

    Ovaj bajt-kod radi povrh vremena izvođenja koje se izvodi u kontekstu drugog operativnog sustava. Ovaj operativni sustav može raditi na mobitelu, može raditi na drugom računalu, može raditi na Windows, OS X, Linux ili bilo kojem drugom sustavu na kojem je kompatibilan. Sve o tome možete pročitati na ovoj stranici.

    Zvuči dobro, zar ne? Činjenica je da tu postoji niz problema. Čini se da je puno jednostavnije od ovoga i na tome rade napredniji Java programeri. Ovo je izvan dosega ovog članka. Umjesto toga, usredotočit ćemo se na atribute jezika kako bismo ga mogli usporediti s JavaScriptom.

    Ali prvo, pogledajmo neke značajke s kojima možemo raditi u Javi. Važno je napomenuti da mi poslujemo na puno višoj razini. Na primjer, možemo raditi sa sljedećim konstruktorima:

    • Klase su osnova svakog objektno orijentiranog jezika. Omogućuju nam da odredimo koje će karakteristike i ponašanje objekt pokazivati ​​nakon što bude stvoren.
    • Funkcije su dijelovi klasa koji dopuštaju objekte učini nešto. Klasa koja predstavlja File može nam omogućiti čitanje sadržaja svega što sadrži.
    • Svojstva ili atributi su ono što opisuje klasu. Datoteka, na primjer, može imati dopuštenja kao što je mogućnost čitanja ili pisanja u sustav datoteka. Također može imati stazu koja predstavlja lokaciju na kojoj se nalazi u datotečnom sustavu.
    • Nasljeđivanje je kada jedna klasa može naslijediti određena svojstva druge klase. To znači da prima sve funkcije i svojstva roditeljske klase I može dodati vlastite jedinstvene funkcije.

    Ako nikada prije niste pisali kod, nešto od toga može zvučati kao žargon. To je jasno! Imamo resurse koji će vam pomoći da naučite ono što trebate znati:

    Ali prije nego što pretjerano skočimo u odlučivanje o tome što želite naučiti, pogledajmo JavaScript.

    Što je JavaScript?

    Detaljnije sam opisao JavaScript u prethodnom članku, što možete i vi, ali u ovom ću članku pokriti glavne točke koje smo gore spomenuli. Za dublji zaron, pogledajte što je gore navedeno.

    JavaScript je u svojoj srži dinamičan jezik koji nije tipiziran i interpretiran. To znači:

    • Mi, kao programeri, možemo jednostavno proširiti određene aspekte jezika dodavanjem našeg koda već postojećim objektima, kao što je objekt String.
    • Netipizirana priroda jezika znači da možemo deklarirati nizove, booleove vrijednosti i brojeve (nasuprot cijelim brojevima, brojevima s pomičnim brojem i decimalnim brojevima) bez eksplicitnog navođenja njihovog tipa, kao u Javi (i drugim jezicima).
    • Jezik se tumači, što znači da nije kompajliran u izvršnu datoteku. Umjesto toga, tumači ga web preglednik ili drugi softver na vašem računalu, koji vaše upute pretvara u strojni kod.

    Ako vas nešto zbuni, ne brinite! Svi smo bili tamo:

    • Definicija varijabli?
    • Implementacija funkcije?
    • Stvaranje objekata?
    • Postavljanje uvjetnih izjava?
    • I mnogo više.

    To je puno. Znam. Ali najbolja stvar koju imamo je Puno resurse za ubrzanje vašeg iskustva s JavaScriptom. A kad jednom naučite nijanse jezika, postaje sve lakše i lakše raditi unutar njegovih granica.

    Upamtite da su svi "Nisam siguran što radim" prirodni i dio učenja. Ako ti nikada niste vidjeli programiranje povezano s JavaScriptom, toplo preporučujem da pogledate sljedećih nekoliko tečajeva:

    Jednom kada se bolje snađete u jeziku, također je važno koristiti odgovarajuće alate za razvoj svojih aplikacija. To uključuje korištenje alata kao što je debugger (koji većina modernih preglednika uključuje). Međutim, to je izvan dosega ovog članka.

    Napomena o orijentaciji objekta

    Još jedna važna razlika je da se JavaScript i Java smatraju objektno orijentiranim jezicima, ali iz različitih razloga.

    Java nam omogućuje da instanciramo objekte iz klasa koje kreiramo. Nasuprot tome, sve u JavaScriptu je objekt. To znači da nema nastave. A budući da je sve objekt, sve ima metode i svojstva koja možemo koristiti.

    U Javi, kada instancirate klasu, imate pristup metodama i svojstvima koja izlažete kroz definiciju klase. Ako imate javna svojstva, javne funkcije itd., programer ih može koristiti.

    U JavaScriptu, kada stvorite varijablu, objekt ili čak funkciju, imate mogućnost pozvati funkcije koje postoje ne samo na tom objektu, već i na objektima iz kojih taj objekt izvodi svoja svojstva. To je zbog prototipske prirode JavaScript nasljeđivanja, o čemu možete pročitati u

    Koju odabrati?

    Kao što možete vidjeti iz gornjeg sadržaja, oba jezika, iako su oba inspirirana C-om u pogledu sintakse, dosta se razlikuju jedan od drugog. Svaki od njih također služi različitoj svrsi.

    Iako možete pisati JavaScript na poslužitelju s tehnologijama kao što je Node.js, to nisu iste vrste aplikacija koje su izgrađene u Javi. Osim toga, iako možete pisati aplikacije na strani poslužitelja u Javi, to nisu iste vrste aplikacija koje biste obično pisali s JavaScriptom.

    Umjesto toga, često je korisno razmišljati o JavaScriptu kao jeziku koji je najprikladniji za razvoj na strani klijenta, za aplikacije koje će se izvoditi u web pregledniku ili za aplikacije na jednoj stranici. Javu je najbolje smatrati programskim jezikom koji je najprikladniji za pisanje poslužiteljskih ili desktop aplikacija koje mogu raditi na mnogo različitih operativnih sustava i uređaja.

    Zaključak

    Čini se da svaki od ovih jezika nudi svoj jedinstveni niz prednosti i nedostataka. Iskreno, mislim da mnogo toga što nas motivira da izaberemo jedan jezik umjesto drugog ima veze s onim što želimo učiniti u smislu izgradnje rješenja za sebe i druge.

    Ako želite raditi na internetu, JavaScript, vjerojatnije, vaš najbolji izbor. Ako, s druge strane, želite pisati desktop aplikacije, tada Java nije loš izbor.

    Za one koji su zainteresirani, vrijedi napomenuti da je JavaScript postao jedan od de facto jezika Interneta. Nije bez krivulje učenja, a postoji mnogo okvira i biblioteka koje vas mogu zaokupiti. Ako tražite više resursa za istraživanje ili korištenje u svom radu, provjerite što imamo na Envato tržištu.

    Većinu svog vremena provodim radeći s WordPressom; Međutim, također sam obožavatelj JavaScripta i s vremena na vrijeme pišem o tome na blogu. Ako ste zainteresirani za druge tečajeve i tutorijale koje sam napisao za Envato, pogledajte stranicu mog profila. Također, možete pročitati više članaka o razvoju WordPressa i JavaScripta na mom blogu. Slobodno me pratite i na Twitteru na

    Najbolji članci na temu