Dart, web programcıları için faydalı özelliklere sahip mi?


33

http://www.dartlang.org/

Siteyi çok kısaca kontrol ettim ve meraklandım. Dart kullanmanın herhangi bir avantajı var mı? Bu sadece JavaScript'in yerini mi alıyor?

Basit Java gibi görünüyor. İşyerinde epeyce C # yazmak, dil alıştığım şeye çok benziyor, bu yüzden sözdizimini öğrenmek öğrenmeyi çok kolaylaştırıyor. Dil ile ilgili herhangi bir fikri olan veya tecrübesi olan var mı?

(CoffeeScript ile karşılaştırıldığında (= Ruby sözdizimini yapmıyorum), sözdizimi bana daha tanıdık geliyor.


18
Doug Crockford'un yorumu eğlenceli: "Çok uzun zamandır düşündüm ... temiz bir sayfa alıp Javascript'in tüm iyiliğini koruyan yeni bir dil yazabilseydim ... gelmezdim Dart gibi bir şey ile. "
MebAone,

2
@MebAlone Ho-ho-ho, ne kadar anlayışlı. Crockford ne saçmalıyor? Bilgelik üzerine bilgelikler.
funkybro 10:12

11
@MebAlone Dart dili tasarımcıları , JavaScript'in iyiliğini koruyan yeni bir dil bulmaya çalışmıyorlardı . Tarayıcı için sınıf tabanlı, nesne yönelimli bir dil dili bulmaya çalışıyorlardı.
MarkJ

1
Ne Is there any advantages of using Dart?demek istiyorsun? Neyin avantajı ve nasıl ölçülür ? JavaScript'i derleyen bir dizi dil var. Çoğu Dart'dan daha iyi bir şey yapar. Bazıları Dart'dan daha iyi şeyler yapar. Ve örneğin, C # yaparsanız, ScriptSharp sizin için ilginç olabilir. JavaScript'i derleyen tüm diller arasında ilk tercihim olmaktan uzak olacaktı, sizin için çok kolay bir geçiş sunacaktı, muhtemelen mevcut kodu acısız bir şekilde yerleştirmeye bile izin veriyordu.
back2dos

1
@MebAlone Douglas biraz çatışıyor. Şikayet eden geliştiriciler yeni fikirler kabul etmiyorlar, ancak sadece 2 gün önce piyasaya sürüldüğü zaman dart'ın kötü olduğunu söylüyorlar. 2 yıl önce geleceğini açıkladılar. Dart, Douglas’ın JS’de mutsuz olduğu bazı şeylere hitap ettiğinden (yapıcı "gevşek asılı" prototip içeren hiçbir işlev görmez). Sevdiği şeyleri tutarken (kapanmalar gibi). Birkaç sunumda onu prototip övdü, sonra yapıcı işlevlerinin sözdizimini eleştirdi (haklı). Daha sonra prototipin varlığını tamamen görmezden gelen bir modül modelini göstererek “çözer”.
HMR

Yanıtlar:


65

Sorunuz için teşekkürler! Tam sorumluluk reddi, Dart ekibinde çalışıyorum.

Dart'ın bugün sahip olabileceği en iyi avantaj, C #, Java, C ++ ve çoğu JavaScript geliştiricisine aşina olmasıdır. Birçok geliştiricinin dili (sınıf tabanlı OO, sözcük kapsamı, tanıdık sözdizimi) ve Dart'ın karşılamayı ve aşmayı hedeflediği araçları (kod tamamlama, yeniden düzenleme, kod gezinme, hata ayıklama) çevresinde bir dizi beklenti vardır.

İşte dil hakkında sevdiğim bazı şeyler:

  1. İsteğe bağlı statik tipler. Prototip yaparken veya sadece küçük scriptler yazarken, bir ton statik tip kullanmıyorum. Sadece ihtiyacım yok ve törenle boğuşmak istemiyorum. Bununla birlikte, bu senaryoların bazıları daha büyük programlara dönüşür. Scriptler ölçeklerken, sınıfları ve statik tip açıklamaları isteme eğilimindeyim.

  2. Suçu ispatlanana kadar masum. Dart, derleme zamanı hatasıyla sonuçlanan durumları en aza indirmeye çalışır. Dart'daki birçok koşul, programınızın çalışmasını durduramayan uyarılardır. Niye ya? Web geliştirme modasına uygun olarak, geliştiricilerin biraz kod denemelerine, yeniden yüklemeye basmalarına ve ne olduğunu görmelerine izin vermek zorunludur. Geliştiricinin, önce kodun bir köşesini test etmeden önce tüm programın doğru olduğunu kanıtlaması gerekmemelidir.

  3. Sözlüksel kapsam. Alışık değilseniz, bu harika. Basitçe söylemek gerekirse, değişkenlerin görünürlüğü ve hatta bu bile program yapısı tarafından tanımlanmaktadır. Bu, geleneksel web programlamada bir grup bilinmezliği ortadan kaldırır. Yeniden bağlama fonksiyonlarına gerek yok tutmak için bu ne düşündüğünüzü veya bekliyoruz.

  4. Dile pişirilmiş gerçek sınıflar. Çoğu web geliştirme çerçevesi bir çözüm sunduğu için çoğu geliştiricinin sınıfta çalışmak istediği açıktır. Bununla birlikte, A çerçevesinden bir "sınıf", geleneksel web geliştirmede B çerçevesiyle uyumlu değildir. Dart doğal olarak sınıfları kullanır.

  5. Üst seviye fonksiyonlar. Java'nın acı verici bir yanı, her şeyin bir sınıfa konması gerektiğidir. Bu biraz yapaydır, özellikle de birkaç fayda fonksiyonunu tanımlamak istediğinizde. Dart'da, işlevleri herhangi bir sınıfın dışında, en üst düzeyde tanımlayabilirsiniz. Bu, kütüphane kompozisyonunun daha doğal hissetmesini sağlar.

  6. Sınıfların üstü kapalı arayüzler var. Açık arabirimlerin kaldırılması dili basitleştirir. Artık her yerde IDuck tanımlamaya gerek yok, şimdi tek ihtiyacınız olan bir sınıf Duck. Her sınıfın üstü kapalı bir arayüze sahip olduğundan,MockDuck implements Duck

  7. Adlandırılmış kurucular. Yapıcılara gerçekten okunabilirliğe yardımcı olan isimler verebilirsiniz. Örneğin:var duck = new Duck.fromJson(someJsonString)

  8. Fabrika inşaatçıları Fabrika modeli oldukça yaygındır ve bunun dilde pişmiş olduğunu görmek güzel. Bir fabrika yapıcısı, bir singleton, bir önbellekten gelen bir nesne veya bir alt tipteki nesne geri verebilir.

  9. İzole eder. Gone, dişler arasında değişken durum paylaşma günleridir (hataya açık bir teknik). Dart izolatı, ayrı bir işlemde veya iş parçacığında çalışabilen izole edilmiş bir bellek yığınıdır. Bağlantı noktaları üzerinden mesaj göndererek iletişimi izole eder. Dart VM'deki çalışmayı izole eder ve HTML5 uygulamalarında Web çalışanlarını derleyebilir.

  10. Dart, JavaScript'i derler. Bu kritik bir önem taşımaktadır; çünkü JavaScript, web’in lingua franca’sıdır. Dart uygulamaları modern web üzerinde çalışmalıdır.

  11. Güçlü takım Dart projesi aynı zamanda bir editör sunar. Kod tamamlama, yeniden düzenleme, hızlı düzeltmeler, kod gezinme, hata ayıklama ve daha fazlasını bulacaksınız. Ayrıca IntelliJ, bir Dart eklentisine sahiptir.

  12. Kütüphaneler. Dart kodunu kolay adlandırma ve yeniden kullanılabilirlik için kitaplıklar halinde düzenleyebilirsiniz. Kodunuz bir kitaplığı içe aktarabilir ve kitaplıklar yeniden dışa aktarabilir.

  13. Dize enterpolasyonu. Bu sadece bir dizge oluşturmayı kolaylaştıran güzel bir özellik:var msg = "Hello $friend!";

  14. noSuchMethod Dart dinamik bir dildir ve rastgele yöntem çağrıları ile başa çıkabilirsiniz noSuchMethod().

  15. Jenerik. "Bu bir elma listesidir" diyebilmek, aletinize size yardımcı olmak ve olası hataları erken yakalamak için çok daha fazla bilgi verir. Neyse ki, Dart'ın jenerikleri muhtemelen alıştığınızdan daha basit.

  16. Operatör aşırı yükleniyor. Dart sınıfları, +ya da gibi operatörler için davranışı tanımlayabilir -. Örneğin, gibi bir kod yazabilirsiniz new Point(1,1) + new Point(2,2).

Bunları söyledikten sonra, dışarıda daha birçok JavaScript kütüphanesi var.

Şahsen, internette birçok dil için yer olduğuna inanıyorum. Eğer uygulama harikaysa ve modern tarayıcıların çoğunda çalışıyorsa, hangi dilde yazdığı umurumda değil. Siz, geliştirici, mutlu, üretken ve internette yayınladığınız sürece, önemli olan! :)


Birçok modern programlama dili (Ruby, Scala, Python) bir çeşit çoklu miras mekanizması içerir ve bu JDK8'de geliyor. Dart için planlanmış mı?
MebAone 10:12

4
Nokta 1'de +1 - Dinamik yazım küçük scriptler için oldukça yeterlidir (yani "form doğrulama" seviyesi). Bunun ötesinde bir şey olursa, statik yazmanın emniyet ağını vazgeçilmez buluyorum.
funkybro 10:12

2
@MebAlone Karışımların yakın bir zamanda Dart'a geldiğini göreceğimizi umuyorum.
Seth Ladd,

Sürpriz Snap-shotting'den söz edilmedi - IMO, Dart'ın en iyi özelliklerinden biri.
mythz

@ mythz Anlık görüntülerden bahsetmedim çünkü onlar henüz tam olarak uygulanmadı. Ama evet, harikalar!
Seth Ladd

11

İşyerinde epeyce C # yazarken, dil alıştığım şeye çok benziyor

Dart hakkında bir nokta. Javascript, çok az genel deyimle garip bir dil olarak kabul edilir. Java gibi bir dilde, bir soruna yaklaşmanın doğal bir yolu vardır. Örneğin, bir tablo envanterini tutarsanız, Java veya C # ile bir sınıf Tablosu oluşturacaksınız.

Javascript sınıfları yoktur, prototip kullanmak isteyebilirsiniz, ancak garip hissettirir ve bu kadar güçlü bir yapı ve enkapsülasyon araçları sağlamazlar. (En azından dublörlük yapmadan.) Kalıtım, kompozisyon vb. Javascript prototipleriyle garip. Bu yüzden çoğu insan veri depolamak için düz karma haritalar kullanır. Veya size sınıfa benzeyen bir deneyim sunan prototip gibi 3. parti libleri kullanıyorlar.

Yani kolaylık bir şeydir, diğerini yapılandırın. Javascript iyi ölçeklendirilmemektedir, çünkü büyük ölçekli uygulamaları yapılandırmanın standart bir yolu yoktur. Ancak şu anda bu tür 3. parti lib'ler gerçekten popüler hale geliyor. (Backbone.js gibi)

Dart bunu çözmek için bir şey. Size Java'nın yapısal kolaylığını sağlamak için var ve dahası tüm bu garip JS özelliklerine sahip değil. (Çoğu zayıf yazma ile ilgilidir.)

Yani cevap evet: sınıflar, miras, ...: "geleneksel OOP". (Orada gerçek dünyadaki JS webapps'leri ana yapı olarak yaklaşılan jQuery'nin geri çağırma özelliğini kullanır.) Ve gevşek bir statik yazım biçimine sahiptir, ancak kilit satış noktası değildir.

BTW: 2010 tarihli bu "dahili" Google postasını okumak isteyebilirsiniz: Javascript'in Geleceği

Javascript, sadece dili geliştirerek düzeltilemeyen temel kusurlara sahiptir. Javascript'in geleceği için iki aşamalı bir strateji benimseyeceğiz ... Javascript'in dinamik yapısını korumayı amaçlayan ancak daha iyi bir performans profiline sahip olan ve büyük projeler için elverişli olan yeni bir dil (Dash) .


5
Herkes Javascript'i "garip bir dil" olarak görmez. Bir soruna yaklaşmanın doğal bir yolu vardır. Sıklıkla, Java tarafından desteklenmeyen teknikler (işlevsel programlama, operatör aşırı yükleme, karışımlar, genel programlama) gerekir. Kalıtım, kompozisyon vb. Javascript prototipleriyle garip değildir. Java ve C # 'dan farklı, ancak Ruby, LUA ve Perl gibi.
kevin cline 10:12

1
Mmm ... ilk defa prototipler hakkında iyi bir şey duyuyorum. Peki Ruby'ye benzer JS prototiplerini hangi şekilde görüyorsunuz?
Philip

1
Java dünyasından daha sık çıkmanız gerekir. Ruby metaprogramlamasına bakınız ( ruby-doc.org/docs/ProgrammingRuby/html/ext_ruby.html ) ve Ruby üye adı çözünürlüğünün Javascript üye ismi çözünürlüğüne benzer (ancak IMO'dan daha karmaşık) olduğunu göreceksiniz.
kevin cline

jQuery, hiçbir şekilde şekil veya formda, DOM API'den (esas olarak saran) veya çekirdek JS'nin kendisi veya Dart'ın sahip olacağı bir geri arama yaklaşımını desteklemez. Prototipler, sınıfların yapamadığı şeyleri yapmamıza izin veren miras mekanizmasıdır. Sınıfları, iç örneği kapsülleyen işlev yapıcılarıyla karşılaştırın, prototipleri değil, gayet iyi değişebilir. Orjinal yetenek seviyenizin fasulye / alıcı ayarlayıcı spam eden Java veya C # dev'in, enkapsülasyonun neye yarar olduğu konusunda en ufak bir fikre sahip olmadığı veya ortalama Google dev'in JavaScript'i nasıl yazacağınıza dair en ufak bir fikri olmadığı.
Erik,

@ErikReppen: jQuery'yi yalnızca DOM manipülasyonu için kullanırsanız, backbone.js gibi diğer çerçevelerle birleştirmeniz durumunda, geri aramalara gerek duymayan bir kod yazabilirsiniz. Olayları jQuery ile bağlama, çok fazla (anonim) geri aramaları teşvik eder. backbone.js IMHO'ya daha yapısal bir yaklaşıma sahiptir.
Philip

5

Benim için kodumu JavaScript'ten kapsam ve sınıflarla daha iyi yapılandırma şansı veriyor.

Java ve JavaScript ile benzer ve Dart editörüyle sıfıra adaptasyona yakındım. Hemen kodlamaya başladım.

var ws = new [Moz]WebSocketfarklı tarayıcılara hitap etmek zorunda kalmak can sıkıcıdır. Dart, popüler tarayıcılarla uyumlu JavaScript kodunu derler.

Benim meydan okumam çoğunlukla JavaScript koduyla etkileşime girmek. Her nasılsa onunla ilgili yollar buluyorum ama Dart'ın bir parçası olsaydı daha iyi olurdu.


Kabul edildi, @Abiola, Dart daha iyi JavaScript birlikte çalışabiliyor. Radarda çok fazla şey var, ekibin gelip geleceğini dört gözle bekliyorum.
Seth Ladd,

0

Java / C # yaklaşımı, web 2.0'ın başlangıcından beri JS'yi vurma konusunda kesinlikle önyargılıdır. Bunun nedeni, istemci tarafı dilleri ile sunucu tarafı dilleri arasındaki yapay (veya çok gerçek ve gerekli) bir farklılaşmadır. Bunun sunucu tarafındaki dilin web uygulamalarının temel sorun alanlarını 'kontrolünde' tutabilmesi ve işletme kodundan (sunucu tarafı) daha az ciddi kod (kullanıcı kodu) ayırmak olduğunu düşünüyorum. Ayrıca Java, GUI savaşını büyük ölçüde Flash ve HTML 5'e bağlı uygulamalarla kaybettiği için sunucu tarafında bir çekirdek olmayı sürdürdüğünü düşünüyorum. .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.