2011-01-21 5 views
10

各言語にインデントのための独自の規則があることを認識している間、私は最近発見したものを悩ますことはできません。 PHPマニュアルからこのコードを検討してください:PHPとJavaScriptスイッチのインデント

switch ($i) { 
    case "apple": 
     echo "i is apple"; 
     break; 
    case "bar": 
     echo "i is bar"; 
     break; 
    case "cake": 
     echo "i is cake"; 
     break; 
} 

それぞれのcaseはswitch文からインデントされています。これは、コードが読みやすく、ブロック本体がその内部に1レベル含まれているため、意味があります。私はJSLintで同等のJavaScriptのswitchステートメントをテストするとき

しかし、:

switch (i) { 
    case "apple": 
     alert("i is apple"); 
     break; 
    case "bar": 
     alert("i is bar"); 
     break; 
    case "cake": 
     alert("i is cake"); 
     break; 
} 

...それはそれは、代わりにこのように表示されなければならないことを私に告げるエラーが表示されます。

switch (i) { 
case "apple": 
    alert("i is apple"); 
    break; 
case "bar": 
    alert("i is bar"); 
    break; 
case "cake": 
    alert("i is cake"); 
    break; 
} 

に思えますそれぞれのケースがスイッチブロック自体とインラインになっているので、直観に反する。私はこれがより良いと考えられる理由を想像することはできません。

JSLintはerrであるか、それとも規則に従っていますか?後者が真実ならば、なぜ慣習は明瞭さのためにインデントしないのですか?

+8

JSLintは実際にこの種のものについて不平を言いますか? * -dies- * – BoltClock

+0

JS&PHPはPythonではありません。好きなインデントを使用してください。 – Shikiryu

+8

[( "" apple "、" bar "、" cake "] indexOf(i)!= -1)alert(" i "は+" i ");';) – Gumbo

答えて

6

あなたのコードです。それをどのようにフォーマットするか。 jsLintを使用しますが、その推奨事項がコードを改善することに同意しない場合は、実装しないでください。 jsLintはあなたの気持ちを傷つけます。

+2

正確です。 Crockfordは厳格な空白の警告やエラーがないようにチェック/チェックを外すことができるチェックボックスがあると確信していますが、ルールを遵守しなければならないJS神ではありません。 –

+2

私もこれに同意しますが、この場合、私の気持ちは迷惑ではありません。私は決してこれを "エラー"とはみなしません。また、どのオプションもそれを抑制していないようです。これが問題である理由は、ツールが潜在的な問題(これは1つではない)の多くを発見し、誤っていない「エラー」を持つことで有効なものを見ることが困難になるからです。 – claviska

2

あなたのインデントを論理的に正当化できる限り、あなたが好むスタイルをインデントする必要があります。 JSLintがこれについて本当に不平を言うならば、それは過度にペダンティックである。

+0

私は同意します。 JSLintはすばらしいツールですが、字下げの優先度を考慮すると、特に結果のコードがあまり明確でない場合、「エラー」は少しばかり思えます。 – claviska

+0

実際には素晴らしいツールではありません。それは、(エラーではなく、スタイルのみではない)ものについては、過度に賢明です。それでも、エラーの原因となるもの(つまり、特定のタイプのグローバルなリーク)は無視されます。 JSLintはヘビ油です。 –

0

JSの規約(JSLintでは規約を定義している)です。個人的には、PHPが間違っていると思います(このマニュアルが何らかの慣習に従うならば、私は標準ライブラリは理解できません)。私はあなたがいくつかのネストされたブロックにいる場合、それは本当に厄介になることができるので、JSスタイルを好む。例えば(PHPコード):

class Foo{ 
     function Bar($arr) { 
      foreach($arr as $item) { 
       switch ($item) { 
        case "foo": 
         // Do something 
         break; 
         // You get the idea 

最終的には、あなたの選択。私はスタイルガイドとしてPHPマニュアルを使用しません。言語ごとに異なるスタイルを使用できない場合は、明確に定義されたJSスタイルを使用してください。

+0

横のスペースが限られている場合は、タブを2つのスペースに設定するだけです。 – erjiang

+0

あなたが、私は共産主義だあなたはインデントの愚かなレベルを取得しようとしている場合(IS_ARRAY($のARRは)):) – GordonM

+0

@Gordonが私を撃つ場合、今 –

1

書式設定は重要ですが、結局は書式設定です。あなたの好きな方法でそれをしてください。あなたが選択する特定のスタイルは個人的な選択であり、多くのスタイルは「良い」ことができます。ただし、「良い」書式スタイルは一貫していなければなりません。好きなルールを選択してを貼り付けてください。

私は議論が{前のコードと同じ行に置かれるかどうか、またはelseのまわりで "かっこの中かっこ"を置くようなものに激怒するのは面白いです。私は共産主義者だけが{ifと同じ行に{ :)

+0

推測を忘れてしまった:Pここでも、問題は偽のエラーをトリガすることになるということです潜在的に有効なものを見ることは困難です。 – claviska

+0

は、限り、あなたは一貫共産党員だとして、あなたは私でOKです。説得力のない一貫性のないフォーマッタは、それだけでは冷たいものではありません。 –

+0

私にとっては十分に公正である:) – claviska

0

余分な空白は、解釈されたときにJavaScriptとPHPから解析されるため、あなたのコードを醜いものにすることができます。個人的に私は私がフォールスルーエラーを見逃さないように、私のswitch文に余分な中括弧を追加することを好む:最後の括弧のコードダウン

switch ($someVar) 
{ 
    case 'value': 
    { 
    //your code here 
    } break; 
    case 'something': 
    { 
    //more code here 
    } 
    case 'something else': 
    { 
    //some more code here 
    } break; 
    default: 
    { 
    //default code here 
    } break; 
} 

スキャンは、私が正しいbreak文を追加した場合、私がチェックすることができます。 'something'ケースにはbreak文がないことがわかります(多分、意図的に間違いかもしれません)。

このフォーマットにはいくつかの違いがありますが、それは実際に私が得ているものです。形式はそれほど重要ではありません。パーサはかなり寛容です。あなたのために働くものを探し、それに固執する。

4

クロフトフォードの本では、ブロックは新しい範囲を導入しないと述べています。 "JSLintは、関数、if、switch、while、for、do、tryステートメントなどのブロックを期待しています。また

その

if (condition){ 
    statements; 
} 

は、ブロックを行うための方法をお勧めします。それは「より弾力性がある」ためです。私はそれが誤ってそのように構成されていることを非常に疑っています。

0

彼のJavaの背景が漏れています。 JSLintの方法はofficial Java conventions for switch caseを模倣しています。あなたの最初の例が好きですが、私はJSLintの方法を許容することを学んでいます。

0

また、私は、これは非常に混乱した、とhttp://javascript.crockford.com/code.html

句ではJavaScriptプログラミング言語のためのダグラス・クロックフォードのコード表記規則では、この理由を見つけました(他の場合、キャッチ、デフォルト、最終的には)文ではありません のように字下げしないでください。