タグ付けされた質問 「code-quality」

高品質のコードを書くためのベストプラクティスに関する質問。

13
C ++にはあるがJavaにはない言語機能を避けるべきですか?
プロジェクトの環境によってC ++の使用に制限されているとします。C ++にはあるがJavaにはないいくつかの言語機能(例えば、多重継承、演算子のオーバーロード)の使用を防ぐのは良いですか? その理由は次のとおりです。 JavaはC ++よりも新しいため、JavaがC ++の機能を提供しない場合、その機能は適切ではないことを意味するため、使用を避ける必要があります。 C ++固有の機能(例:フレンド関数、多重継承)を備えたC ++コードは、C ++プログラマーのみが保守またはレビューできますが、JavaのようなC ++(C ++言語固有の機能なし)を記述するだけで、コードは両方によって保守またはレビューできますC ++およびJavaプログラマ。 いつかJavaにコードを変換するように求められる場合があります 通常、C ++固有の機能を持たないコードの方が保守しやすい すべてのC ++言語固有の機能(例:多重継承)には、Javaで実装する代替手段が必要です。そうでない場合、設計パターンまたはコードアーキテクチャに問題があることを意味します。 本当?
110 java  c++  code-quality 

14
簡潔さがもはや美徳ではなくなったのはどの時点ですか?
最近のバグ修正では、他のチームメンバーによって記述されたコードを調べる必要がありましたが、そこで見つけました(C#です)。 return (decimal)CostIn > 0 && CostOut > 0 ? (((decimal)CostOut - (decimal)CostIn) / (decimal)CostOut) * 100 : 0; さて、これらすべてのキャストに正当な理由があるので、これを理解するのは非常に難しいようです。計算に小さなバグがあり、問題を解決するためにそれを解く必要がありました。 私はこの人のコーディングスタイルをコードレビューから知っていますが、彼のアプローチは、短い方が常に良いということです。そしてもちろん、そこには価値があります。私たちはすべて、適切に配置されたいくつかの演算子で整理できる条件ロジックの不必要に複雑なチェーンを見てきました。しかし、彼は明らかに、私よりも単一のステートメントに詰め込まれた一連の演算子に精通しています。 もちろん、これは最終的にはスタイルの問題です。しかし、コードを簡潔にするための努力が役に立たなくなり、理解の障壁となる点を認識することに関して何か書いたり、研究したりしましたか? キャストの理由はEntity Frameworkです。データベースはこれらをnull許容型として保存する必要があります。小数?C#のDecimalとは異なり、キャストする必要があります。


30
コードを見ると、どのものがすぐに警報を鳴らしますか?[閉まっている]
数週間前にソフトウェア職人のイベントに参加しましたが、コメントの1つは「見たときに悪いコードをすべて認識していると確信している」というもので、誰も議論することなく賢くうなずきました。 この種のことは、誰もが自分が平均以上のドライバーだと思っているという真実があるので、常に私を心配しています。悪いコードは認識できると思いますが、他の人がコードの匂いだと考えるものについては、人々のブログやほんの一握りの本で詳細に議論されることはめったにないので、もっと学びたいと思います。特に、ある言語ではコード臭があり、別の言語では臭いがないものについて聞くのは面白いと思います。 簡単なものから始めます。 コメントアウトされたコードの割合が高いソース管理のコード -なぜそこにあるのですか?削除するつもりでしたか?それは半分完成した作品ですか?多分それはコメントアウトされるべきではなく、誰かが何かをテストしているときにのみ行われたのでしょうか?個人的には、この種のことは、それがあちこちの奇妙な行であっても本当に迷惑だと感じますが、コードの残りの部分に大きなブロックが散在しているのを見ると、まったく受け入れられません。また、通常、残りのコードも疑わしい品質である可能性が高いことを示しています。

13
ジュニア開発者からの「ほぼ良い」コードに対処する方法は?[閉まっている]
チームの管理について質問がありました。現在、私はコーディング工場からリモートで作業しているジュニア開発者を扱っています。その男は批判に対して寛容であり、学ぶことをいとわないが、どれだけのものをプッシュすべきか疑問を抱いた。 現在、何かがまっすぐで明白な場合、グッドプラクティスの違反です。SRP、Godオブジェクト、メソッドまたは変数の意味のない名前の違反など。私は彼が修正しなければならないことを指摘し、それが間違っている理由を説明しようとします。 私の質問は次のとおりです。間違った言語の変数名(以前のチームがスペイン語と英語を混ぜて、それを修正しようとしています)のようなコーディングスタイルのマイナーな違反がある場合、またはいくつかのマイナーな構造上の問題がある場合、私は手放します空き時間があるか、問題のあるクラスを変更する必要があります。これはチームの士気に良いと感じているので、初心者には些細なことのように見えるかもしれませんが、コードを常に押し戻そうとはしていません。何かをする方法を学ぶことから。 男を教えることと絶え間ない批判で彼を焼き払わないことの間のバランスをどのように取るのですか?後輩にとっては、目が効いているものをやり直すように言ったらイライラするかもしれません。

11
main()を短くする必要があるのはなぜですか?
私は9年以上プログラミングを行ってきました。最初のプログラミング教師のアドバイスによれば、私は常に自分のmain()機能を非常に短くしています。 最初は理由がわからなかった。私は、理解することなく、ただ教授の喜びに耳を傾けました。 経験を積んだ後、コードを正しく設計すれば、ちょっとしたmain()機能が発生することに気付きました。モジュール化されたコードを記述し、単一の責任原則に従うことで、コードを「束」に設計することmain()ができ、プログラムを実行するための触媒としてしか機能しませんでした。 数週間前に早送りして、Pythonのソースコードを見て、main()関数を見つけました。 /* Minimal main program -- everything is loaded from the library */ ... int main(int argc, char **argv) { ... return Py_Main(argc, argv); } やったパイソン。短いmain()関数==良いコード。 プログラミングの先生は正しかった。 もっと深く見たいので、Py_Mainを見てみました。全体として、次のように定義されます。 /* Main program */ int Py_Main(int argc, char **argv) { int c; int sts; char *command = NULL; char …

20
コードの行数を減らすことはどれほど重要ですか?
私はJ2SE(コアjava)で作業するソフトウェア開発者です。 多くの場合、コードレビュー中に、コードの行数を減らすように求められます。 冗長なコードを削除することではなく、コード内の少ない行で同じことを行うことに焦点を当てたスタイルに従うことです。行の数を増やすことを意味する場合でも、コードを明確にすることを信じています。 物事を行う正しい方法は何だと思いますか? LOC(コード行)が小さい場合、コードにどのような影響がありますか?LOCの数値が大きい場合、コードにどのような影響がありますか? ウェブサイトからの例: "javaranch"- public static void happyBirthday(int age) { if ((age == 16) || (age == 21) || ((age > 21) && (((age % 10) == 0) || ((age % 25) == 0)))) { System.out.println("Super special party, this year!"); } else { System.out.println("One year older. Again."); …

15
DRYが重要な理由
非常に簡単ですが、同じプロセスをいくつかの小さな調整で数回繰り返すだけで、すべてのケースとスケーラブルなデータで機能するコードを作成したいのはなぜですか? すぐにこれを再度編集する必要はないでしょう。 行くだけで仕事が減るみたいです... function doStuff1(){/*.a.*/} function doStuff2(){/*.b.*/} function doStuff3(){/*.c.*/} そして、何かを追加する必要がある場合... function doStuff4(){/*.d.*/} 削除する必要がある場合は、削除します。 すべてをすべてのケースにデータを供給して処理できる1つの単純なパターンにすべてを作り、私がこれまでにないような気がしない多くの変更を行う方法を理解することは困難ですする。 クイックカット+ペーストで作業が大幅に減るのに、どうしてDRYになるのですか?
81 code-quality  dry 

9
「クリーンコード」の実践からはほど遠いコードを使用しながら、巨大なオープンソースライブラリをどのように維持しますか。
私はまだ高品質のコードを書くには経験が浅いので、Robert C. MartinによるClean Codeなどの問題に対処する本を読み、よく知られているライブラリのコードをチェックしてスキルを向上させます。 多くのオープンソースライブラリは長年にわたって維持されていますが、正しいパスにないことはほとんどありませんが、それらの多くのコードは、クリーンなコードを記述するための原則からはほど遠いことがわかりました。数百行のコード。 だから私の質問は次のとおりです。きれいなコードの原則はあまりにも制限されていますか?そうでない場合、これらの原則の多くを考慮せずに巨大なライブラリをどのように維持していますか? 簡単な説明をいただければ幸いです。質問が初心者の人からばかげていると思われる場合、私は謝罪します。 編集 Butterknifeライブラリでこの例を確認してください。Androidコミュニティで最もよく知られているライブラリの1つです。

6
すべてのマジックナンバーは同じですか?
最近のプロジェクトでは、バイトからキロバイト kibibyteに変換する必要がありました。コードは簡単でした: var kBval = byteVal / 1024; それを書いた後、私は機能の残りを動かして、先へ進みました。 しかし、後になって、コードにマジックナンバーを埋め込んだのではないかと思い始めました。私の一部は、数が固定された定数であり、容易に理解されるべきだから、それは大丈夫だと言います。しかし、私の別の部分は、のような定義済み定数にラップされている場合、それは非常に明確だったと思いBYTES_PER_KBYTEます。 それで、よく知られた定数である数字は本当に魔法のようなものですか? 関連する質問: 数字はいつ魔法の数字ですか?そして、コード内のすべての数字は「マジックナンバー」と見なされますか?-似ていますが、私が尋ねているものよりもはるかに広範な質問です。私の質問は、よく知られている定数に焦点を当てていますが、これらの質問では取り上げていません。 マジックナンバーの削除:「いいえ」と言うタイミングはいつですか?も関連していますが、定数がマジックナンバーであるかどうかではなく、リファクタリングに焦点を当てています。

13
コードレビューを実行する最も効果的な方法は何ですか?[閉まっている]
コードレビューを実行する理想的な方法を見つけたことがありませんが、多くの場合、顧客はそれらを必要とします。各顧客は異なる方法でそれらを行うようであり、私はそれらのいずれにも満足感を感じたことはありません。 コードレビューを行うための最も効果的な方法は何ですか? 例えば: 1人が品質の門番と見なされ、コードをレビューしていますか、それともチームが標準を所有していますか? プロジェクターを使用してチームの練習としてコードをレビューしますか? 直接、メール、またはツールを使用して行われますか? コードの品質を確保するために、ペアプログラミングや集合的なコード所有権などのレビューを避けて使用していますか?

10
悪いコードを書くことを余儀なくされています。どうすれば顔を保存できますか?[閉まっている]
私は若い開発者ですが、私の仕事は本当にひどいPHPコードで作業することを余儀なくされます(あなたが見た最悪のPHPコードについて考えてください;そしてコードを2倍悪いと考えてください)。私は通常、バグを修正し、新しい機能を追加するためにコードベースと戦います。時々、私は物事をできるだけ早く動作させるように命じられます。 この製品は以前はオープンソースでしたが、将来オープンソースになる可能性があると心配しています。誰か(特に潜在的な雇用者)が私のチェンジセットの次に私の名前を見つけることができたら、私は恥ずかしいでしょう。良い名前を守るために何ができますか? これが関連するかどうかはわかりませんが、上司も同僚もコードが悪いことを認めたくないと付け加えますが、そのために彼らを責めることはできません-彼らの多くはこれが彼らです最初の仕事。

12
期限に達した後、廃止されたコードがコンパイルされないようにする[終了]
私のチームでは、大きなモノリシックプロジェクト(クラス全体、メソッドなど)で多くの古いものを削除しています。 そのクリーニングタスクの間に、私はいつもよりも一種の注釈やライブラリの凝ったものがあるのか​​と思っていました@Deprecated。これにより@FancyDeprecated、特定の日付が過ぎた後に古い未使用コードをクリーンアップしていない場合、プロジェクトのビルドが成功しなくなります。 インターネットで検索してみましたが、以下に説明する機能を持つものは見つかりませんでした。 特定の日付の前に削除する予定のコードに配置するための注釈または類似のもの その日付の前にコードがコンパイルされ、すべてが正常に動作します その日以降、コードはコンパイルされず、問題について警告するメッセージが表示されます 私はユニコーンを探していると思います...どのプログラム言語にも同様の技術はありますか? 計画として、BIは、「デッドライン」で失敗し始めるコードの単体テストでマジックを作成する可能性を考えています。これについてどう思う?より良いアイデアはありますか?

11
プロジェクトに存在する技術的負債の量をどのように定量化できますか?
ある種のコードメトリックとして、コードベースの技術的負債に数字を付ける何らかのツールがあるかどうか、誰もが知っていますか?そうでない場合、誰かがアルゴリズムまたはヒューリスティックのセットを知っていますか? これまでのところそれらのいずれも存在しない場合、私はそのようなことから始める方法のアイデアに興味があります。つまり、メソッド、クラス、名前空間、アセンブリなどによって発生した技術的負債をどのように定量化できますか。 私はC#コードベースの分析と評価に最も関心がありますが、特に概念が言語を超越している場合は、他の言語でも気軽に声をかけてください。

16
古いコードを改善する責任はありますか?
私が書いたいくつかの古いコードを見ていました。動作しますが、すばらしいコードではありません。私は当時よりも多くのことを知っているので、改善することができました。これは現在のプロジェクトではありませんが、現在の作業中の製品コードです。過去に書いたコードに戻って改善する責任がありますか、それとも「壊れていない場合は修正しないでください」という正しい姿勢ですか?私の会社は数年前にコードレビュークラスを後援しましたが、重要なポイントの1つは、時にはそれで十分であるということでした。進め。 それで、ある時点でそれを十分に呼び出して先に進むべきですか、それともより良いと思うときに古いコードを改善するためにプロジェクトをプッシュしようとするべきですか?

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