web-dev-qa-db-ja.com

典型的な「動的言語の間違い」を回避する方法は?

私は最近、JavaScriptに数時間注いだので、大量のユーザーベースから利益を得たいと思っていました。そうすることで、ほとんどの人が動的言語に起因するパターンに気づきました。物事は非常に迅速に機能しますが、コードが特定のサイズに達すると、一般にタイプ、スペル、リファクタリングのエラーで多くの時間を浪費します。コンパイラーが通常私に助かるエラー。また、別のモジュールでタイプミスをしただけで、ロジックのエラーを探す必要はありません。

信じられないほど続くJavaScriptや他の動的に型付けされた言語を考えると、私のアプローチに何か問題があると信じるようになりました。それとも、あなたが支払わなければならない価格だけですか?

より簡潔に言うと:

  • 〜2000 LOCのJavaScript(または他の動的言語)プロジェクトにどのようにアプローチしますか?
  • これらの間違いを防ぐためのツールはありますか? FacebookとJSHintでフローを試してみましたが、多少は役立ちますが、タイプミスはわかりません。
42
TomTom

特にJavaScriptについて言えば、代わりに TypeScript を使用できます。それはあなたが言及しているもののいくつかを提供します。ウェブサイトの引用:

タイプにより、JavaScript開発者は、JavaScriptアプリケーションの開発時に、静的チェックやコードリファクタリングなどの生産性の高い開発ツールや手法を使用できます。

そして、これはJSのスーパーセットにすぎません。つまり、既存のコードの一部はTSで問題なく機能します。

TypeScriptは、今日何百万ものJavaScript開発者が知っているのと同じ構文とセマンティクスから始まります。既存のJavaScriptコードを使用し、一般的なJavaScriptライブラリを組み込み、JavaScriptからTypeScriptコードを呼び出します。

37
VinArrow

役立ついくつかのアプローチがあります。

単体テスト

可能な場合は単体テストを記述します。手動のテストに依存するか、または実際にバグを見つけることは、見当違いです。

フレームワークを使用

自分でロールしてバグが発生するリスクを冒すのではなく、可能な場合は確立されたフレームワークを使用してください。

CSS /高級言語を優先

機能をCSSまたはあなたが書いている高水準言語に譲ることができる場所。

リファクタリング

コードの量を減らすためにリファクタリングします。コードが少ないほど、問題が発生する場所が少なくなります。

再利用

可能な場合は既存のコードを再利用します。コードが完全に一致していなくても、何かを新しく作成するよりも、コピー、貼り付け、変更する方が良い場合があります。

IDEs

最近のIDEは通常、少なくとも一部のJavascriptをサポートしています。一部のテキストエディタはJavascriptにも対応しています。

19
Robbie Dee

まだ言及されていない1つのtoolは、シンプルで、ファイルローカルまたはプロジェクト全体テキスト検索です。

簡単に聞こえますが、正規表現を含めると、基本的なフィルタリングから高度なフィルタリングまで実行できます。ドキュメントまたはソースコードにある単語を検索します。

これは私にとって(静的アナライザー以外に)効果的なツールであり、プロジェクトのサイズが2k LOCであることを考えると、私の意見ではそれほど大きくないので、うまくいくと思います。

2
mucaho

私は現在、大規模なAngularJSプロジェクトで数千行のコードをリファクタリングしています。最大の手間の1つは、特定の関数の正確なコントラクトを理解することです。生のAPI応答の要素が、変更前に6層のコードを通過する変数に割り当てられ、変更されてさらに6層のコードを介して返されたため、APIドキュメントを時々読んでしまいました。

私の最初のアドバイスは契約による設計です。特定の入力を取り、特定の出力を生成し、副作用を回避し、TypeScriptまたは少なくともJSDocを使用してそれらの期待を文書化します。

2つ目のアドバイスは、できるだけ多くのチェックを実装することです。 AirBnB標準に従い、コードベース全体でeslintを使用します。コミットフックは、常に標準に従っていることを確認します。当然のことながら、一連の単体テストと受け入れテストがあり、すべてのコミットはピアがレビューする必要があります。

テキストエディター(Sublime Text)から適切なIDE(WebStorm)に切り替えることにより、一般的なコードの操作もはるかに簡単になりました。WebStormは、JSDocを使用して、予想されるパラメータータイプに関するヒントを提供し、間違った型を指定したり、戻り値を間違った方法で使用したりすると、エラーになります。

JavaScriptでは、シンボルやゲッター/セッターなどの新機能により、変数の割り当てにアサーションを追加することで、特定のレベルの品質を実現できます(たとえば、整数が範囲内にあること、またはデータオブジェクトに特定の属性があることを確認してください)。

残念ながら、動的な言語の間違いを防ぐ真の解決策はないと思います。頻度を減らすのに役立つ一連の対策だけです。

1

「2000 LOCでJavaScript(またはその他の動的言語)プロジェクトにどのようにアプローチしますか?」という質問への私の回答

私はPDFフォームアプリケーションを開発しています。ペトリのネット要素と注釈を使用して、JavaScriptソフトウェア開発プロジェクトに(ソースコードのサイズに関係なく)アプローチします。このメソッドは、特定のプログラミング言語テクノロジに関連付けられていません。したがって、他の「プログラミング言語」に使用できます。

アプリケーションロジックの図を作成します。図を整理しておくために、ほとんどの注釈を図で使用するフォームに追加します。フォームのエントリには、プロパティまたは関数への参照が含まれています。次に、図の情報とフォームのエントリに基づいてソースコードを記述します。記述されたすべてのソースコードは、ダイアグラムおよびフォームのエントリから直接マッピングされるため、この方法は体系的です。また、コードを作成するときは、命名規則とコーディング規則に従っているため、ソースコードを簡単に確認できます。

たとえば、すべての関数がプロトタイプであるという規則を選択しました。パフォーマンスが問題になる場合は、コンストラクターで関数を宣言することで改善できます。一部のプロパティでは配列を使用します。この場合も、パフォーマンスが問題になる場合は、直接参照を使用して改善できます。

Evalも使用します。これにより、ソースコードのサイズを大幅に削減できます。パフォーマンスの問題のため、アプリケーションの最初または初期化部分でevalを使用しています。 「ランタイムロジック」では決して使用しません。これは、私が従うもう1つのコーディング規約です。