Java ve javascript arasındaki fark. Java'nın Javascript'ten farkı nedir? Java ve JavaScript'in karşılaştırılması. Kodunuz için hayati kavramlar

  • 21.04.2019

Java ve JavaScript arasındaki farkın ne olduğu sorusu, pek çok acemi programcının kafasını heyecanlandırıyor, çünkü neredeyse aynı görünüyorlar ve isimlerinde aynı kök kelimeye sahipler. JS'nin daha çok bir "komut dosyası" formuna benzediği varsayılabilir. Ama bu yanlış bir yargıdır. Bunlar iki farklı programlama dilidir. Yalnızca, benzerliklerini açıklayan Netscape'in yaratılışının ortak bir tarihini paylaşırlar. Sonra tamamen farklı yönlerde ayrılırlar.

Bugün programcılar, bu dillerin hamsterdan jambona benzediği gibi şaka yapmayı seviyor. Yine de, Java'nın JavaScript'ten nasıl farklı olduğunu anlamak, kendinizi okuryazar bir kişi olarak görmek için çok önemlidir.

İnternetin ilk günlerinde, 1990'da, Internet Explorer ve Netscape Navigator, kullanıcılar tarafından kullanılan en popüler iki web tarayıcısıydı.

Sadece 10 gün içinde, Netscape Inc'den yetenekli geliştirici Brendan Eich, bilgisayara kullanıcıyla nasıl etkileşimde bulunacağını bildiren bir tarayıcı programlama dili yarattı. Bu dile Livescript adını verdi ve onu doğrudan Navigator'a entegre etti. Tarayıcı daha sonra kullanıcının komutlarını yorumladı. Kodu derlemeye gerek yoktu ve eklentiye hiç gerek yoktu.

Başka bir programlama dili olan Java, çalışması için ayrı bir eklenti gerektirmesine rağmen, aynı zamanlarda popülerlik kazanıyordu. Sun Microsystems'den James Gosling tarafından icat edilen bir programlama dilidir. Oluşturulması ve geliştirilmesi 10 günden fazla sürdü - dört yıldan fazla sürdü. 1991'den beri, Yeşil Ekip adlı bir grup Sun Microsystem mühendisi, onu oluşturmak için gece gündüz çalıştı. İlk olarak 1995'te piyasaya sürüldü ve o zamandan beri dilin birkaç yeni sürümü yayınlandı.

Günümüzün İnterneti, programlama ürünleriyle doludur ve Java'ya, bunu kolaylaştıran birçok uygulaması için teşekkür edilebilir. günlük hayat kullanıcılar. Marka şu anda Oracle'a aittir.

Java, kendi koduna sahip bir şeydir, aynı kodun her yerde kullanılabileceği genel amaçlı nesne yönelimli bir programlama dilidir. Derlenir ve yorumlanır. Derleyici kaynak kodunu bayt koduna dönüştürür, ardından yorumlayıcı doğrudan makine tarafından yürütülen kodu oluşturur. Güvenilir, dağıtılmış, taşınabilir ve bağımsız veya web uygulamaları geliştirmek için kullanılabilir.

Dil özellikleri:

  1. Derleme ve yorumlama, derleyici tarafından çeviri için koşulları oluşturan Java'dır. kaynak kodu bayt koduna dönüştürülür. Daha sonra doğrudan makine tarafından çalıştırılabilen makine kodu üretilir ve bundan yorumlayıcı sorumludur.
  2. Bağımsız ve taşınabilir bir platforma sahip olması, bir makineden diğerine taşınabilir. Herhangi bir işletim sistemi değişikliği ile uygulayın, ancak sistem kaynakları ve işlemci programları etkilemez.
  3. Derleyici tarafından oluşturulan bayt kodu herhangi bir makinede kullanılabilir.
  4. Her şeyin sınıflar ve nesneler etrafında döndüğü tamamen nesne yönelimli bir dil.
  5. Virüs tehdidini ve kaynakların kötüye kullanılmasını önler. Bir çöp toplayıcıdan oluşur ve hataları ve çökme riskini ortadan kaldırmak için istisna işleme kullanır.
  6. Dağıtılmış. Web üzerinde uygulamalar oluşturmanıza olanak tanır ve hem verileri hem de programı paylaşabilir. Ayrıca internet üzerinden uzak nesnelere erişmek için de kullanılabilir ve birden fazla programcının farklı uzak konumlardan birlikte çalışmasına olanak tanır.
  7. Çoklu kullanım ve etkileşim. Birden çok görevin aynı anda işlenebileceği çok iş parçacıklı programlara yardımcı olur.
  8. Dinamik ve genişletilebilir yeni sınıflara, nesnelere, yöntemlere ve kitaplıklara sahiptir. C ve C++ gibi dillerde yazılmış fonksiyonları da destekleyebilir.
  9. Geliştirme kolaylığı, çünkü yeniden kullanmak kod oluşturma sürecini kolaylaştırır.
  10. Ölçeklenebilirlik. Başlangıç ​​süresini artırarak ve çalışma zamanında bellek tüketimini en aza indirerek performansı artırabilirsiniz.

JavaScript nedir? Öncelikli olarak verilen dil sistemin işleyişi için önemlidir. Uygulamaların doğru davranışını ve etkileşimini sağlamak için yerleşik bir istemciye sahiptir. Dil, standardizasyon amacıyla ECMA (Avrupa Bilgisayar Üreticileri Birliği) Netscape'e tanıtıldı. Standart versiyon ECMA Komut Dosyası olarak adlandırılır. Kullanıcıların ilgisini çekmek için yaptığı pazarlama taktiği nedeniyle popüler hale geldi.

Tarayıcı, JavaScript kodunu çalıştırmak için kullanılır (buna bakıyoruz). İkincisi şurada mevcuttur: farklı versiyonlar... Platform olarak sadece tarayıcılar kullanılmaz. Mongo DB, Couch DB gibi bazı veritabanları, komut dosyası oluşturma ve sorgulama dili olarak JS'yi kullanır. Tarayıcı tarafından yorumlanabilen Java ile ilgili küçük ve basit bir dizi komut içerir.

Sayfa olayları JS ile hızlı bir şekilde oluşturulabilir, ancak Java veya C++ gibi kontrol için tasarlanmış diğer dillerin geliştirebileceği şekilde masaüstü uygulamaları geliştirme yeteneğine sahip değildir.

Java programlama dilinin özellikleri ve açıklamaları aşağıda verilmiştir:

  1. Yorumlama - JS kodu tarayıcıda yürütülür ve kodun derlenmesini doğrudan ortadan kaldırır.
  2. Kodu yürütmek için tarayıcıyı kullanan ve sunucuyla etkileşim gerektirmeyen bir istemci tarafı komut dosyası dili. Ancak, daha yeni sürümler ve çerçeveler zaten sunucu tarafı komut dosyası oluşturmaya izin veriyor.
  3. Olay tabanlı - herhangi bir durum oluştuğunda belirli bir kodu çalıştırabilir, herhangi bir yükleme sayfası veya form gönderimi olabilir.
  4. Üzerindeki nesneleri işleyerek bir HTML sayfasına denetim uygular.

Birincil dil farklılıkları

Yaklaşık beş yıl önce, Java'nın JavaScript'ten nasıl farklı olduğu sorusunu yanıtlamak daha kolay olabilirdi. Java ile bir dildir genel amaçlı ve JS, animasyonlu ve etkileşimli öğeler oluşturmak için sitelerin doğasında bulunur. Bugün, işler çok daha karmaşık. Her iki dil de son birkaç yılda hızla gelişti. Java ve JavaScript dilleri farklı yazılır, birleştirilir ve uygulanır ve her birinin işlevsellik açısından büyük farklılıkları vardır.

Konunun daha iyi anlaşılması için bir karşılaştırma tablosu sunuyoruz.

Programda kullanım için ilk olarak bildirilen bir değişkene sahip katı bir dil. Derleme sırasında değişkenin türü kontrol edilir.

Daha rahat sözdizimi ve kuralları vardır.

Nesne yönelimli bir dildir.

Nesne tabanlı komut dosyası için bir dil.

Uygulamalar herhangi bir sanal makinede (JVM) veya tarayıcıda çalışabilir.

JS yalnızca tarayıcı için tasarlandığından, JS kodu yalnızca tarayıcıda yürütülür.

Nesneler sınıflar üzerine kuruludur, hatta sınıf oluşturmadan herhangi bir program oluşturamayız.

Nesneler prototiplere dayalıdır.

Program .Java dosya uzantısına sahiptir ve kaynak kodunu JVM (Java Sanal Makinesi) tarafından yürütülen bayt kodlarına dönüştürür.

Dosyanın bir ".js" dosya uzantısı vardır ve yorumlanır ancak derlenmez, her tarayıcının JS kodunu yürütmek için bir JavaScript yorumlayıcısı vardır.

Özerk dil.

Program daha fazla bellek kullanır.

Daha az bellek gerektirir, bu nedenle web sayfalarında kullanılır.

Eşzamanlılık için bir iş parçacığı yaklaşımı kullanır

Eşzamanlılık tabanlı olayları destekler

Kullanıcılar bu tabloyu kullanarak Java ve JavaScript arasındaki farkı daha iyi anlamaya başlayacaklar.

JavaScript başlangıçta siteye özeldi. Şu anki enkarnasyonunda, hemen hemen tüm tarayıcılarda çalışır ve bazı web siteleri bunu daha iyi hale getirmek için kullanır. Kullanıcı arayüzü... Java uygulamaları tarayıcılar tarafından yalnızca bir dereceye kadar desteklenir, güvenlik endişeleri nedeniyle kullanımları düşüktür. Çoğu site ziyaretçisinin JS'yi etkinleştirmesi ve Java uygulamalarını varsayılan olarak devre dışı bırakması, özellikle de mobil tarayıcılar... Her iki dil de Java Sunucusu ile uyumludur, örneğin Apache Tomcat, JBoss ve WebSphere gibi uygulamalarda.

Bu sunucular, genel sitelerde görüntülenen ve kurumsal güvenlik duvarları tarafından korunan programların çoğunu işgal etti. JS, bir süredir sunucu tarafında denemeler yapıyor. JS, uygulama sunucularını giderek daha fazla kendi kodlamalarıyla kullanıyor.

Her iki dilin de çerçeveleri ve kitaplıkları vardır. Kullanıcılara hedefe erişim sunarlar ve evrensel kod için yeniden kullanılabilir farklı ürünler... Kullanıldıklarında, geliştirme süresini önemli ölçüde azaltırlar.

Bu argümanları inceledikten sonra kullanıcı Java ve JavaScript arasındaki fark nedir sorusuna cevap bulabilir.

Modern diller arasındaki temel farklar

Diller ondan fazla geliştirildi ve geliştirildi son yıllar... Aralarındaki farklar da değişti. Bugün onları birkaç şekilde sistemleştirebilirsiniz:

  1. Performans stili. Anahtar, bunların nasıl yapıldığıdır. Java kodu genellikle IDE'ye yazılır ve Java sanal makinesi tarafından başlatılan ancak kullanıcılar tarafından okunamayan koda derlenir. JS, mekanizması ve sözdizimi ile olağan şekilde uygulanır. Aslında, çevrimiçi olarak yayınlanan JS dosyaları genellikle ince bir biçime sıkıştırılır. Java IDE'deki değişiklikler, değişiklikleri derlemek ve dağıtmak için bir dizi adım ve özel yazılım gerektireceğinden, okunabilirlik önemli bir farktır.
  2. Topluluk etkisi. Programlama topluluğunun her iki dilde de büyük etkisi oldu. Java Topluluğu Süreci, Java tarafından, spesifikasyon istekleri aracılığıyla dillerde gelecekte yapılacak eklemelere ilişkin girdileri kabul etmek için kullanılır. Java'nın şu anki sahibi Oracle, dilin bir sonraki resmi uygulaması üzerinde çalışmak için bu sorguları kullanıyor.
  3. Yazma ve Dağıtım. Bu, Java ve JavaScript arasındaki bir başka önemli farktır. Java, özellikle bir kez kod yazan ve daha sonra herhangi bir yere dağıtan geliştiriciler için tasarlanmıştır. işletim sistemi herhangi bir değişiklik yapmaya gerek kalmadan seçerler. JS, çalışma zamanı değişikliklerine daha duyarlıdır ve açık standart ECMAScript'i takip eder.
  4. Java karşılaştırması ve kalıtım kavramları olarak JavaScript. JS sınıfları kullanmaz, ancak prototip tabanlıdır.
  5. Soyağacındaki farklılıklar. JS, Java'dan daha basit ve daha küçük bir komut kümesine sahiptir.

Java ve JS aynı nesne yönelimli yaklaşımı paylaşırken, birincisi kendi başına durabilir ve ikincisi çalışmak için temel olarak bir HTML belgesine yerleştirilmelidir. Java, bağımsız uygulamalar oluşturan daha karmaşık ve daha geniş bir dildir.

Java uygulamaları tamamen bağımsız programlar ve JS, tarayıcı tarafından işlenen ve yorumlanan metindir. Ancak günümüzün web uygulamaları, geleneksel masaüstü uygulamaları ile CSS, HTML ve JS gibi yaygın web teknolojileri kullanılarak oluşturulanlar arasındaki çizgiyi bulanıklaştırmaktadır.

Diğerleri anahtar fark dilin son kullanıcıya nasıl sunulduğudur. Java için derlenmelidir makine dili... JS, bir HTML belgesine yazabileceğiniz ve belgenin derlenmeden doğrudan tarayıcı üzerinden çalıştırıldığı metin tabanlıdır.

Java, HTML'den bağımsızdır ve JS neredeyse tamamen ona bağlıdır. En iyi web uygulamaları için hangi dilin en iyi olduğu sorusunun cevabı değişebilir, bazıları anında JSt'yi tercih ederken, bazıları daha çok tercih ediyor. bol fırsatlar ve Java'nın güçlü yönleri.

JS'nin en güçlü yönlerinden biri, insanların onu anlayabilmesidir. Bu, kodlamayı çok daha kolay hale getirir ve dili daha sağlam hale getirir. Ayrıca Java'ya göre büyük bir hız avantajı sağlar. JS ile Java'dan daha hızlı etkinlikler ve web sayfası öğeleri oluşturmak mümkündür. Birçok JavaScript komutuna olay işleyicileri de denir. Bu komutlar doğrudan mevcut HTML komutlarına yerleştirilmiştir.

Kullanım kolaylığının yanı sıra JavaScript, programcı için Java'dan daha bağışlayıcıdır. Bu, programcıya prototipiyle nesneler oluşturma konusunda daha fazla özgürlük verir. Bu arada Java daha katıdır ve tüm sınıfların ve örneklerin tanımlanmasını ve belirtilmesini gerektirir. JavaScript ayrıca, tarayıcının kendisi veya durum çubuğu gibi önceden var olan nesneleri çağırmanıza ve yalnızca o kısımla oynamanıza izin verir. Java, neredeyse her zaman ihtiyaç duyulan yerlere yöneliktir, JavaScript ise web sayfalarına yöneliktir.

Ancak, hem Java hem de JS aslında iyi sayfalar ve hem Java hem de JS daha fazlasını sunabilir yüksek seviye site ile kullanıcı arasında mümkün olandan daha fazla iletişim HTML kullanarak... Dolayısıyla hiçbir dilin diğerinden üstün olmadığı açıktır. JavaScript ve küçük uygulamalar, çoğunlukla web'de tamamen işlevsel öğeler olarak sunulur. Bu, gerekli izne sahipseniz bunları kolayca alıp sayfanızda kullanabileceğiniz anlamına gelir. Aslında uygulamacıklar ve JavaScript sağlama konusunda uzmanlaşmış birkaç site var.

Öğeleri web sayfanıza nasıl uygulayacağınızı öğrenmek istiyorsanız, İnternette birçok harika öğretici ve kaynak var. JavaScript ve HTML öğreticileri tam da bunu yapar. Ancak, dillerin nasıl yazılacağını öğretmediklerini, sadece onları bir web sitesine nasıl koyacağınızı gösterdiklerini unutmayın. verebilir iyi sunum Her iki format hakkında. Kullanıcı Java'nın JavaScript'ten nasıl farklı olduğunu öğrendiğinde, yapılarını daha iyi anlayabilecek ve diller hakkında daha fazla şey öğrenmeye çalışabilecektir. Belki bir gün kendi küçük uygulamalarını veya JavaScript öğelerini yaratacaktır.

Her şey. Bunlar alakasız dillerdir.

2018-12-04T00: 00Z

JavaScript nesne yönelimli bir dildir Kodlar, Bu, dinamik HTML sayfaları oluşturmanıza olanak tanıyarak, genellikle bir tarayıcıda, verileri işlemenize ve verileri korumanıza olanak tanır.

Java, kaynak kodunu orijinal biçiminde dağıtmadan veya yeniden derlemeden hemen hemen her platformda çalışan derlenmiş programlar oluşturmanıza olanak tanıyan bir programlama dili, temel kitaplıklar kümesi ve sanal bir makine platformudur.

Aynı isimlere sahip olsalar da aslında tamamen farklı iki programlama dili/modeli/platformudur ve tamamen farklı sorunları çözmek için kullanılırlar.

JavaScript'in Java ile benzer veya yakından ilişkili olduğu yaygın bir yanlış anlamadır; Bu yanlış. Her ikisinin de C benzeri sözdizimi vardır, nesne yönelimlidir, genellikle yalıtılmıştır ve istemci tarafı web uygulamalarında yaygın olarak kullanılır, ancak benzerlikler burada sona ermektedir. Java statik olarak yazılmıştır; JavaScript yapılandırması dinamiktir (bu, bir değişkenin herhangi bir türde nesne içerebileceği ve sınırlandırılamayacağı anlamına gelir). Java, derlenmiş bayt kodundan yüklenir; JavaScript, insan tarafından okunabilir kod olarak yüklenir. C, onların son ortak ata dilidir.

2018-12-11T00: 00Z

JavaScript, Java ile herhangi bir ilgisi olduğu konusunda dikkatsiz olanları şaşırtmak için Netscape tarafından bu şekilde adlandırıldı. moda sözcük gün ve o başardı.

Bu iki dil tamamen farklıdır.

2018-12-18T00: 00Z

İşte iki dil arasındaki bazı farklar:

  • Java, statik olarak yazılmış bir dildir; JavaScript dinamiktir.
  • Java sınıf tabanlıdır; JavaScript prototip tabanlıdır.
  • Java yapıcıları, yalnızca bir nesne oluşturulduğunda çağrılabilen özel işlevlerdir; JavaScript "yapılandırıcıları" yalnızca standart işlevlerdir.
  • Java, engellenmeyen tüm ifadelerin noktalı virgülle bitmesini gerektirir; JavaScript, belirli satırların sonuna noktalı virgül ekler.
  • Java, blok ölçeklemeyi kullanır; JavaScript kullanır fonksiyonel tanım alan.
  • Java, statik olmayan yöntemler için bir örtük bu kapsama ve örtülü bir sınıf kapsamına sahiptir; JavaScript'in gizli bir global kapsamı vardır.

JavaScript'in özel güçlü yönleri olduğunu düşündüğüm özelliklerden bazıları şunlardır:

  • JavaScript kapanışları destekler; Java, anonim sınıfları kullanarak sıralama "kapanışlarını" simüle edebilir. (Gerçek kapatmalar, Java'nın gelecekteki bir sürümünde desteklenebilir.)
  • Tüm JavaScript işlevleri değişkendir; Java işlevleri, yalnızca açıkça işaretlenmişlerse değişkendir.
  • JavaScript prototipleri, çalışma zamanında geçersiz kılınabilir ve başvurulan tüm nesneler üzerinde anında bir etkiye sahip olabilir. Java sınıfları, mevcut nesne örneklerini etkileyecek şekilde geçersiz kılınamaz.
  • JavaScript, prototipinden bağımsız olarak bir nesne üzerindeki yöntemleri geçersiz kılmanıza izin verir (kendinizi Ruby'de düşünün, ancak steroidler); Java nesnesindeki yöntemler, sınıfına bağlıdır ve çalışma zamanında geçersiz kılınamaz.

2018-12-25T00: 00Z

Java ve Javascript benzer, Araba ve Halı benzer.

2019-01-01T00: 00Z

Dünyadaki hemen hemen her bilgisayar, üzerinde kurulu en az bir JavaScript çevirmeni satıyor.

Çoğu ("neredeyse tümü" değil) PC'lerde Java VM kuruludur.

GitHub'daki istatistiklere bakarsanız, JavaScript ve Java'nın iki hegemon olduğunu göreceksiniz. modern dünya C / C ++, Python, PHP ve Ruby'den önce programlama. Adlarının benzer olmasına, adından da anlaşılacağı gibi JavaScript'in Java'nın daha hafif, anlaşılması daha kolay, daha uygun bir sürümü olmasına rağmen, hala neredeyse hiçbir ortak noktaları yoktur.

Bu yazıda, ortak adın geliştiricilerin ilk fikrinden başka bir şey olmadığını gösteren bu dillerin temel özelliklerine bakacağız.

Java

Geliştirme sırasında "Oak" ve "Green" olarak adlandırılan Java dili, 1995 yılında resmi olarak piyasaya sürüldü. C / C ++'dan çok şey ödünç aldı, ancak kolay ve güvenli programlamayı içeren yeni kavramları teşvik etti. Bu nedenle, başlangıçta bu en popüler dillerin varisi olarak algılanan Java idi.

Java kodunun temel ilkesi, bir programcının herhangi bir yerde çalışabilmesi için bir kez kod yazabilmesidir. derlemek yerine çeşitli dosyalar her platform için burada bir JAR dosyası oluşturulur. Ve sistem Java'yı destekliyorsa, dosya yürütülür.

Böyle bir fikri uygulamak için JVM kullanılır veya Sanal Java makinesi... Bu, platforma bağlı olarak derlemeyi ve kodun daha fazla yürütülmesini belirleyen bir dizi talimattan başka bir şey değildir. Bu ilkeye tam zamanında denir.

Java'nın ana uygulama alanları:

  • Android uygulamaları. Bu resmi dil bugün en popüler işletim sistemi için. Bu, elde etmek için daha iyi sonuçlar ve mümkün olduğunca çok özellik kullanan Java ideal dildir
  • Masaüstü uygulamaları. Ayrıca Java, platformlar arası yazılım oluşturmak için kullanılan araçlardan biridir. JavaFX ve SWT size yardımcı olacak.
  • Girişimcilik sistemleri. Kişisel verilerin işlenmesiyle ilgili sektörlerde (bankacılık, finans, ticaret) Java, güvenilir, bakımı kolay ve hızlı bir dil olarak kullanılmaktadır.
  • Gömülü sistemler. Akıllı saatler, bazı kontrolörler, trafik ışıkları ve hatta ayrı sistemler hibrit arabalar Java kullanır. En güncel gelişme vektörü Nesnelerin İnternetidir.
  • Bilimsel araştırma... Burada çok daha popüler olan MATLAB ve Python, ancak Java, dil işleme veya yapay zeka yönetimi gibi karmaşık görevlerle de iyi başa çıkıyor.

JavaScript

JavaScript, HTML'nin muazzam sınırlamalarının arka planına karşı geliştirildi. Netscape Communications, dinamik, işlevsel bir web'e olan ihtiyacı önceden gördü, bu nedenle sadece 10 gün içinde 1995'te LiveScript adında bir dil yarattılar.

Daha sonra geliştiriciler, Java kullanarak işlevsellik ekleme fikrini ortaya attılar. Nihai isim ve benzeri sözdizimi bu şekilde ortaya çıktı. Ancak, benzerliklerin bittiği yer burasıdır. Açık nedenlerden dolayı, o zamana kadar Java henüz web'de yayınlanmamıştı, JavaScript hızla popülerlik kazandı ve HTML ve CSS ile birlikte modern İnternet'in temel direkleri haline geldi.

Kodu derlenen Java'nın aksine JavaScript kodu yorumlanır. Yani bir web sayfasını ziyaret ettiğinizde tarayıcınız JavaScript kodunu alır ve hemen çalıştırır. Bunun için özel motorlar kullanılır, her tarayıcı kendi kullanır: V8 - Chrome, SpiderMonkey - Firefox, Chakra - Edge vb.

Ancak, JavaScript artık tamamen tarayıcı tabanlı bir araç değildir. Başlangıcından bu yana yirmi yıldan fazla bir süredir JavaScript, diğer alanlarda da kullanılan en esnek programlama dillerinden biri olarak kendini kanıtlamıştır:

  • Web uygulamaları. JavaScript, hem ön uç hem de arka uç geliştirme için inanılmaz derecede iyidir. İlk durumda, bu, tarayıcı tarafında (animasyon, veri ekleri, güncellemeler), ikincisinde - sunucu tarafında (yönlendirme, veri işleme, veritabanı ile etkileşim) DOM ile manipülasyonları gerektirir.
  • Mobil uygulamalar. React Native ve PhoneGap gibi araçlar, yalnızca JavaScript kullanarak eksiksiz mobil uygulamalar oluşturmanıza olanak tanır. Bu tür çerçeveler iki türe ayrılır: JavaScript'i yerel koda çevirenler ve JavaScript motorunu kullananlar.
  • Masaüstü uygulamaları. Electron ve NE.js gibi çerçeveleri kullanarak JavaScript'i çevrimdışına almak mümkündür. Bu durumda motor çalıştırılabilir bir dosya içerisine paketlenir ve açılan pencerede HTML/CSS/JS kodu çalıştırılır.

Peki hangisini seçmeli?

Her iki dilin de mevcut gelişim düzeyi göz önüne alındığında, aslında seçim, verilen gereksinimler performans, işlevsellik ve yürütme hızı.

Java ile biraz daha karmaşık bir dildir büyük miktar kısıtlamalar. Java uygulamaları, JavaScript kullanılarak oluşturulanlardan daha az hataya açıktır ve genellikle daha işlevseldir. Ama aynı zamanda bir bedeli var, en önemlisi geliştirmenin zamanı ve karmaşıklığı. JavaScript uygulamaları sizden daha az çaba gerektirecek, ancak yürütülmesi daha uzun sürecek, hata ayıklama sırasında daha fazla hata ortaya çıkacak ve karmaşık kod yazmak istemeniz pek olası değildir.

Bu nedenle, web için JavaScript kullanmak daha iyidir ve karmaşık karmaşık yazılımların geliştirilmesini Java'ya bırakmak daha iyidir. Masaüstü ve mobil uygulamaların oluşturulması ise bir zevk meselesidir. Kodunuzu temiz tutacağı ve daha az hataya sahip olacağı için Java kullanmanızı tavsiye ederim. Öte yandan, JavaScript de iyidir.

Java ve JS'yi karıştırmak için GraalVM kullanımı hakkında bir makale yazmaya söz verdi. İşte orada.


Sorun nedir? Günlük uygulamada, genellikle iki bölümden oluşan uygulamalar vardır: JavaScript ön ucu ve Java arka ucu. Aralarındaki birlikte çalışma organizasyonu çaba gerektirir. Kural olarak, barikatların farklı taraflarından insanlar tarafından yapılırlar ve yabancı bir alana tırmanmaya çalıştıklarında acı çekmeye başlarlar. Ayrıca tam yığın web geliştiricileri de var, ancak onlar hakkında her şey açık: her zaman acı çekmek zorundalar.


Bu yazıda, yeni teknoloji bu da süreci biraz daha az acı verici hale getirebilir. Daha doğrusu, yöntem uzun süredir var, ancak bir şekilde geniş kitlelerin dikkatini çekti.


Javistlerden bazıları henüz React'te yazmadıysa, işte bunu yapmanıza izin veren bir eğitim olacak. Javascript yazarlarından biri Java ile yazmayı denemediyse, aynı eğitimde ona dokunabileceksiniz (sadece bir satır ve JS bağlamaları aracılığıyla da olsa).

JS-> Java. Eskiyi Salla: Nashorn

Birlikte çalışabilir bir Java-> JS istiyorsanız, uzun zaman önce JDK'da böyle bir teknoloji vardı ve bunun adı Nashorn (okuyun: "Nashorn").


Gerçek hayattan bir durumu ele alalım. İnsanlar zaman zaman, yıldan yıla Java'da "sunucu" doğrulayıcıları ve JS'de "istemci" doğrulayıcıları yazmaya devam ediyor. Buradaki özel bir sinizm, kontrollerin genellikle %80 oranında çakışması ve aslında tüm bu faaliyetlerin, vasat bir zaman kaybının özel bir şekli olmasıdır.


Diyelim ki çok aptal bir doğrulayıcımız var:


var validate = function (hedef) (if (hedef> 0) ("başarılı" döndürür;) else ("başarısız" döndürür;));

Üç platformda da çalıştırabiliriz:

  • Tarayıcı
  • Node.js

Bu tarayıcıda önemsizdir. Bu kod parçasını herhangi bir yere yerleştirdik ve işe yarıyor.


Node.js'de, onların Feng Shui'sine gereksinim kullandıkları için saygı göstermeniz ya da bu şekilde cehenneme kadar hacklemeniz gerekir. basit kod:


var fs = gerektirir ("fs"); var vm = gerektirir ("vm"); var includeInThisContext = işlev (yol) (var kodu = fs.readFileSync (yol); vm.runInThisContext (kod, yol);) .bind (bu); includeInThisContext (__ dizin adı + "/" + dosya adı);

Bu teknikleri kullanırsanız, çok geçmeden meslektaşlarınızın sizi bir korkuluk olarak görmeye başlayabileceği gerçeğine hazırlanın. Biz javistler yabancı değiliz, ancak profesyonel javascriptörler utanabilir.


Şimdi aynı şekilde sikişelim ama Java'da Naskhorn'un altında.


genel sınıf JSExecutor (özel statik final Logger günlükçü = LoggerFactory.getLogger (JSExecutor.class); ScriptEngine motoru = yeni ScriptEngineManager (). getEngineByName ("nashorn"); Invocable invoker = (Invocable) motor; genel JSexecutor () (Dosya önyüklemesini deneyin) = new ClassPathResource ("validator.js"). getFile (); String bootstrapString = new String (Files.readAllBytes (bootstrapFile.toPath ())); engine.eval (bootstrapString);) catch (Exception e) (logger. error ("Önyükleme JS'si yüklenemiyor!", e);)) public Object yürütme (Dize kodu) (Nesne sonucu = null; try (sonuç = motor.eval (kod);) yakalama (İstisna e) (logger. error ("JS çalıştırılamaz!", e);) sonuç döndür;) public Object executeFunction (Dize adı, Nesne ... argümanlar) (Nesne sonucu = boş; deneyin (sonuç = invoker.invokeFunction (ad, argümanlar) ); ) catch (İstisna e) (logger.error ("JS çalıştırılamaz!", e);) sonuç döndür;))

Gördüğünüz gibi, hem keyfi kod çekebilirsiniz hem de ayrı işlev onun adıyla.


Tabii ki, sadece manuel olarak çözülebilecek sorunlar var. Örneğin, bunun gibi bir çoklu dolgu hazırlayabilirsiniz:


var global = this; var pencere = this; var process = (env :()); var konsol = (); konsol.debug = yazdır; konsol.log = yazdır; konsol.warn = yazdır; konsol.hata = yazdır;

Doğrulayıcı kodunun hem sunucuda hem de istemcide tamamen aynı olmasını istiyorsanız, yalnızca tarayıcıya gönderilen "sunucu" yöntemleri için saplamalar yazmanız gerekecektir. Bunlar belirli bir uygulamanın ayrıntılarıdır.


Bu arada, dizüstü bilgisayarımda ab (ab -k -c 10 -n 100 http:// localhost: 3000 /? Id = 2) böyle bir kod için saniyede 6-7 bin istek gösteriyor ve önemli değil ne üzerinde çalışıyor - Nashorn veya Node.js'de. Ancak bu ilginç bir şey değil: ilk olarak, yerel ana bilgisayardaki ab, Mars'taki hava durumunu ölçer ve ikinci olarak, bu motorlarda bariz bir gaf olmadığına zaten inanıyoruz, bunlar rakipler.


Eğri S.'nin "kırmızı bölgesinde" yaşıyorsanız, beyninizi çalıştırmadan ve kıyaslamalar yazmadan Nashorn'u kullanamazsınız. Bir düşünürseniz, Nashorn'un sarkacağı bir kıyaslama yazabilirsiniz ve yerel kod yazmak daha doğru olur. Ama şunu net olarak anlamalıyız ki dünya sadece highload ve performans temalarıyla sınırlı değil, bazen yazmanın rahatlığı herhangi bir performanstan daha önemli.

Java-> JS. Sorun

Verileri Java'dan JS'ye ters yönde itmeye çalışalım.


Bu neden gerekli olabilir?


Birincisi ve en önemlisi, birçok şirkette açık bir aksiyom vardır: Java kullanıyoruz. Bazı bankalarda. İkincisi, günlük sorunları çözme sürecinde bu tür görevler sürekli olarak ortaya çıkar.


Oyuncak çantasını düşünün gerçek hayat... Hayal edin: bir web paketi ile bir cephe oluşturmanız gerekiyor ve web sayfasının sağ üst köşesine sığdırmak istiyorsunuz. şimdiki versiyonu uygulamalar. Arka uç sürümünün, yalnızca bazı Java kodlarını (eski) çağırarak normal bir şekilde çıkarılabilmesi olasıdır. Bu, iki geçişte çalışacak böyle bir Maven projesi oluşturmanız gerektiği anlamına gelir: Maven Build Yaşam Döngüsünün bir aşamasına bir çift sınıf ekleyin ve bunları başlatın; bu, seçilecek bir sürüm numarasına sahip bir özellikler dosyası oluşturacaktır. sonraki aşamada npm ile manuel olarak yukarı.


Böyle bir pom.xml örneğini burada vermeyeceğim çünkü iğrenç :)


Daha küresel olarak sorun, modern kültürün çok dilli programcıları ve birden çok dilde yazılmış projeleri desteklemesi ve teşvik etmesidir. Bundan, aşağıdaki noktalar ortaya çıkar:

  • Geliştiriciler, eldeki göreve en uygun dili kullanmak ister. Java'da bir web arayüzü yazmak çok acı vericidir (en azından JVM ve OpenJDK WebAssembly'de stabilize olana kadar), ancak JS'de basit ve rahat bir şekilde yapılır.
  • Genellikle birkaç kod tabanını paralel olarak geliştirmek istersiniz. Örneğin, bir JS tabanı - ön ve başka bir Java tabanı - arka vardır. Java'nın mantıken gerekli olmadığı yerlerde, sunucu kodu da dahil olmak üzere tüm uygulamayı Node.JS'de yavaş yavaş yeniden yazarak projeler geliştirmek istiyorum. Java arka ucunun veya JS ön ucunun tamamı çöplüğe gittiğinde sıfır numaralı gün olmamalı ve yeni bir tane yazarken tüm dünyanın beklemesine izin vermemelisiniz.
  • Bir dil sınırını aşarken, birlikte çalışmayı sağlayan çok sayıda gereksiz kodu manuel olarak yazmanız gerekir.

bazen vardır hazır çözümler- örneğin Java/C sınır geçişi JNI kullanılarak yapılır.


Böyle bir entegrasyonun kullanılması da iyidir, çünkü işlevsel programcıların söylemekten hoşlandığı gibi, “kırılmayan bir şey kırılmaz”. Kodumuzdaki en son pom.xml, özellikler ve xml dosyalarını ve diğer manuel birlikte çalışmayı desteklersek, bunlar en tatsız anlarda kırılma eğilimi gösterirler. Bu katman, Oracle veya Microsoft gibi bazı gerçek savaş meraklıları tarafından yazılmışsa, neredeyse kırılmaz ve bozulduğunda, onu düzeltmek bize düşmez.


Bir önceki örneğe dönersek: Eğer hiç kalkıp tüm kullanıcı arayüzünü sadece Node'a yazamıyorsak, neden iki kez kalkıp Naskhorn ile mucizeler yaratmamız gerekiyor?


Ancak, Java'dan şeffaf bir şekilde veri emmeniz gerektiği göz önüne alındığında, bunu nasıl yapacaksınız?


Akla gelen ilk düşünce Nashorn'u kullanmaya devam etmektir. Her şeyi içine çek gerekli kütüphaneler dosya ve belki de başlarlar. Aralarında yerel uzantılara ihtiyaç duyanlar olmadığı sürece. Ve Node.js'nin tüm altyapısını manuel olarak taklit edin. Ve başka bir şey. Sorun bu gibi görünüyor. Genel olarak, zaten böyle bir proje vardı, buna Proje Avatar deniyordu ve ne yazık ki büküldü. Oracle geliştiricileri bunu tamamlayamadıysa, bunu kendi başlarına yapabilme şansları nedir?

Java-> JS. tahıl

Neyse ki, oldukça yeni ve ilginç bir projemiz daha var - Graal.js. Yani, Graal'ın JavaScript'i çalıştırmaktan sorumlu kısmı.


JDK dünyasından yenilikçi projeler genellikle uzak ve gerçek dışı bir şey olarak algılanır. Graal bu konuda farklıdır - çok aniden sahneye olgun bir rakip olarak girdi.


Graal, OpenJDK'nin bir parçası değil, ayrı bir üründür. İçinde olduğu biliniyor taze versiyonlar OpenJDK, JIT derleyicisini C2'den Graal ile gelene değiştirebilir. Ayrıca Graal, çeşitli yeni dilleri uygulamak için kullanılabilen Truffle çerçevesiyle birlikte gelir. Bu durumda, Oracle Labs'deki geliştiriciler JavaScript desteğini uygulamıştır.


Ne kadar kolay ve kullanışlı olduğunu anlamak için örnek bir oyuncak projesine bakalım.


Habre'de bir UFO kabini yaptığımızı düşünelim.



Felling'in ilk versiyonunda, UFO rastgele insanları yasaklayabilecek ve butonun adı "Birini yasakla!" İkinci versiyonda, düğme ya trolleri ya da spam göndericileri yasaklayacak ve şu anda tam olarak kimleri yasakladığımız Java'dan yüklenecek. Örneği küçültmek için sadece buton üzerindeki etiket değişecek, iş mantığını atlamayacağız.


Bir tepki uygulaması yapmak için atılması gereken birçok adım vardır, bu nedenle bunlar düzgün bir şekilde adımlara ayrılır. Sonunda, çalışan bir uygulama elde edildi, kontrol ettim.

Bölüm 1. Uygulama saplaması

1. "Kurumsal" GraalVM'yi (referans olarak) indirin ve normal Java ortam değişkenlerini kaydedin.

Kurumsal sürüm gereklidir çünkü yalnızca GraalJS içerir.


Örneğin, bunu .bash_profile dosyasına yazabilirsiniz:


graalvm () (dışa aktarma LABSJDK = / Kullanıcılar / olegchir / opt / graalvm-0.33 / İçindekiler / Ana sayfa dışa aktarma LABSJRE = / Kullanıcılar / olegchir / opt / graalvm-0.33 / İçindekiler / Ana Sayfa / jre dışa aktarma JDK_HOME = $ LABSJDK dışa aktarma JRE_HOME = $ LABSJRE Java_HOME dışa aktar = $ JDK_HOME dışa aktar YOL = $ JDK_HOME / bin: $ JRE_HOME / bin: $ YOL)

Ve kabuğu yeniden başlattıktan sonra şu işlevi çağırın: graalvm.


Neden ayrı bir bash işlevi yapmayı ve onu hemen değil de gerektiğinde çağırmayı öneriyorum? Burada her şey çok basit: GraalVM PATH'e girdikten sonra, normal sistem npm'niz (örneğin, macOS'ta / usr / local / bin / npm) özel java versiyonumuzla ($ JDK_HOME / bin / npm) değiştirilecektir. Bir JS geliştiricisiyseniz, sabitin bu ikamesi iyi bir fikir değildir.

2. Proje için bir dizin oluşturma

mkdir -p ~ / git / habrotest cd ~ / git / habrotest

3.npm init (akıllıca doldurun, ancak sadece giriş düğmesine tıklayabilirsiniz)

4. Gerekli modülleri kurun: Webpack, Babel, React

npm i --save-dev web paketi web paketi-cli web paketi-dev-server npm i --save-dev babel-core babel-loader babel-preset-es2015 babel-preset-tepki npm i --save tepki tepki-dom

npm'nin biraz olabileceğini unutmayın eski versiyon("mevcut" ile ilgili) ve sizden güncellemenizi isteyecektir. Güncellemeye değmez.

5. İşin yapılacağı dizinler oluşturun:

mkdir -p kaynak / istemci / uygulama mkdir -p kaynak / istemci / genel mkdir -p yükleyiciler

6. Babil'e dillerimizi öğretiyoruz:


("ön ayarlar": ["es2015", "tepki")])

7. Web paketini yapılandırma:

./webpack.config.js:


var p = gerektirir ("yol"); var web paketi = gerektirir ("web paketi"); var BUILD_DIR = p.resolve (__ dizinname, "src / client / public"); var APP_DIR = p.resolve (__ dizin adı, "src / istemci / uygulama"); var config = (çıktı: (yol: BUILD_DIR, dosya adı: "bundle.js"), giriş: APP_DIR + "/index.jsx", modül: (kurallar: [(test: /\.jsx?/, şunları içerir: APP_DIR , yükleyici: "babel yükleyici")])); modül.exports = yapılandırma;

8. Uygulamamız için bir sayfa oluşturun:

./src/client/index.html


UFO kokpitine hoş geldiniz

9. Bir dizin oluşturuyoruz (böylece daha sonra içine bir demo bileşeni yerleştirebiliriz):

./src/client/app/index.jsx


React'i "tepki" den içe aktar; "tepki-dom"dan içe aktar (render); NLOComponent'i "./NLOComponent.jsx" dosyasından içe aktarın; sınıf Uygulaması React.Component'i genişletir (render () (döndür (

Kokpite hoş geldiniz, UFO

); )) render ( , document.getElementById ("uygulama"));

10. Bir bileşen oluşturalım!

./src/client/app/NLOComponent.jsx


React'i "tepki" den içe aktar; NLOComponent sınıfı, React.Component'i (yapıcı (sahneler) (süper (sahneler); this.state = (yasaklandı: 0); this.onBan = this.onBan.bind (bu);) onBan () genişletir (bırak newBanned = bu. state.banned + 10; this.setState ((yasaklandı: newBanned)));) render () (dönüş (

11. Derlemeyi çalıştırın: webpack -d

Her şey aşağıdaki gibi bir şeyi başarıyla toplamalı ve çıkarmalıdır:


joker: habrotest olegchir $ webpack -d Karma: b19d6529d6e3f70baba6 Sürüm: webpack 4.5.0 Süre: 19358ms Yapım Tarihi: 2018-04-16 05:12:49 Varlık Boyutu Parçaları Parça Adları bundle.js 1.69 MiB ana ana Giriş noktası ana = paket. js [./src/client/app/NLOComponent.jsx] 3.03 KiB (ana) [./src/client/app/index.jsx] 2.61 KiB (ana) + 21 gizli modül

12. Artık tarayıcınızda açabilirsiniz. / Src / client / index.html ve aşağıdaki görünümün keyfini çıkarın:

Eğitimin ilk bölümünü tamamladınız, şimdi düğmedeki etiketi nasıl değiştireceğinizi öğrenmeniz gerekiyor.

Bölüm 2. Kayma değişkenleri

13. JS'de hakkında hiçbir şey bilinmeyen "button name" (buttonCaption) ve "list of options" (buttonVariants) değişkenini bileşenimize enjekte etmeye çalışalım. Gelecekte, Java'dan çekilecekler, ancak şimdilik kullanımlarının bir hataya yol açıp açmadığını kontrol ediyoruz:

React'i "tepki" den içe aktar; NLOComponent sınıfı React.Component'i genişletir (yapıcı (sahneler) (süper (sahneler); this.state = (yasaklandı: 0, düğme: buttonCaption); this.onBan = this.onBan.bind (bu);) onBan () (let newBanned = this.state.banned + 10; this.setState ((yasaklandı: newBanned, düğme: buttonVariants));) render () (dönüş (
Yasaklandı: (this.state.banned)
); )) varsayılan NLOComponent'i dışa aktar;

Dürüst bir hata gözlemliyoruz:


NLOComponent.jsx? 8324) HTMLUnknownElement adresinde performUnitOfWork'ta (react-dom.development.js? 61bb: 11798) startupWork'te (react-dom.development.js? 61bb: 8966) workLoop'ta (react-dom.development.js? 61bb: 11827 ) . callback (react-dom.development.js? 61bb: 104) Object.invokeGuardedCallbackDev'de (react-dom.development.js? 61bb: 142) invokeGuardedCallback'te (react-dom.development.js? 61bb: 191) replay'de (UnitOf) -dom.development.js? 61bb: 11302) (anonim) @ bundle.js: 72 react-dom.development.js? 61bb: 9627 Yukarıdaki hata, bileşen: NLOComponent'te (Uygulama tarafından oluşturuldu) div'de (Uygulama tarafından oluşturuldu) Uygulamada

14. Şimdi Webpack'te değişkenleri kaydırmanın yasal yolu ile tanışalım. Bunlar yükleyiciler.

İlk olarak, özel yükleyicileri rahatça yüklemek için web paketi yapılandırmasını biraz yeniden yazmanız gerekir:


var p = gerektirir ("yol"); var web paketi = gerektirir ("web paketi"); var BUILD_DIR = p.resolve (__ dizinname, "src / client / public"); var APP_DIR = p.resolve (__ dizin adı, "src / istemci / uygulama"); let defaults = (çıktı: (yol: BUILD_DIR, dosya adı: "bundle.js"), giriş: APP_DIR + "/index.jsx", modül: (kurallar: [(test: /\.jsx?/, şunları içerir: APP_DIR) , yükleyici: "babel-loader")]),solveLoader: (modüller: ["node_modules", p.resolve (__ dirname, "loaders")])); module.exports = işlev (içerik) (dd dd = varsayılanlar; dd.module.rules.push ((test: /index\.jsx/, yükleyici: "önyükleme", seçenekler: ())); dönüş dd;

(Seçeneklerde yükleyicinin herhangi bir veriyi kaydırabileceğini ve ardından loader-utils modülünden loaderUtils.getOptions (bu) kullanarak okuyabileceğini unutmayın)


Şimdi, aslında, bir yükleyici yazıyoruz. Yükleyici aptaldır: kaynak parametrenin girişine ilk kod gelir, istediğimiz zaman değiştiririz (değiştirmeyebiliriz) ve sonra geri veririz.


./loaders/preload.js:


const loaderUtils = gerektirir ("yükleyici-utils"), schemaUtils = gerektirir ("schema-utils"); module.exports = function ana (kaynak) (this.cacheable (); console.log ("yükleyici uygulanıyor"); var initial = "Troll'ü yasakla!"; var varyants = JSON.stringify (["Troll'ü yasakla!", " Spam göndericiyi yasaklayın! "]); Return` window.buttonCaption = \ "$ (ilk) \"; `+` window.buttonVariants = $ (varyantlar); `+` $ (kaynak) `;);

Web paketi -d ile yeniden oluşturma.


Her şey yolunda gidiyor, hata yok.

Bölüm 3. Java Kodu Ekleme

15. Şimdi siz sorun, tamam, küçük bir Webpack hilesi öğrendik ama Java'nın bununla ne ilgisi var?

Buradaki ilginç olan şey, yükleyicimizin bir nedenle, ancak Kâse'nin altında çalıştırılmasıdır. Bu, Nashorn'un "ovsky"sine benzer bir API kullanarak JS'den Java türleriyle çalışmanın mümkün olduğu anlamına gelir.


const loaderUtils = require ("loader-utils"), schemaUtils = require ("schema-utils"); module.exports = function main (source) (this.cacheable (); console.log ("uygulama yükleyici"); // Java türlerini alabilir ve bu türden nesneler oluşturabiliriz var JavaString = Java.type ("java.lang" . String "); var initial = new JavaString (" Trolü yasakla! ​​"); // Verileri şu şekilde dönüştürebiliriz var jsVariants = [" Trolü yasakla! ​​"," Spam göndericiyi yasakla! ​​"]; Var javaVariants = Java .to (jsVariants, "java.lang.String"); var varyantları = JSON.stringify (javaVariants); // Ancak birlikte çalışma her zaman iyi değildir ve ardından `window.buttonCaption = \" $ ( ilk) \ ";` + `window.buttonVariants = $ (varyantlar);` + `$ (kaynak)`;);

Ve elbette, web paketi -d.

16. Bir web paketi ile derleme yapmaya çalışırken bir hata görüyoruz:

HATA ./src/client/app/index.jsx Modül oluşturma başarısız oldu: ReferenceError: Java, Object.main'de tanımlı değil (/Users/olegchir/git/habrotest/loaders/preload.js:9:19)

Java türlerinin varsayılan olarak mevcut olmaması ve yalnızca GraalJS'de bulunan ancak "normal" Node.js'de bulunmayan --jvm özel bayrağı tarafından etkinleştirilmesi nedeniyle ortaya çıkar.


Bu nedenle, özel bir komutla toplamanız gerekir:


düğüm --jvm node_modules / .bin / web paketi -d


Tüm bunları yazmak oldukça sıkıcı olduğundan, bash'ta bir takma ad kullanıyorum. Örneğin, aşağıdaki satırı .bash_profile içine ekleyebilirsiniz:


takma ad graal_webpack_build = "düğüm --jvm node_modules / .bin / web paketi -d"

Ya da yazmayı daha keyifli hale getirmek için daha da kısa bir şey.

17. KAR!

Sonuç GitHub depomda görüntülenebilir. Toplanan dosyalar, öğreticiyi sonuna kadar gitmeden bile bakabilmeniz için doğrudan depoya bağlıdır.


Çözüm

Bu kadar basit ve kullanışlı bir şekilde artık Java ve JS'yi entegre edebiliriz. Bütün bunlar uzak tek dava, kullanmanın birçok yolu vardır.


Son olarak, bir varil bal içinde bir damla merhem. Amaç ne?

  • GraalJS henüz Açık Kaynak değil, ancak söylentilere göre açık kaynak yapmak istiyorlar; Her şey zaten yolunda.
  • Java npm şimdiye kadar yavaşlıyor. Neden - çalışmak gerekli. Yavaşlayan, JS motorunun kendisi değil, npm'dir;
  • Tüm bunların altında şiddetli bir sihir var ve içine girmeye çalışırken ek olarak birçok şey çalışmanız gerekecek;
  • Bütün bunlar JDK8'e karşı derlenmiştir. Java 11'in yeni özelliklerinin yeterince beklemesi gerekecek;
  • Graal deneysel bir projedir. Hataya yer bırakmayan çok kanlı bir işletmeye entegre etmeye çalışırken bunu göz önünde bulundurmalısınız.

Etiketler: Etiket Ekle

LiveScript, ECSMAScript = JavaScript

Artık pop-up'larıyla Gmail'e sakince yanıt veriyoruz, anlık mesajlaşma ve tüm bunlar sayfayı yeniden yüklemeden. Ancak 90'ların başında, Windows altındaki programlar bunu çok büyük bir esnemeyle ve Bağımsız uygulamaların doğasını üst üste bindirerek yapabilirdi. Aslında, belirtilen sorun, web sayfalarında etkileşim eksikliği, yalnızca resim ve köprülerle birlikte kuru metindir. Bu sorun, o zamanki Netscape şirketinin (şimdi Mozilla) mühendislerinin endişe duyduğu şeydi ve burada Javascript hakkında bir hikaye başlatmaya değer.

Genç mühendis Brendan Icke'ye Java'ya benzer, ancak daha küçük ve yazarın kendisinin yazdığı gibi “bir tür küçük erkek kardeşi” olan bir dil yaratma görevi verildi ve bu çok önemli, bu nedenle anlamlı bir kelime dağarcığına sahip olacaktı. programcı olmayanların teknolojide hızla ustalaşabileceğini ... Zaten 10 gün sonra, LiveScript olarak adlandırmaya karar verdikleri dilin ilk versiyonu yazıldı. Tabii ki, kısa sürede ideal bir dil oluşturmak pek mümkün değil, ancak bazı eksikliklerine rağmen, önündeki görevi çözdü, yani sayfayı yeniden yüklemeden HTML ile çalışmaya izin verdi.

Bir süre sonra dilin adı JavaScript olarak değiştirildi. Bu isim tesadüfen seçilmedi. O zamanlar ve aslında şimdi olduğu gibi, Java dili çok popülerdi ve Java kelimesinin öneki çekici olmalıydı. daha fazla ilgi dile. Ve meyvesini verdi, insanlar dilin yeteneklerini o kadar merak ettiler, denediler, değerlendirdiler, öyle ki teknolojinin duyurulmasından sonra 20'den fazla şirket Javascript'i gelecekteki ürünlerinde bir nesne betik dili olarak bir nesne betik dili olarak kullanma niyetlerini dile getirdi. açık standart (Wikipedia materyallerine dayanarak). Ve bu 1995'ti.

Aynı yıl, Netscape'in dosyalanması sırasında dil, Avrupa Bilgisayar Üreticileri Birliği (ECMA) tarafından standartlaştırıldı ve ECMAScript adını aldı. Belgenin mevcut revizyonu, çoğu modern tarayıcı tarafından desteklenen 5.1'dir.

Şimdi bu kafa karışıklığına neden oluyor, insanlar bazen LiveScript, JavaScript ve ECSMAScript isimleri konusunda kafa karıştırıyor. Ancak standart ve programlama dili kavramları arasındaki farkı atlarsa, o zaman böyle bir fark yoktur, bu yüzden tarih ve şirketler bunu emretti.

Kodunuz için hayati kavramlar

Javascript 1994'ten beri muazzam bir şekilde büyüdü. Artık fullstack bir dildir ve bu, örneğin ek bir sunucu tarafı programlama dili kullanmadan tam teşekküllü bir web sitesi yazabileceğiniz anlamına gelir. Bu, Google tarafından geliştirilen V8 motorunun ve buna dayalı sunucu platformu node.js'nin ortaya çıkmasından sonra mümkün oldu.

İki çok vurgulamaya değer önemli fırsatlar dil, bunlar kapanışlar ve yürütme bağlamıdır.

  • Kapanışlar, bir işlev bildirimi yerinde mevcut olan değişkenlere başvurma yeteneğidir;
  • Yürütme bağlamı, işlevin kimin için yürütüldüğüne bağlı olarak bu başvurunun bir işlev içindeki nesnelere yaptığı değişikliklerdir.

Bunlar oldukça kolay ve aynı zamanda anlaşılması pratikten sonra gelen karmaşık kavramlardır. Ancak bunları yanlış anlamak, koddaki hataların en yaygın nedenidir.

JavascriptBuJava?

Belki de internetteki en yaygın soru. Zaten anladığınız gibi, cevap hayır. İsim benzerliği sadece pazarlama hilesi... JavaScript bazılarını miras aldı Java özellikleri ama daha fazlası değil. Tablo en belirgin farklılıkları açıklamaktadır.

Javascript

yorumlandı

Derlenmiş

Bu, Javascript'te yazdığınız kodun derlenmeden hemen çalıştırılabileceği anlamına gelir. Sırayla, Java kodu önce sanal makine tarafından yürütülecek olan bayt koduna dönüştürülmelidir.

Dinamik yazma

Statik

Dinamik yazma, programın farklı bölümlerinde aynı değişkenin farklı türlerde değerler alabileceği anlamına gelir. Örneğin, bir değişken bildirirken onu bir dize olarak tanımladınız, ancak bu arada ona sayısal bir değer atadınız. Javascript bu kodu hatasız yorumlarken Java derleyicisi bir hata üretecektir.

Prototipik Nesneye Yönelik

Sınıf Nesnesi Yönelimli

Javascript'te ana öğe, program yürütme sırasında değiştirilebilen ve başka nesneler oluşturmak için klonlanabilen prototip nesnelerdir. Buna prototip programlama denir.

Java'da sınıf ve nesne olmak üzere iki temel kavram vardır. Nesneyi kullanmadan önce bir sınıf olarak tanımlanmalıdır. Bu sözde sınıf prototip programlamadır.

Özetlemek. Nereden başlamalı?

JavaScript açık şu an, en popüler istemci tarafı programlama dili. Makaleyi okumadan önce ve okuduktan sonra bunu duyduysanız, aynı şekilde çalışmaya başlamaya karar verdiyseniz, ProstoWeb sizin için birkaç tane hazırladı. faydalı kaynaklar yeni başlayanlar için:

web siteleri

  • http://javascript.ru - runette bir numara;
  • https://developer.mozilla.org/ru/docs/JavaScript - en son bilgiler ilgili konular dilim. Makalelerin çoğu daha derin konuları kapsar, ancak dil (İngilizce) hakkında temel bilgiler de vardır.