Özellikler açısından düşünmeye meyilliyim:
Sözdizimi:
C Tabanlı ya da neyin var. Java, C tabanlı bir sözdizimine sahiptir. Kafanızı sözdizimden çıkarmak ve verilen bir dilin nasıl çalıştığının temelleri hakkında daha fazla düşünmek için Python veya Ruby gibi bir şey denemenizi şiddetle tavsiye ederim. Hiçbir sözdiziminin C-tabanlıdan daha ağır olması gerekmediğini ve beyaz-alan etrafında herhangi bir problem oluşturmadığını düşünüyorum.
Derlenmiş ve yorumlanmış w. Sözlü / Konsolide Yapılma İşlemi
Derleme zamanı ile çalışma zamanı ortamıyla ilgili endişelerim hakkında çok az bilgim var ama orada nadiren düşündüğüm bir sürü sorun olduğunu anlıyorum.
Aynı şekilde, Java gibi sanal bir makinenin içinde çalışmak için hala bir derleme işlemine sahip olan birçok yorumlanmış dil vardır. Bazı şeyleri değiştirmek için hala yeniden inşa etmeniz gerekiyor.
Daha sonra, canlı bir ortamda bir konsolda komut vererek komut vererek, anında çalıştırabileceğiniz JavaScript ve Python var. Üçü de kod yazmanın farklı yollarına yol açabilir.
Dinamik ve Sıkı yazma
İkisini tasarımın değişmezliği olarak görmeye meyilliyim. Çok daha düşük bir seviyedeyseniz ve performans önemlidir, statik yazım çok mantıklı olur. Hiçbir zaman birinden diğerinden "daha güvenli" olduğu fikrini hiç anlamadım, ancak yazma sisteminin nasıl çalıştığını ve temelde ne bekleyeceğinizi öğrendiğiniz çok plastik / dinamik bir dilde geldim. Type shenanigan'lar JS'de nadiren benim için bir endişe kaynağıdır. Bazı açılardan esneklik işleri daha da sağlamlaştırabilir, ancak dilde bazı çukurlar hakkında bir şey bilmiyorsanız kuşkusuz daha fazla Jr. seviyesine yönelik bir dokunuşa rağmen.
Blok Seviyesi Kapsamı - İşlev Kapsamı vs.
Blok Seviyesi en yaygın olanıdır (çoğu c-tabanlı sözdizimi dilinde {} arasındaki herhangi bir şey). JavaScript kapsamı, fonksiyonların etrafında oluşturulmaktadır (nesneler de bu kadar etkili nesneler oluşturmak için de kullanılır). İç alandan dış alana kadar ne tür erişime sahip olduğunuzda da büyük farklılıklar vardır. Diğer kapsam planlarına aşina değilim, ancak var olduklarından eminim.
Klasik OOP vs Prototip OOP vs Neredeyse OOP (C? Deki yapılar) vs OOP dışı:
Sınıf temelli OOP'ta bile değişkenlik için çok fazla yer var. Çoklu miras yapıp yapamayacağınız (ee, fazlalık, ee), arabirimleri tanımlamak, vb ...
JavaScript'te, nesnelerin oldukça daha basit, yüksek oranda değişken olduğu bir çeşit bodur hibrit prototip OOP'umuz var, ancak arayüzü hala IMO'nun kapsüllemenin önemli yönü olan iç kaygılardan ayırma yeteneğine sahibiz.
OOP ile ilgili olan şey, teknik olarak OOP olmadan temelde OOP odaklı olan birçok şeyi çekebileceğinizdir. Elbette ki puristler var ama günün sonunda, Tasarım Desenleri belirli durumlarda iyi sonuç veren belirli soyutlamaları başarmakla ilgilidir. OOP tabanlı bir dilden fikirlerin usule dayalı odaklı bir şeyde kullanılmadığını varsaymak için çok hızlı olmayın. Ve ben JavaScript hakkında konuşmuyorum. Prototip tabanlı bir OOP paradigmasının aptal versiyonuyla hiç sınırlı değil.
Birinci Sınıf İşlevler:
Bunları bir dilde olmaması benim için vazgeçmek zor. İşlevleri, diğer bağlamlarda kullanılmak üzere veri gibi etrafta geçirebilirsiniz. Bu, olay işleme planlarını özellikle uygulaması çok kolaylaştırır, ancak dili istediğiniz şekilde çalışacak şekilde uyarlamayı da kolaylaştırır. Bu, şüphelendiğim her şeyden çok, JavaScript'i nihai olarak iki hafta içinde tasarlanmış olmasına ve Java hakkında yaklaşık bir sözdizimini pazarlama planı olarak ele almasına rağmen başardı.
Kapaklar:
Tartışmanın Java için nerde olduğundan emin değilim, ancak bir çok Java geliştiricisinin bu özellik için bir veya iki yıl önce çarpıştığını biliyorum. Kapanmayan bir dilde, bir işlev kapandığında, bir şekilde bu işlevin içinden bir şeylere referans verebilecek herhangi bir şey, toplanmış çöp olduğu için ona erişemez. Bir kapanışta, yürütme bağlamı, bu kapalı işlevin içindeki öğelere, döndürülen bir nesnedeki gibi başka bir kapsamdan başvuru yapabiliyorsanız ya da temelde işlev kapandığında olduğu gibi bu değişkenleri alabileceğiniz şekilde bağlanır. Bu, atıf yapan varlığın yerel varyasyonlarına yapılan varyantların kopyaları gibi uygulandığından şüphelenmekle birlikte, çöp toplamanın kapağında ayağınızı sıkışmak gibi bir şey.
Sert / Sıkı / Güvenli - Size İstediğiniz Tüm Halatları Vermekle İlgili:
JS devs ve Java devs birbirlerini hiç anlamadılar ve bu özel tasarım yelpazesinin birbirine zıt taraflarına düşen iki dilin yapması gereken çok şey olduğunu düşünüyorum. Beni kendimden veya ekibimdeki diğer aygıtlardan korumanı istemiyorum. Duruma bağlı olarak çok daha az kodla çok daha fazlasını yapmak ve hepsini çok farklı (ancak belirli bir etki alanı için tutarlı) yöntemlerle yapmak istiyorum. Her ikisinde de kesinlikle değişimler var ve birçok dil ortada daha fazla düşme eğiliminde.