DartにはWebプログラマーにとって便利な機能はありますか?


33

http://www.dartlang.org/

私は非常に短い間サイトをチェックアウトし、好奇心urious盛になりました。Dartを使用する利点はありますか?JavaScriptの単なる置き換えですか?

単純なJavaのように見えます。仕事でかなり多くのC#を記述しているため、この言語は私が慣れ親しんでいるものと非常に似ているので、構文を学ぶのは簡単です。この言語について誰か意見や経験はありますか?

(CoffeeScript(=私はRuby構文を実行していません)と比較して、構文は私にとってより馴染みがあります)。


18
ダグ・クロックフォードのコメントはおもしろい。ダートのようなもので。」
MebAlone

2
@MebAlone Ho-ho-ho、なんて洞察力があるか。クロックフォードはなんというワグです。知恵に対する賢明さ。
-funkybro

11
@MebAlone Dart言語設計者、JavaScriptの長所をすべて保持する新しい言語を考え出そうとませんでした。彼らは、ブラウザ用のクラスベースのオブジェクト指向言語を考案しようとしていました。
MarkJ

1
どういうIs there any advantages of using Dart?意味ですか?何よりも有利で、どのように測定しました?JavaScriptにコンパイルされるさまざまな言語があります。それらのほとんどは、ダートよりもはるかに良いことをします。ダーツよりも優れた機能を提供する人もいます。また、たとえば、C#を実行する場合、ScriptSharpは興味深いかもしれません。JavaScriptにコンパイルするすべての言語の中で、それが私の最初の選択肢ではありませんが、非常に簡単に移行でき、おそらく既存のコードを簡単に移植できます。
back2dos

1
@MebAlone Douglasは少し対立しています。苦情を言っている開発者は新しいアイデアを受け入れませんが、ダーツは2日前にリリースされたばかりの2012年には悪いと言っています。彼らはそれが2年前に来ると発表しました。dartは、ダグラスがJSで不満を抱いていることのいくつかに対処しています(「ゆるんだ」プロトタイプのコンストラクター関数はありません)。好きなもの(クロージャなど)を保持します。いくつかのプレゼンテーションで、彼がプロトタイプを賞賛し、コンストラクター関数の構文を批判しているのを見ました(そうです)。次に、それを「解決」して、プロトタイプの存在を完全に無視するモジュールパターンを示します。
HMR

回答:


65

ご質問ありがとうございます!完全な免責事項、私はDartチームで働いています。

おそらく今日のDartの最大の利点は、C#、Java、C ++、およびほとんどのJavaScript開発者になじみがあることです。多くの開発者は、言語(クラスベースのオブジェクト指向、レキシカルスコープ、使い慣れた構文)およびツール(コード補完、リファクタリング、コードナビゲーション、デバッグ)に関してDartが満たすことを目指している一連の期待を持っています。

この言語について私が気に入っていることをいくつか紹介します。

  1. オプションの静的タイプ。プロトタイプを作成するとき、または単純に小さなスクリプトを書くときは、大量の静的型を使用しません。私はただそれらを必要としません、そして、私は式で動揺したくありません。ただし、これらのスクリプトの一部は、より大きなプログラムに進化します。スクリプトが拡大するにつれて、クラスと静的型注釈が必要になる傾向があります。

  2. 有罪が証明されるまで無実。Dartは、コンパイル時エラーを引き起こす状況を最小限に抑えるように努めています。Dartの多くの条件は警告であり、プログラムの実行を停止しません。どうして?Web開発の流行に合わせて、開発者が少しのコードを試してリロードし、何が起こるかを確認できるようにすることが不可欠です。開発者は、コードのコーナーをテストする前に、プログラム全体が正しいことを最初に証明する必要はありません。

  3. レキシカルスコープ。あなたがそれに慣れていないなら、これは素晴らしいです。簡単に言えば、変数の可視性、さらにはこれはプログラム構造によって定義されます。これにより、従来のWebプログラミングのパズルのクラスが排除されます。これをあなたが考えているか期待しているものに保つために関数を再バインドする必要はありません。

  4. 言語に組み込まれた実際のクラス。ほとんどのWeb開発フレームワークがソリューションを提供しているため、ほとんどの開発者がクラスでの作業を望んでいることは明らかです。ただし、フレームワークAの「クラス」は、従来のWeb開発ではフレームワークBと互換性がありません。Dartはクラスを自然に使用します。

  5. トップレベルの機能。Javaの苦痛な部分の1つは、すべてをクラスに入れる必要があることです。これは、特にいくつかのユーティリティ関数を定義する場合に少し人工的です。Dartでは、クラスの外のトップレベルで関数を定義できます。これにより、ライブラリの構成がより自然に感じられます。

  6. クラスには暗黙的なインターフェースがあります。明示的なインターフェイスを削除すると、言語が簡素化されます。どこでもIDuckを定義する必要はありません。今必要なのはDuckクラスだけです。すべてのクラスには暗黙的なインターフェースがあるため、MockDuck implements Duck

  7. 名前付きコンストラクター。コンストラクターに名前を付けると、読みやすくなります。例えば:var duck = new Duck.fromJson(someJsonString)

  8. ファクトリコンストラクター。ファクトリパターンは非常に一般的で、これが言語に組み込まれているのは素晴らしいことです。ファクトリコンストラクターは、シングルトン、キャッシュからのオブジェクト、またはサブタイプのオブジェクトを返すことができます。

  9. 分離します。スレッド間で可変状態を共有する時代は終わりました(エラーが発生しやすい手法)。Dart分離は、分離されたメモリヒープであり、別のプロセスまたはスレッドで実行できます。分離は、ポートを介してメッセージを送信することにより通信します。Dart VMで作業を分離し、HTML5アプリでWebワーカーにコンパイルできます。

  10. DartはJavaScriptにコンパイルされます。JavaScriptはWebの共通語であるため、これは非常に重要です。Dartアプリは最新のウェブ上で実行する必要があります。

  11. 強力なツーリング。Dartプロジェクトにはエディターも同梱されています。コード補完、リファクタリング、クイックフィックス、コードナビゲーション、デバッグなどがあります。また、IntelliJにはDartプラグインがあります。

  12. ライブラリ。名前空間と再利用を容易にするために、Dartコードをライブラリに整理できます。コードでライブラリをインポートし、ライブラリを再エクスポートできます。

  13. 文字列補間。これは単なる便利な機能であり、文字列を簡単に作成できます。var msg = "Hello $friend!";

  14. noSuchMethod Dartは動的言語であり、を使用して任意のメソッド呼び出しを処理できますnoSuchMethod()

  15. ジェネリック。「これはリンゴのリストです」と言うことができると、ツールがより多くの情報を提供し、潜在的なエラーを早期に発見するのに役立ちます。幸いなことに、Dartのジェネリックは、おそらくあなたが慣れているものよりも単純です。

  16. 演算子のオーバーロード。Dartクラスは、+やなどの演算子の動作を定義できます-。たとえば、のようなコードを書くことができますnew Point(1,1) + new Point(2,2)

すべてを言ったが、そこにはもっと多くのJavaScriptライブラリがあります。

個人的には、ウェブ上には多くの言語の余地があると思います。アプリが素晴らしく、最新のブラウザの大半で実行される場合、私はそれがどの言語で書かれているかはあまり気にしません。重要なのは!:)


多くの最新のプログラミング言語(Ruby、Scala、Python)には、ある種の多重継承メカニズムが含まれており、これはJDK8で導入されています。これはDartで計画されていますか?
MebAlone

4
ポイント#1の+1-動的なタイピングは、小さなスクリプト(つまり、「フォーム検証」レベル)に非常に適しています。それをはるかに超えて、静的型付けのセーフティネットが不可欠であると思います。
-funkybro

2
@MebAlone近い将来、ミックスインがDartに登場することを期待しています。
セス・ラッド

驚いたスナップショットは言及されていませんでした-IMOはDartの最高の機能の1つです。
神話

@mythzスナップショットはまだ完全には実装されていないため、言及しませんでした。しかし、はい、彼らはクールです!
セスラッド

11

仕事でかなり多くのC#を書いているので、言語は私が慣れているものにとても似ている

これがDartの1つのポイントです。Javascriptは、一般的なイディオムがほとんどない厄介な言語と見なされます。Javaのような言語では、多くの場合、問題にアプローチする自然な方法があります。たとえば、テーブルのインベントリを保持する場合、JavaまたはC#でクラステーブルを作成します。

Javascriptにはクラスがありません。プロトタイプを使用したい場合がありますが、プロトタイプは扱いにくく、そのような強力な構造とカプセル化ツールを提供しません。(少なくともスタントを作らない限りではありません。)継承、構成などは、Javascriptプロトタイプでは扱いにくいです。それが、ほとんどの人がプレーンハッシュマップを使用してデータを保存する理由です。または、プロトタイプのようなサードパーティのライブラリを使用して、クラスのような体験を提供します。

ですから、利便性は一つのことであり、他は構造化です。大規模なアプリを構築する標準的な方法がないため、Javascriptはうまくスケールしません。しかし、現在そのようなサードパーティのライブラリは本当に人気が出てきています。(backbone.jsのように)

Dartはそれを解決するものです。これは、Javaの構造上の利便性を提供するためのものであり、さらに、これらすべての厄介なJS機能を備えていません。(それらのほとんどは弱いタイピングに関連しています。)

したがって、答えはイエスです。クラス、継承、...:「伝統的なOOP」。(ほとんどの実際のJS Webアプリケーションは、メイン構造としてjQueryのコールバックベースのアプローチを使用しています。)そして、静的型付けのゆるやかな形式を持っていますが、それは重要なセールスポイントではありません。

ところで:あなたは2010年日付のこの「内部」Googleメールを読みたいかもしれません:Javascriptの未来

Javascriptには、単に言語を進化させるだけでは解決できない根本的な欠陥があります。Javascriptの将来に向けて、2つの戦略を採用します... Javascriptの動的な性質を維持することを目的とする新しい言語(Dashと呼ばれる)を開発します。 。


5
誰もがJavascriptを「扱いにくい言語」と見なしているわけではありません。多くの場合、問題にアプローチする自然な方法があります。多くの場合、Javaでサポートされていない手法(関数型プログラミング、演算子のオーバーロード、ミックスイン、汎用プログラミング)が必要です。継承、構成などは、Javascriptプロトタイプでは厄介ではありません。JavaやC#とは異なりますが、Ruby、LUA、Perlに似ています。
ケビンクライン

1
うーん...初めてプロトタイプについて良いことを聞いた。しかし、Rubyに似たJSプロトタイプはどのように見えますか?
フィリップ

1
より頻繁に(Javaの世界から)抜け出す必要があります。Rubyメタプログラミング(ruby-doc.org/docs/ProgrammingRuby/html/ext_ruby.html)を見ると、Rubyメンバーの名前解決がJavascriptメンバーの名前解決に似ている(ただし、IMOはより複雑である)ことがわかります。
ケビンクライン

jQueryは、DOM API(本質的にラップする)、またはコアJS自体、またはDartが持つよりも、コールバックアプローチをシェイプまたはフォームで促進しません。プロトタイプは、クラスができないことを可能にする継承メカニズムです。クラスを関数のコンストラクタと比較します。これは、プロトタイプではなく、内部インスタンス変数をうまくカプセル化します。才能の中央値のbean / getter-setterスパミングJavaまたはC#開発者がカプセル化の利点について少しだけ考えているわけでも、平均的なGoogle開発者がJavaScriptを書く方法について少し考えているわけでもありません。
エリックReppen

@ErikReppen:DOM操作専用にjQueryを使用する場合、backbone.jsなどの他のフレームワークと組み合わせる場合、コールバックをほとんど必要としないコードを作成できます。jQueryでイベントをバインドすると、(匿名の)コールバックが非常に促進されます。Backbone.jsには、より構造化されたアプローチがあります。
フィリップ

5

私にとっては、スコープとクラスを持つJavaScriptよりもコードを構造化する機会を与えてくれます。

これはJavaとJavaScriptに似ており、Dartエディターを使用すると、ほとんどゼロに適応しました。私はすぐにコーディングを始めました。

var ws = new [Moz]WebSocket異なるブラウザに対応する必要があるのは面倒です。Dartは、一般的なブラウザーと互換性のあるJavaScriptコードにコンパイルします。

私の挑戦は主にJavaScriptコードとのインターフェースです。私はどういうわけかそれを回避する方法を見つけますが、それがDartの一部であるならより良いでしょう。


合意、@ Abiola、Dartはより良いJavaScript相互運用を必要としています。それは非常にレーダーにあります、私はチームが思い付くものを楽しみにしています。
セス・ラッド

0

Java / C#アプローチは、Web 2.0の開始以来JSをノックする際に明らかに偏っています。これは、クライアント側言語とサーバー側言語の人為的(または非常に現実的かつ必要な)差別化によるものです。これは、サーバー側の言語がWebアプリの中核となる問題領域の「制御」を維持し、ビジネスコード(サーバー側)とそれほど深刻ではないコード(UIコード)を区別できるためだと思います。また、Javaは主にFlashとHTML 5によりアプレットとのGUI戦争を失ったため、サーバーサイドカーネルであり続けることが大好きだと思います。 。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.