Javaで「良いスタイル」を作る理由は何ですか?[閉まっている]


9

私はStackoverflowでこの質問をしましたが、それがブーイングする前に、PéterTörökから投稿するのにこれがより良い場所であるかもしれないという有益な提案を受けました。

数年前からJavaでプログラミングしています。私は、「良いスタイル」を構成する要素に基づいて、同僚と設計上の決定についてよく話し合いました。実際、何かが「良いスタイル」であるかどうかに基づいてデザインを検討するStackOverflowの質問/回答がいくつかあります。

しかし、「良いスタイル」を作るものは何ですか?多くのことと同様に、私はそれを見るとそれを知っています...しかし、このデザインは正しくないと感じているという私の良心よりも良い考えを知りたかったのです。

適切に設計された優れたコードを作成するために、あなたは何を考えていますか?

(これはやや主観的なものであることを認めます。「良いスタイル」とは、目前のタスクに依存するためです)。(また、「4ではなく2スペースのインデントを使用する」など、チームスタイルには興味がないことも付け加えておきます。Javaコードの規則には興味がありません。)

編集:これまでのすべての良い答え/コメントをありがとう。私は特に、プログラマーの良心(そして場合によってはお腹も)のレンチを成し遂げることを成文化するのに役立つ答えを求めていますか?


ここにリストされている他の多くのものの中で、私は間違いなく、コンピュータはあなたが書くほとんどすべての方法でコードをコンパイルできることをはっきりと述べますが、最終的にはコードは人間が読める必要があります。クレイジーなコメント!私が使用したい良いテスト:誰かが私のコメントだけを読ん、コードが何をするか、それが入力と出力であること、そしてそれを行うために使用するアルゴリズムを知ることができるでしょうか?
ブライアン

1
@brian、コードに方法を説明させてください 。理由を説明するために実際のコメントを残してください。言い換えれば、(一般的なケースでは)クレイジーなコメントをしないでください

4
ブライアン:そのテクニックは間違いなく良い習慣とは見なされていません。一般的な良い方法は、コードをできるだけ自己文書化すること(明確な変数名と関数のまとまり)を目指し、コメントを「方法」ではなく「理由」を説明することです。細部をすべて説明するコメントは、コードよりもコメントを維持する可能性が低いため、一般に注意散漫であり、危険であると見なされます。
Casey Patton、

1
@ブライアン:あなたの最後のステートメントはそれをすべて言います。コードは読めるはずです。コメントが古くなります。コードは決してしません。コメントの必要性を感じた場合は、コードが明確になるまでリファクタリングして、コメントがコードの内容を繰り返すだけになるようにします。唯一の優れたコメントは、コードが特定の方法で機能する理由(サードパーティのライブラリのバグを回避するなど)を示しているため、誰かが戻って理由のために機能しないものに変更することはありませんそれはすぐにはわかりません。
ライアンスチュワート

2
私は公式に謙虚にされてきました。すみません、@ amaidment。コメントに関しては、良いコーディング標準を研究する必要があると思います。
ブライアン

回答:


17

いくつかの簡単なポイント:


3
+1。おそらく最も重要なのは、重複するコードを最小限に抑えることです。いくつかのトークンをカットアンドペーストしたい場合は、関数を抽出する必要があります。関数が1行のコードであっても。
ケビンクライン

4
重複したコードについては、以下のスタンスをとります。カットアンドペースト=大丈夫です。これはコードを移動するだけです(一度貼り付けを使用するとします)。コピーアンドペースト=恐ろしい。語彙からコピーボタンを削除するだけで、正しいことを行う可能性が高くなります。
jsternberg '08 / 08/22

@jsternberg:切り取り/コピーを区別するための+1ですが、多くの人が「切り取り/貼り付け」を意味するときに「切り取り/貼り付け」と言うことに気づきます。どのように区別が失われたのかわかりません。
ライアンスチュワート

5
繰り返してはいけません。繰り返してはいけません。繰り返してはいけません。
コンフィギュレータ、

1
@configurator、あなたは少しおかしいにおいがします...

9

ライアンのリストに追加:

  • SOLIDの原則に従う
  • コードに周期的な複雑さがあまりないことを確認してください
  • テスト駆動 Javaは常に良いことです
  • あなたがxFactoryFactoryクラスを持っているなら、あなたはそれを間違っています:-)
  • Javaエコシステムのオープンソースライブラリを考えると、車輪の再発明は悪いスタイルです
  • 日付と時刻にJoda時間を使用する

私はそこで止まります。


2
しかし、HammerFactoryFactoryFactoryクラスはどうですか?;-)
ウェインモリーナ、

@Wayne、ファクトリーはいくつかの決定を遅らせる必要があることを示しており、FactoryFactoryFactoriesは実行時に実際に行う必要があったが決定できなかった決定があることを示しています。

私は皮肉なことに、当時のJ2EEがHammerFactoriesとHammerFactoryFactoriesで過度に複雑である理由についてその記事を参照していました。HammerFactoryFactoryFactoriesだと思います。:)
ウェイン・モリーナ

@Martijn-SOLIDリンクに感謝。これまでに遭遇したことはありません。JodaTimeの使用をお勧めします。これは、JavaのCalendar / Dateクラスに対する(適切な)嫌悪ですか?JSR310(JodaTimeの後継)についてはどうですか?
amaidment

JSR-310がJava 8に組み込まれることを願っています(そのための準備を整えるために準備している私たちがたくさんいます。参加したい場合は、私に連絡してください)。一方、Joda時間は、Javaで日付と時刻を処理するための事実上の標準です。Javaの日付とカレンダーシステムには多くの問題があり、どこから始めればよいかさえわかりません;-)。致命的なのは、日付は変更可能であり、インスタントやピリオドの概念がないということです。
Martijn Verburg 2011

1

他の人の答えには感謝しながら、良いコードを書こうとするときに私が考えるいくつかのことを共有するのは公平だと思いました。

  • このクラス/メソッド/変数について何を知る必要がありますか?つまり、この知識はどこにあるのでしょうか。

  • このコードはアプリケーションのメモリ/パフォーマンスにどのように影響しますか?(私は「時期尚早な最適化がすべての悪の根源である」ことを認めます。そのため、最適化に多くの時間を費やすことを提案するのではなく、最初に私のコードを書くときの意識です。)

  • (コードとコード構造から)これが何をするかは明らかですか?(私は格言に従うようにしています:「人々が理解できないように努力し、人々が誤解できないように努力しなさい」。)


1

適切なJavaプログラミングの優れた例については、StringおよびArrayListクラスをお読みください。しかし、それらは非常に簡潔で、ほぼCスタイルであり、最小のJavaドキュメントを含む保守可能なコードには必ずしも最適ではありません。私の店での一般的な習慣はコメントではないので、詳細なcamelCase変数名を使用し、改行を過度に使用して、ある行を別の行と区切ることにより、コードでコメントしようとしています。タブを使用して変数とその値を分離することについては、まだ議論しています。タブは読みやすさ、IMOを向上させることができますが、最小限に抑えられた場合に限り、非常に主観的です。それは本当に聴衆の問題だと思います。ここで最良の答えはありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.