web-dev-qa-db-ja.com

静的言語に慣れていたプログラマは、JavaScriptツールの不足にどのように対処しますか

私のキャリアのほとんどは、ほとんどが専らコンパイルされた言語、特にJavaでプログラミングされています。 Javaについての私の好きな点の1つは、Eclipseのようなツールを使用する場合の生産性と、実際に記述する必要のあるコードの量です。

あなたはできる:

  • メソッドとクラスを簡単かつ自動的にリファクタリングする
  • メソッドが呼び出された場所、または定数が使用されているすべての場所を即座に表示する(Open Call Hierarchy/Show References)
  • 静的型付けとは、コード補完を使用して、オブジェクトで使用可能なすべてのパラメーター/関数を表示できることを意味します
  • 関数/メンバー/クラス名をコントロールクリックして、その定義に直接移動します

これらすべての機能により、IDEは私の親友です。Javaコードを記述し、特に他の人々のプログラムを理解することははるかに簡単になります。

しかし、Javascriptを使用するようにますます求められており、これまでの私の経験は非常に否定的です。

特に:

  • 関数のエントリポイントをすぐに見つける方法はありません(プレーンテキスト検索を除く。これにより、2つまたは3つを開始した場所を忘れた後に、呼び出し階層のさらに上のメソッドが検索される可能性があります)。

  • パラメータは関数に渡されますが、そのパラメータで使用できるプロパティと関数を知る方法はありません(実際にプログラムを実行し、関数が呼び出されたポイントに移動し、console.logsを使用してすべてのプロパティを出力する以外は利用可能)

  • コールバックとしての無名関数の一般的な使用法。これは、混乱を招くコードパスのスパゲッティにつながることが多く、すばやくナビゲートすることはできません。

  • そして確かに、JSLintは実行前にいくつかのエラーをキャッチしますが、それでも、ブラウザーのコードの下に赤い波線があるほど便利ではありません。

結局のところ、プログラム全体を常に頭の中に置く必要があるということです。これにより、複雑なプログラムを作成するための認知的負荷が大幅に増加します。そして、心配するこれらすべての余分なものは、実際の創造性と問題解決のために私の脳の余地を残します。

確かに、正式なクラス定義全体を記述するよりも、オブジェクトを一緒にスローする方が高速です。しかし、プログラムの方が少し簡単で速いかもしれませんが、私の経験では、プログラムの読み取りとデバッグははるかに困難です。

私の質問は、他のプログラマはこれらの問題にどのように対処するのですか? Javascriptの人気は明らかに高まっています。私が読んだブログは、これらの問題の解決策を必死に探すのではなく、生産性の高い人々がJavascriptを使っていることについて書いています。

GWTを使用すると、JavaScript環境のコードをJavaで代わりに記述できますが、私が期待するほど広く使用されているようには見えません。実際、複雑なプログラムにはJavaScriptを好むようです。

何が欠けていますか?

28
funkybro

IDEベースの機能は、JavaScriptなどの動的言語では利用できません*。あなたはそれらなしで行うことを学ぶ必要があります。ツールサポートをより良い設計に置き換える必要があります。

モジュールパターンを使用します-手で、または requirejs のようなツールを使用します。モジュールについては、簡単に推論できるように小さくしてください。

多くのタイプを定義しないでください-呼び出しポイントの近くに作成された匿名オブジェクトを使用します。次に、発信者と着信者を見て、何が起こっているかを知ることができます。

コードをDOMに結合しないようにしてください-コードで行うDOM操作の量を制限するようにしてください。セレクターまたはjQueryコレクションを渡すことができる場合は、コードにページ構造を認識させるのではなく、それを行ってください。

*人気のあるライブラリを使用している場合は、偽のオートコンプリートを取得できますが、「このオブジェクトが持つプロパティ」よりも「すべてのjqueryメソッドを表示」のようなものです。タイピングを節約できますが、正確性は保証されません。

22
Sean McMillan

私はこの質問に回答を追加したいと思います。最近、いくつかの良い、悪いがほとんど醜いJavaをたどってきたので、JavaおよびJava開発者vs. JSおよびJS開発者は、実際には漠然と有用な真実に似ているものに基づいている可能性があります。

IDEはありますが、それほど多くない理由を理解するのに役立ちます

私は自分がNodeの開発に夢中になっていることを実感し、実際にそれを購入したとしても悪くはありませんが、WSよりもSciteでjsファイルを開く傾向があります。その理由は、JSで多くのことを行うことで多くのことを行うことができるだけでなく、UIの作業により即座にフィードバックが提供されるため、ブラウザー開発ツール(特にChromeとFirebug)は実際には非常に優れており、(非ブラウザーコンテキストを考慮に入れる) )変更されたコードの再実行は、コンパイル手順がなくても速くて簡単です。

私がかなり確信しているもう1つのことは、基本的にJavaScriptでは余裕のないずさんなコードを有効にすることによってIDEが基本的に独自の要求を作成することです。 JSでの管理方法を学びたいですか? JavaなしでIDEで重要なものを書き始めることから始め、実際に実行するために始めて考えなければならないことに注意を払うことが役立つ場合があります。 IDEを先に進めなくても、そのコードを維持/変更できます。 IMO、IDEを使用しているかどうかに関係なく、これらと同じことが保守可能なコードを記述するために依然として重要です。 4年間のプログラミングカリキュラムを作成しなければならなかったとしても、最初の2年間は、ツールや依存関係を歪めないためにIDEに触れられないでしょう。

構造

複雑なアプリケーションを扱う経験豊富なJS開発者は、コードを構造化できます。実際、コードを読み取るためのIDEが欠けていた初期の歴史において、私たちがより良くしなければならないことの1つですが、強力に表現力のある言語は、完全に保守不可能な災害コードベースを、思慮深くコーディングしないと非常に迅速に強力に表現できるためです。

最近、Javaコードベースを理解するのにかなり急な学習曲線がありましたが、適切なOOPではないことにようやく気付きました。クラスは、Bean、DTO、または静的ゲッター/セッターに存在するグローバルに利用可能なデータを変更する、緩やかに関連するメソッドのバンドルにすぎません。基本的には、OOPが置き換えることになっていた古い獣と同じです。だから私は基本的にコードの見方や考えをやめました。私はショートカットキーを学び、混乱をたどっただけで、すべてがはるかにスムーズに進みました。したがって、まだ習慣に慣れていない場合は、OODについてもっと深く考えてください。

最高レベルで適切に構造化されたJSアプリは、複雑な関数(jQueryなど)と相互に対話するオブジェクトで構成される傾向があります。私は、適切に構造化され、保守が容易なあらゆる言語のアプリの特徴は、IDEとNotepad ++のどちらを使用していても、完全に判読できることです。これは、依存性注入と極端なテストファーストTDDに非常に批判的である主な理由の1つです。

そして最後に、クラスを手放します。プロトタイプの継承について学びます。実際に継承が必要な場合でも、非常にエレガントで簡単に実装できます。ただし、JSの方が合成アプローチの方がはるかにうまく機能する傾向にあり、1つまたは2つ以上のレベルの継承がどの言語でも行われているのを見ると、個人的に病気になり、EXTJSの夜間恐怖症に陥ります。

コア原則を最初に

私は、他のすべての優れた実践から派生する必要のある核となる要素について話しています。DRY、YAGNI、最小の驚きの原則、問題のあるドメインの明確な分離、インターフェースへの書き込み、人間が読めるコードの記述が私の個人的なコアです。これらの慣行の放棄を支持するもう少し複雑なものは、すべての言語でKool Aidと見なされます。特に、JavaScriptのような言語で、非常に混乱するコードのレガシーを次の人に残すのは非常に簡単です。たとえば、疎結合は、オブジェクト間の相互作用がどこで起こっているのかさえわからないほど遠くまでは、すばらしいものです。

動的タイピングを恐れるな

JavaScriptにはコアタイプはそれほど多くありません。ほとんどの場合、動的キャストルールは実用的で簡単ですが、不必要なキャストや無意味な検証ルーチンを使用せずにデータフローを管理する方法をよりよく学ぶことができるため、ルールを学習する価値があります。私を信じて。厳密な型は、パフォーマンスとコンパイル時の問題の発見に最適ですが、何からも保護されません。

JS関数とクロージャーからクラップを学ぶ

JSのファーストクラスの機能が、JSが「クライアント側Webに触れる価値のある唯一の言語」賞を受賞した主な理由であることは間違いありません。そして、はい、実際に競争がありました。これらはJSの中心的な機能でもあります。それらでオブジェクトを構築します。すべてが関数にスコープされています。そして、それらは便利な機能を備えています。 argumentsキーワードを介してparamsを調べることができます。他のオブジェクトのメソッドであるというコンテキストでそれらを一時的にアタッチして起動できます。また、イベント駆動型のアプローチを非常に簡単に実装できます。つまり、複雑さを軽減し、JS自体(ただし、ほとんどがDOM API)のさまざまな実装をソースで直接適応させることで、JSは絶対的な獣となりました。

採用前にパターン/プラクティスを再評価する

ファーストクラスの関数と動的な型は、JSの多くの複雑なデザインパターンを完全に無意味で扱いにくいものにします。ただし、いくつかの単純なパターンは非常に有用であり、JSの非常に柔軟な性質を考えると実装が簡単です。アダプターとデコレーターは特に便利であり、構築したui要素のイベントマネージャーとしても機能する複雑なuiウィジェットファクトリに役立つシングルトンを見つけました。

言語の先導者に従い、少ないことでより多くのことを行う

Javaの本音の1つが、冗長性が実際にはすべての関係者にとってコードを理解しやすくする肯定的な機能であるという議論をどこかで行っていると思います。ホグウォッシュ。それが本当なら、リーガルの方が読みやすいでしょう。彼らが書いたものを理解しやすくすることができるのは作家だけであり、あなたは他の男の靴に身を置くことによってのみそれを行うことができます。したがって、これら2つのルールを採用してください。 1.できる限り直接的かつ明確に。 2.いまいましいポイントに到達します。勝利は、クリーンで簡潔なコードは、トリガーから実際の目的のアクションに到達するために25のレイヤーをトラバースする必要があるものよりも、理解および保守がはるかに容易であることです。より厳密な言語でこの種のことを主張するほとんどのパターンは、実際にはJavaScriptにはない制限の回避策です。

すべて順応性があり、それで問題ありません

JSは、おそらく最も一般的に使用されている保護主義言語の1つです。それを受け入れる。正常に動作します。たとえば、コンストラクター関数で通常の変数を宣言するだけで、アクセスできない永続的な「プライベート」変数を持つオブジェクトを書き込むことができます。私はこれを頻繁に行っています。しかし、それは私のコードやコードのユーザーを「自分自身から」保護することではありません(とにかく、実行時にコードを自分のバージョンに置き換えるだけです)。しかし、それは意図を合図することです。なぜなら、他の男は依存関係を壊したくないほど有能であり、おそらく正当な理由で直接それに取り組むつもりはないことがわかるからです。

サイズ制限はなく、問題のあるドメインのみ

私が見たすべてのJavaコードベースで私が抱えている最大の問題は、クラスファイルが多すぎることです。まず最初にSOLIDは、OOPについてすでに知っておくべきことを混乱させる繰り返しです。クラスは、特定の関連する一連の問題を処理する必要があります。 1つの方法で1つの問題ではありません。これは、ブートするためのすべての無意味なクラス構文を追加しただけで、古くなった古いfunc-spaghetti Cコードを使用しているだけです。サイズやメソッドの制限はありません。すでに長い関数、クラス、またはコンストラクターに何かを追加することが理にかなっている場合、それは理にかなっています。 jQueryを取り上げます。これは、単一の関数内のライブラリ全体の長さのツールセットであり、何も問題はありません。まだjQueryが必要かどうかは合理的な議論ですが、設計の点では、クロージャの巧妙な使用によるJQのメモリ使用量/パフォーマンスへの影響を最小限に抑えるためにJQがどのように設計されているかを理解することで、効果的なJavaScriptを作成する方法について多くのことを学ぶことができます。プロトタイププロパティ。

Javaがあなたの知っているすべてである場合、非Cベースの構文で何かに手を出す

Djangoについて聞いていたことが好きだったのでPythonをいじり始めたとき、構文を言語設計から分離することから始めました。その結果、JavaとCは、同じ構文で異なって行うことの合計ではなく、言語設計部分の合計として理解しやすくなりました。いい副作用は、デザインの面で他の言語を理解すればするほど、対照的に最もよく知っている言語の長所/短所をよりよく理解できることです。

結論

それでは、すべてを考慮して、すべての問題点にぶつかってみましょう。

  • 関数のエントリポイントをすぐに見つける方法はありません(プレーンテキスト検索以外の方法で、2つまたは3つ後の呼び出し階層でさらに上位のメソッドが検索される可能性があります)開始した場所を忘れた)

ChromeとFirebugには、実際にはコールトレースがあります。しかし、構造と物事を簡潔かつ直接的に保つことに関する私のポイントも参照してください。アプリを、相互に作用するカプセル化されたより大きな構造と考えることができるほど、問題が発生したときに誰が障害を犯しているかを簡単に把握できます。これはJavaにも当てはまります。従来のOOPの問題に完全に対応できるクラスのような関数コンストラクターがあります。

__コード__

私のコードでは、オブジェクトリテラルfunction ObjectConstructor(){ //No need for an init method. //Just pass in params and do stuff inside for instantiation behavior var privateAndPersistent = true; //I like to take advantage of function hoisting for a Nice concise interface listing this.publicAndPointlessEncapsulationMurderingGetterSetter = publicAndPointlessEncapsulationMurderingGetterSetter; //Seriously though Java/C# folks, stop with the pointless getter/setters already function publicAndPointlessEncapsulationMurderingGetterSetter(arg){ if(arg === undefined){ return privateAndPersistent; } privateAndPersistent = arg; } } ObjectConstructor.staticLikeNonInstanceProperty = true; var instance = new ObjectConstructor();//Convention is to capitalize constructors を内部(プライベート)変数に含めることができず、データ構造として使用するために予約することを好むため、オブジェクトリテラル{}をほとんど使用しません。これは、意図の明確さを維持する期待を設定するのに役立ちます。 (カーリーが表示されている場合、それはデータであり、アプリアーキテクチャのコンポーネントではありません)。

  • パラメータは関数に渡されますが、そのパラメータで使用できるプロパティと関数を知る方法はありません(実際にプログラムを実行して、関数が呼び出されたポイントに移動する以外、利用可能なすべてのプロパティを出力するためにconsole.logsを使用します)

ここでも、最新のブラウザツールをご覧ください。しかし、また、プログラムを再度実行するのはなぜそんなにつまらないのでしょうか?リロードは、クライアント側のWeb開発者が数分ごとに実行するものです。それを実行するためのコストはまったくかかりません。これもまた、アプリの構造が役立つもう1つのポイントですが、コントラクトを適用することが重要な場合に独自の検証を実行する必要があるという点が、JSの欠点の1つです(コードベースが他のものに公開されているエンドポイントでのみ行うこと)制御しない)。 IMO、トレードオフはメリットの価値があります。

  • 匿名関数のコールバックとしての一般的な使用法は、混乱を招くコードパスのスパゲッティに頻繁につながり、すばやくナビゲートすることができません。

ええ、それは些細なことでは何でも悪いです。しないでください。子供の名前を挙げてください。物事を追跡するのも簡単です。簡単な自明な関数を定義し、評価して(割り当てる必要があります)、割り当てることができます。

doSomethingWithCallback( (function callBack(){}) );

これで、Chromeに、通話をトレースするときに名前が付けられます。自明ではないfuncの場合は、呼び出しの外で定義します。また、変数に割り当てられた匿名関数は匿名のままです。

  • そして確かに、JSLintは実行前にいくつかのエラーをキャッチしますが、それでもブラウザーのコードの下に直接赤い波線があるほど便利ではありません。

私はものに触れないでください。 Crockfordはコミュニティに良いことをいくつか与えましたが、JSLintはスタイルを優先し、JavaScriptの特定の要素は特に理由もなく悪い部分であることを示唆しています(IMO)。 *または+が後に続くregExおよび否定クラスについての1つのことは絶対に無視してください。ワイルドカードはパフォーマンスが低下し、{}を使用して繰り返しを簡単に制限できます。また、関数コンストラクターについて彼が言うことはすべて無視してください。新しいキーワードが気になる場合は、工場の機能で簡単にラップできます。 CSSLint(Crockfordのものではない)は、悪いアドバイスの面でさらに悪い。塩の粒でスピーキングを頻繁に行う人を常に連れて行ってください。時々、彼らが権威を確立したり、新しい素材を生み出したりしているだけだと私は誓います。

そして繰り返しますが、あなたはあなたが持っているこのランタイムの懸念であなたが学んだことを学ばなければなりません。 (それは私が多くのJava/C#開発者で見た一般的なものです)実行時にエラーが表示されるのが2年後も気になる場合は、座ってブラウザがシンクするまでスパムをリロードしてください。コンパイル時/実行時の違いはありません(とにかく目に見えるものではありません-JSは現在JITで実行されています)。実行時にバグを発見するだけでなく、スパムのリロードを安く簡単に行って、すべての停止ポイントでバグを発見することは非常に有益です。

そして、それらのChrome開発ツールに慣れてください。それらは直接webkitに組み込まれています。 Chromeで右クリックします。要素を検査します。タブを探索します。実行時にコンソールのコードを変更する機能を備えた十分なデバッグ能力は、最も強力ですがあまり明白ではないオプションの1つです。テストにも最適です。

関連するノートでは、エラーはあなたの友達です。空のcatchステートメントを記述しないでください。 JSでは、エラーを隠したり埋めたりしません(または、少なくともcoughYUI/ cough)。私たちはそれらに出席します。これより少ないと、デバッグに苦労します。また、catchステートメントを作成して、本番環境で発生する可能性のあるエラーを非表示にして、少なくとも黙ってエラーを記録し、ログへのアクセス方法を文書化します。

24
Erik Reppen

あなたが言っていることは、JavaScriptを見るJava気のある人の一般的な不満です。

最初にあなたの質問に答えましょう...

...私の質問は、他のプログラマがこれらの問題にどのように対処するかです...

回答:彼らはしません。彼らは最初にJavaカルトを放棄することでJavaScriptの哲学を学びます。

この前提を理解する必要があります... JavaScriptはJavaではありません。構文についてだけではありません-それは哲学。

では、いくつか取り上げてみましょう...

  • メソッドが呼び出された場所、または定数が使用されているすべての場所を即座に表示する(Open Call Hierarchy/Show References)

    関数/メンバー/クラス名をコントロールクリックして、その定義に直接移動します

    これらはすべて利用可能です-適切なIDEを選択してください。

  • 静的型付けとは、コード補完を使用して、オブジェクトで使用可能なすべてのパラメーター/関数を表示できることを意味します

    これはあなたが対処する問題ではありません。これは、プログラミングでOutlookを変更する必要があるものです。緩やかな型システムは、JavaScriptの長所の1つです。緩いタイピングを理解し、それを理解することを学びます。さらに、コード補完はJSで非常にうまく機能します。

  • そして確かに、JSLintは実行前にいくつかのエラーをキャッチしますが、それでも、ブラウザーのコードの下に赤い波線があるほど便利ではありません。

    Firebug、Chrome/Safariコンソール、さらにはIDEでも、それ以上のことをすべて実行できます。

    Javaプログラマーが慣れている)洗練された静的分析を実行できるJSHintがあります。

  • 結局のところ、プログラム全体を常に頭の中に置く必要があるということです。これにより、複雑なプログラムを作成するための認知的負荷が大幅に増加します。

    違う!それどころか、JavaScriptは「軽量」のプログラミング言語であり、プログラムをよりシンプルにすることをお勧めします。 Doug Crockfordが言うように... JavaScriptで大量のモデルベースのプログラムを記述しようとすると、「罰せられます。

  • プログラムの方が少し簡単で速いかもしれませんが、私の経験では、プログラムの読み取りとデバッグははるかに困難です。

    まったく間違っている!プログラミング言語に基づいて読みやすさをどのように決定しますか?プログラムは読み取り可能(または不可能)です-言語ではありません。さらに、JavaScriptには素晴らしいデバッガがあります。

私が少し失礼に聞こえた場合はご容赦ください-しかし、真実はあなたがchange your Java傾向。

「成熟した」Java=プログラマーのみがJavaScriptを高く評価することができます-そして、あなたが高く評価していないものを習得することはできません。

5
treecoder

一般的に、動的言語について言及したツールを用意することは困難です(IDEがランタイムの一部でない限り-つまり、Smalltalkは除きます)。エディター、ほとんどのIDEはそれほど魅力的に見えません-それは少なくとも私の経験です。

3

以前はJavaScript(およびその動的型付け)が嫌いでしたが、オブジェクト指向 closures および function programming を高く評価するようになりました。また、その グローバルオブジェクトサイレントタイプ変換 の削除は、最初に見つけたときの新鮮な空気の息吹でした。

JQueryのインテリテキストを機能させるのは簡単です(無料ではないので) webstorm

また、私はその成長とは言いません-そのユビキタスはすでに。

あなたの特定のポイント:

関数のエントリポイントをすぐに見つける方法はありません

これは理解できません。どうすればもっと簡単にできるでしょうか。

パラメータは関数に渡されますが、そのパラメータで使用できるプロパティと関数を知る方法はありません。

オブジェクト定義を含めるようにIDEを設定した場合、オブジェクトのプロパティはインテリテキストを介して利用できます(ただし、ここでポイントを逃した可能性があります)。

コールバックとしての無名関数の一般的な使用法。これは、混乱を招くコードパスのスパゲッティにつながることが多く、すばやくナビゲートすることはできません。

一般的な使用法?無名関数が気に入らない場合は、使用しないでください。それとも、それらを実質的に使用するjQueryを参照していますか? jQueryはおそらくWeb開発の歴史の中で唯一の最大の時間節約機能として、ほとんどのWeb開発者によって認識されています。

JSLintは実行前にいくつかのエラーをキャッチします

それはそれらすべてをキャッチし、あなたはそれをあなたの ide に含めることができます。または、Webstormにはデフォルトで含まれています(私は思います)。

2
NimChimpsky

それは、型付けの悪い言語を使用するために支払う代償です。なぜこの嫌悪感がそれほど人気になったのか不思議に思うだけです。欠点は、型の不適切な言語の利点をはるかに上回ります。

おそらく、私たちは Non-cooperation-principle をこのジャンクに適用して、それを解消する必要があります。

2
ThomasX

何が欠けていますか?

JavascriptがJavaよりも優れている2つの大きな利点を見逃しています。

  • JavaScriptコードは、同等のサイズの約1/4ですJavaコード。
  • コンパイルとサーバーの再起動を待つ必要はありません。

JavaScriptでの動作は異なります。少しずつコードを追加します。テストできる範囲で、ブラウザを更新してテストします。 jQueryを使用すると、ほとんどの場合、JavaScriptの数行で十分です。

私はJavaプログラミングは比較的非生産的)であることを発見しましたであり、同じ2つの理由から、すべてのサーバー側コードをGroovyで作成しています。

2
kevin cline

私はこの質問が古いことを知っていますが、同じ感情を持っていたが、過去10年間多くのJavaScriptを実行したC++/C#プログラマーとして、最初の推奨事項は Visual Studio Code を試すことです。

もちろん、強く型付けされた言語で追加できるすべての機能を提供できるわけではありませんが、かなり近づいています。

TypeScriptから型情報を取得してJavaScriptに適用することもできます。 TypeScriptを使用したことがない場合でも、JavaScriptで入力すると、コード補完や大量のAPIに関するドキュメントを入手できます。

だからあなたの質問に

  • 関数のエントリポイントをすぐに見つける方法はありません(プレーンテキスト検索を除く。これにより、2つまたは3つを開始した場所を忘れた後に、呼び出し階層のさらに上のメソッドが検索される可能性があります)。

主にVSCodeで解決されているようです?

  • パラメータは関数に渡されますが、そのパラメータで使用できるプロパティと関数を知る方法はありません。

これは、JSDocスタイルのコメントまたはTypeScriptを使用してコードを文書化することにより、多くのIDEで解決されています。編集者はコメントを読み、あなたが慣れているのと同じ補完をあなたに与えます

コールバックとしての無名関数の一般的な使用法。これは、混乱を招くコードパスのスパゲッティにつながることが多く、すばやくナビゲートすることはできません。

C#プログラマーとして、匿名関数も一般的で、C++に追加されています。これは慣れる必要があることだと思います。

また、コールバックは主にpromiseとasync/awaitに置き換えられていますが、コールバックを使用するAPIがある場合は、すぐにラップしてpromiseを使用し、async/awaitを使用して問題を解消できます。

そして確かに、JSLintは実行前にいくつかのエラーをキャッチしますが、それでも、ブラウザーのコードの下に赤い波線があるほど便利ではありません。

Visual Studio Codeで波線が表示されます。それだけでなく、ESLint統合をオンにすると、大量の驚くべき警告やエラーがエディターで強調表示されます。他の言語で実際に見た以上です。私の経験では、C/C#/ Javaのリンターはかなりハードコーディングされています。ESLintは大規模な構成と拡張が可能であり、一般的なライブラリを統合して、エディターでの特定のライブラリの使用に関するアドバイスや警告を提供することもできます。私が他の言語で個人的に見たことのないもの(おそらく、今では他の言語でも一般的ですか?)

それも2018年であり、ES7が新しい基準となっているため、classを入手できます。常に厳密モードを使用します。あなたはvarを決して使用せず、常にconstletを使用します。C++/C#/ Javaプログラマーが、消えるのに慣れるのに苦労したことの束。オンにします - no-undef ESLintのルールとさらに多くの問題が消える

つまり、C++/C#/ Javaとは異なるため、thisが実際にどのように機能し、関数とメソッドが実際にどのように機能するかを学びます。

JavaScriptの私の最初の2〜3年は私が不満を感じていた。ある時点でそれはカチッと音を立てました。私はそれをC++/C#/ Javaに強制しようとするのをやめ、JavaScriptで15行かかるようなものが他の言語で150行かかると、今度はイライラします。

0
gman