ドル記号ブルース:JavascriptとPHP


18

私はすべてが安全で美しいC ++とJavaのプログラミングで育ちました。コンパイラは、私が迷ったかどうかをチェックしてくれました。もちろん、誰もが大学で少しPerlをしましたが、私は吸い込みませんでした。最近の子供たちは、バックエンドのPHPとフロントのJavascriptがすべてです。ヒップになろうとするとき、私は同じことをします(Web開発の場合)。私が遭遇し続ける問題は、誤ってJavascriptの通常の変数の前にドル記号($)を追加することです。もちろん、jQueryオブジェクトによく使用される正当な構文なので、誰も何も言いません。

このドル記号の混乱をキャッチするためのデバッグツールや開発のトリックはありますか?あなたはしばしば同じ間違いを犯しますか?また、感情的にどのように対処しますか?Chrome開発ツールでは、これがJavascriptエラーであるとは限りません。私はPhpStormとEmacsを開発に使用していますが、それらは私の愚かさをキャッチしません。

この質問がばかげていると思うなら、あなたは正しいと思う。しかし、私たちは、変数の前にドル記号がある世界に住んでいます。そのような世界では、ばかげたことは何もありません。


2
感情的に?あなたの同僚に暴れましょう。
クリスシッフハウアー

@ChrisSchiffhauer残念ながら、完全かつ完全な隔離がゲームの名前である学界で働いています。私は同僚との会議を長続きさせるためにスケジュールする必要があり、それはすべての自発性を奪います。
アランチューリング

回答:


11

$変数で使用しても何も問題はありません。すべての変数に対して意図的にそれを行うわけではありませんが、それでも有効な構文です。jQueryは$、変数名として使用される例の1つです。また、そもそも「Chrome開発ツールでは常にこれがJavascriptエラーであるとは限らない」という理由もあります。これは、そもそもエラーがないためです。

次のようなコードを書くのが怖い場合:

var demo = function demo() {
    var a = 123;
    ...
    $a = 456; // A new variable is created in global scope.
}

次に、jsLintjsHint、またはGoogle Closure Linterのようなスタイルチェッカーを使用する必要があります。それらのどれですか?選択するのはあなた次第です。これを支援するために、いくつかの注意事項があります。

スタイル

Google Closure Linterは、巧妙に行われていることが知られているGoogle JavaScript Style Guideに従っています。JavaScriptまたは6つの言語のいずれかでよく知られているスタイルを使用することをお勧めします。コードを共有したり、新しい開発者を採用したりするとき、おそらくこのスタイルに慣れている可能性があります。

多くの開発者は、ダグラスクロックフォードスタイルにも精通しています。このスタイルは、JavaScript:The Good Partsで詳しく説明されています。これは、JavaScriptを扱う人なら誰でも買う価値のある本です。

jsHintに関しては、どの規則が使用されているのかを実際に見つけることができず、Webサイト自体はその主題について話すことを避けているようです。たぶん私は何かを見逃した。

IDEによるサポート

jsLintとjsHint 両方ともPhpStormでサポートされています。これはまた、ケース Googleの閉鎖リンターの。

環境

Google Closure Linterは一連のツールの 1つです。既にGoogle Closure CompilerまたはGoogle Closure Libraryを使用している場合は、他のツールよりもClosure Linterを選択することをお勧めします。

厳格さ

jsLintは厳密であることが知られています。jsHintはより寛容であり、常に良いことではありません。たとえば、jsLintでjsLintをフォークする理由の1つは、jsLintではエラーを生成するがjsHintではエラーを生成する不良コードを示す記事で説明されいます。

/*global jQuery */

// Example taken from jQuery 1.4.2 source
jQuery.extend({
    /* ... */

    isEmptyObject: function( obj ) {
        for ( var name in obj ) {
            return false;
        }
        return true;
    }

    /* ... */
});

JavaScriptにはブロックスコープがあるように見えますが、そうではないため、コードは悪いです。JavaScript:The Good Parts、p。を参照してください。102、付録A:ひどい部品、範囲。言い換えると、言語を知らずにコードを見るとname、ループの外側では見えないが、見えるままであることが期待されます。

Google Closure Linterについては、jsLintとjsHintの中間にあると思いますが、それをサポートするのに十分な情報がありません。

結論

私はjsHintを避けます。それは許容範囲が広すぎるため、他のリンターが検出する可能性のあるバグを見つけられないことを意味します。使用されるスタイルガイドを見つけるのは困難です。

jsLintとGoogle Closure Linterでは、選択は明らかではありません。どちらも専門家によって書かれており、どちらもすでに数千人の開発者が従っている厳密でよく説明されたスタイルガイドに従っています。両方をしばらく使用してから、より実用的な方を選択してください。


+1:打ち負かされた。言語をF#からC#に切り替えたときにセミコロンを削除し始めたので、あなたの痛みを共有できます;)
scrwtp

2
OPはPhpStormを使用しているため、ご注意ください。JSLintとJSHintの両方が統合されており、オンデマンドまたはオンザフライでコードを検査するように設定できます。例にあるようなエラーは簡単にキャッチできます。
ヤニス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.