2016-04-11 12 views
1

私はたくさん使う予定のJavaScriptライブラリを作成しており、最終的に一般公開することがあります。今、私はこのように機能し、「クラスのコンストラクタ」の定義をたくさんやっている:JavaScriptクラスで強力なデータ型を強制する必要がありますか?

function Point(x, y) 
{ 
    this.y = typeof y !== 'undefined' ? y : 0; 
    this.x = typeof x !== 'undefined' ? x : 0; 

    if (typeof this.x === "number" && typeof this.y === "number") 
    { 
    this.x = x; 
    this.y = y; 
    } 
    else if (this.x instanceof Point && typeof this.y === "undefined") 
    { 
    this.x = x.x; 
    this.y = x.y; 
    } 
    else 
    { 
    throw ("Point() Constructor: Invalid arguments."); 
    } 
} 

これは私だけではなく、この「クラス」は、「二つの異なるコンストラクタ」を持つことができますが、それはまたことを保証しますオブジェクトがインスタンス化されると、オブジェクトには予期される型があり、そうでなければ半有用なエラーがスローされます。

これはすべてしばらくの間は良いアイデアのようでしたが、今は私がその方法に慣れ親しんでいるので、他の制作JavaScriptソース(たとえばMozillaのものなど)を見てきました。人々は本当にこれをしないので、第二の考えを持って開始します。そして、今私は、「厳密な型定義標準に準拠するように疎結合型言語を強制しようとしているのはなぜですか?

エラー処理と型チェックに関して、JavaScriptライブラリの今後の標準は何ですか?

this questionと少し関連しているかもしれませんが、私は自分のものを書いています。

+0

私はあなたが入力を強制しているとは思わない、あなたは 'Date()'のように柔軟な入力を許可している... – dandavis

+0

@dandavis多分それは最良の例ではなかった。私はすべての型チェックにもっと関心があります。 ONEパラメータを持つ単純な関数であっても、タイプチェックをしていて、間違ったタイプが与えられた場合はエラーを投げます。 –

答えて

2

強い入力を強制しようとすると、最終的にはその言語に対して作業しています。このアプローチにはさまざまな面がありますが、TypeScriptのようなものを使用すると簡単に達成できます。

あなたがこのアプローチで自分に尋ねなければならない最大の疑問は、アプリケーションで処理する必要のある問題のドメインをすべて考え出し、それを拡張して、考えられなかった他の問題を解決できるかどうかですの。そうであれば、このアプローチは維持するのが非常に難しいでしょうか?このようにすべてのコンストラクターや関数などを作成して、すべてが標準に準拠していることを確認するために時間と手間を掛けることができると感じていますか?これは重要です。なぜなら、JavaScriptはあなたがやっていることを処理しますが、これは言語の "精神"にないと言うことができます。これは、言語がこのようにコードを書くことで目標を達成するのに役立たないことを意味します。

+0

この道を辿る場合(つまり、時々のタイプチェックを超えて)それを助けるために何らかのツールを使用しています。 TypeScriptは1つのオプションになります(Kevinが述べたように)。別のものは[フロー](http://flowtype.org/)です(私の好みはネイティブJSで動作するためです)。実行時の型チェックについては、https://github.com/codemix/babel-plugin-typecheckも参照してください。 –

関連する問題