2016-04-19 8 views
6

私は、関数のグループをインデントのこの習慣は次のように呼び出しを持っている:インデントグループ変数関数呼び出しコード規則

List <Dog> dogs = new ArrayList<>(); 
    dogs.add(new Dog(1)); 
    dogs.add(new Dog(2)); 
    dogs.add(new Dog(3)); 
    dogs.add(new Dog(4)); 
    dogs.add(new Dog(5)); 
System.out.println("list of dogs: " + dogs); 
Cat cat1 = new Cat(1); 
    cat.meow(); 
    cat.startsRunningFrom(dogs); 
Dog d1 = dogs.get(1); 
d1.catches(cat1); 

コード規則でこれらの本当に悪い習慣はあります、またはこれらは本当に話をされていません約?なぜなら、特定の変数/クラスからの関数呼び出しにそのような字下げを推奨するコード規則を見つけることを試みたからです。

私にとって

、上記コードがない場合よりもはるかに可読である:私用

List<Dog> dogs = new ArrayList<>(); 
dogs.add(new Dog(1)); 
dogs.add(new Dog(2)); 
dogs.add(new Dog(3)); 
dogs.add(new Dog(4)); 
dogs.add(new Dog(5)); 
System.out.println("list of dogs: " + dogs); 
Cat cat1 = new Cat(1); 
cat.meow(); 
cat.startsRunningFrom(dogs); 
Dog d1 = dogs.get(1); 
d1.catches(cat1); 

くぼみが可変で次の緊密に関連する動作と、変数宣言および他の機能の動作から明らかな分離を提供します。

誰がこのすべての悪い習慣である理由、またはそれが一般的に提供するコード(リスト・オペレーションの外)の許容外だ場合についてコメントすることができます。

答えて

2

これらは本当にコード規約で悪い習慣ですか、それとも実際には話されていませんか?

まあ、それが依存して!あなたがオープンソースで作業しているなら、ガイドラインに忠実に従わなければなりません。あなたの同輩がそれでうまくいない限り、悪い/良いのようなものはありません。

私のチームのすべての人々は、コードフォーマッターを使用し、コメントとホワイトスペースなどのための事前定義されたルールを設定しています。同じルールに従うことで、コードをメインリポジトリに再度マージします。

他の事をすることを、私はそうブロックの開始と終了を想定してのコードスニペット以下のトリックを私に一般的に受け入れられた慣習を見てのに慣れています。

List<Dog> dogs = new ArrayList<>(); 
----> dogs.add(new Dog(1)); 
     dogs.add(new Dog(2)); 
     dogs.add(new Dog(3)); 
     dogs.add(new Dog(4)); 
     dogs.add(new Dog(5)); <---- 
System.out.println("list of dogs: " + dogs); 

あり、このような規則を使用しても害はありませんが、私が先に言ったように、それはあなたが作業している環境で、あなたのピアによって受け入れられるべきです。

+0

私はそれが主に意見に基づく質問であることに同意しますが、ほとんどすべての回避けなければならない悪い習慣であるかどうかは不思議に思っていました。コードブロック内にあるように見えるかもしれないあなたのコメントは、実際に非効率的であるかエラーにつながる可能性があるかどうか、私が探していたものでした。 私の字下げが仮想コードブロックであると思っています。だから私は本当に間違っていることはないと思う。ありがとうございました – samiunn

2

私はあなたの思考を感謝し、私はあなたがやっていることについて、本質的に何も悪いがないと思います。しかし、実際には、複数の開発者が同じコードで作業する組織では、一貫したスタイルルールを持つことが重要です。正確なルールは、組織によって異なります。組織内ではチーム間で異なります(私が働いているチームが異なるスタイルを採用することもありますが、根本的に違いはありません)。しかし、インデント、スペーシング、新しい行を始める場所などに関しては、一貫したスタイルの利点は、通常は、より論理的な方法で行うことによって得られる利点よりも優れています。私はときどき私に課されたスタイルの選択が嫌いですが、このような問題では論争する価値はありません。しかし、チームにいる場合は、このような場合に自分のスタイルが優れていると説得することができます。しかし、あなたのやり方の欠点は、簡単なルールのセットをIDEにプログラムすることができ、チームのスタイルに合わせて自動的にスペースを配置できることです。この場合

あなたが一緒に行くのコードの特定のチャンクを示すためにインデントを使用しようとしている場合、私はあなたが自分自身のヘルパーメソッドにそれらを移動勧めでしょうか?それは私があなたがやろうとしていると思うことを達成するでしょう。

また、リストを持ち、いくつかの項目を追加している場合は、Google Guavaを調べる必要があります。Google Guavaには、引数の数が可変な呼び出しを使用してリストを設定する方法がいくつかあります(のLists class

1

これは若干の意見ですが、チームの裁量ではありますが、私はあなたの押し込みが窪みよりも優れていることに同意します。 :

List<Dog> dogs = initializeDogs(); 
System.out.println("list of dogs: " + dogs); 
initializeCat(dogs); 
Dog d1 = dogs.get(1); 
d1.catches(cat1); 

次に、必要な作業を行うヘルパーメソッドを宣言します。

private ArrayList<Dog> initializeDogs() { 
ArrayList<Dog> dogs = new ArrayList<>(); 
dogs.add(new Dog(1)); 
dogs.add(new Dog(2)); 
dogs.add(new Dog(3)); 
dogs.add(new Dog(4)); 
dogs.add(new Dog(5)); 
return dogs; 
} 

private void initializeCat(List<Dog> dogs) { 
Cat cat1 = new Cat(1); 
cat.meow(); 
cat.startsRunningFrom(dogs); 
} 

ポイントは、ベストプラクティスを使用してメソッドをカプセル化する場合は、インデントの規則はおそらく必要ないことです。

関連する問題