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

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

14
プロジェクトのコードベースに深刻な作業が必要であることをプロジェクトマネージャーまたはリードデベロッパーに(巧みに)伝えるにはどうすればよいですか?
私は(比較的)小さな開発チームに参加しました。1年ではないにしても、数か月間プロジェクトに取り組んでいます。ほとんどの開発者がプロ​​ジェクトに参加するのと同じように、最初の数日間はプロジェクトのコードベースを確認しました。 このプロジェクト(中規模から大規模のASP.NET WebForms内部基幹業務アプリケーション)は、より具体的な用語がないため、災害です。コーディング標準には、すぐに気付く3つの問題があります。 標準は非常に緩いです。すべきことよりも、すべきでないこと(ハンガリー語の表記法を使用しないなど)の詳細を説明します。 標準は常に守られているわけではありません。どこでもコードのフォーマットに不整合があります。 この標準は、Microsoftのスタイルガイドラインに準拠していません。私の意見では、フレームワークの開発者と言語仕様への最大の貢献者によって示されたガイドラインから逸脱することには価値がありません。 ポイント3については、MCPDをWebアプリケーション(具体的にはASP.NET)に集中させるために時間をかけたため、おそらくもっと面倒です。また、私はチームで唯一のマイクロソフト認定プロフェッショナルです。私はすべての教育、自習、および実地学習(認定試験の準備を含む)で学んだことにより、プロジェクトのコードでいくつかのインスタンスを見つけました。最良の方法。 私はこのチームに1週間しかいませんが、コードベースには多くの問題があり、「自分の方法」で物事を行うためにすでに記述されているものとの戦いに費やす時間が増えると思います。たとえば、より広く受け入れられているコーディング標準、アーキテクチャパターン、ベストプラクティスに準拠したプロジェクトに取り組んでいます。これは私に私の質問をもたらします: プロジェクトを大幅に刷新する必要があることを、プロジェクトマネージャーとチームリーダーに提案する必要がありますか(その場合はどうすればよいですか)? 彼らのオフィスに足を踏み入れたくないので、私のMCTS証明書とMCPD証明書を振って、彼らのプロジェクトのコードベースはくだらないと言っています。しかし、私は実際に高品質のソフトウェアを書きたいと思っており、最終製品を安定させて簡単に保守できるようにしたいので、私はまた、黙っていたくないし、彼らの厄介なコードの上に厄介なコードを書かなければなりません。

4
ネストされた関数呼び出しの使用は悪いことですか?
最近の宿題でuglyReceipt(cashParser(cashInput()))は、プログラム自体が完璧に機能する醜い方法で関数を呼び出すことになりましたが、それでも何か間違ったことをしているように感じました。 関数の呼び出しはこのような悪い習慣であり、そうであれば、代わりに何をすべきですか?

6
いつ抽象コードを記述し、いつ具体化するのか?
私はおもちゃのプロジェクトとして小さなツールに取り組んでおり、2つのディレクトリの違いを示し、どのファイル/ディレクトリが追加、削除、変更されたかなどを示しています。 私はこれらの変更を、それがファイルであるかディレクトリであるかを区別せずに、単に「ChangeItem」オブジェクトとして表現しようとしていました。しかし、それらをツリーに表示する方法、子供の親が誰であるかを知る方法など、多くの問題が発生しました。また、非常に直感的ではありませんでした。 次に、ディレクトリの変更とファイルの変更の間で変更を分割します。これにより、コーディングが非常に簡単になり、何が起こっているのかを理解することが容易になりました。これで、ディレクトリ内のすべてのファイルを選択するなど、はるかに簡単になりました。 私の質問は、抽象化を使用するか、コードでより具体的にするかをどのようにして知ることができるかです。抽象化が多すぎるか少なすぎるかをどのように判断できますか?


3
ループ内にネストされている場合、try-catchステートメントのネストは依然としてコードの匂いですか?
try-catchステートメントをネストするとコードの臭いになることがよくあると聞いたので、この状況が例外かどうか疑問に思います。そうでない場合、リファクタリングするためのいくつかの良い方法は何でしょうか? 私のコードは次のようになります: try{ X x = blah; otherStuff; for (int i = 0; i < N; i++){ try{ String y = Integer.toString(i); f(x); } catch(Exceptions1 e1){ System.err.println(... + y + ...); System.exit(0); } } catch(Exceptions2 e2){ ... } Exceptionsここではマルチキャッチを示すために使用しています。 e2初期化xおよび実行によってスローされた例外をキャッチするために使用されますotherStuff。理想的には、2つの行だけをtry-catchで囲んでいたはずですがx、ループ内で使用し、try-catchの外側でnullに初期化することによって引き起こされる「未使用の割り当て」警告を回避したいと考えました。 e1e2反復の詳細に関する情報をユーザーに提供したいため、ループ内にキャッチブロックが必要だったため、マルチキャッチされませんでした。

2
JavaScriptの文字列定数のベストプラクティス/理由[終了]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 5年前休業。 Java / C#のような静的言語では、コードに単独で挿入するのではなく、文字列または数値に定数を使用します。ただし、私はJavaScriptでのこの習慣を避ける傾向があります。最近では、私の周りの他の一部のコーダーがJSでこのアプローチを採用しているため、私またはおそらく彼らの推論を固める必要があると判断しました。 JavaScriptには、実際の「const」宣言構文はありません。通常は、大文字のプロパティを変更しないという非公式のポリシーで解決します。しかし、私の意見は通常、それらを完全に回避することです。それらの利点のほとんどはJavaScriptで失われるためです。Javaでは、ミススペル文字列が原因でプログラムを実行しようとしたときにプログラムが失敗します。その時点でプログラムを修正して次に進みます。両方のインスタンスが同じ定数を指している静的チェッカーを使用すると、コンパイル時に見つけることができるので、その問題を排除できます。あなたは常にあなたのスペルの正しさを発見しようとしているようしかし、JavaScriptは単純に、あらゆる場所にその問題を持っています実行時に: Library = { doThing: function() } setTimeout(function() Liberry.doThing() // No such object: Liberry }, 0); これに対する最善の安全策は、通常、「厳密な使用」です。それを好む開発者にとって、宣言されていない変数の問題をより迅速に見つけるためにそれを使用することに問題はありません。しかし、私の意見では、REST APIなどに文字列定数を提供しても、実際には何も保護されていません。もう一つの例: CompanyAPI.constants.ENROLL_URL = "/rest/enroll"; CompanyAPI.constants.FIRST_NAME = "firstName"; ajax({url: CompanyAPI.constants.ENROLL_URL, data: CompanyAPI.constants.FIRST_NAME }); // vs. ajax({url: "/rest/enroll", data: "firstName" }); ...あなたは上記を書くつもりでしたが、次にタイプミスをしました。おっと。 ajax({url: CompanyAPI.constants.ENROL_URL, data: CompanyAPI.constants.FIRS_NAME }); // vs. …

4
C#のフィールドとメソッドでプライベートを使用する必要がありますか?
私はC#に少し慣れており、次のことがわかりました。C#では、クラス内のすべてのフィールドとメソッドはデフォルトでプライベートです。これが意味すること: class MyClass { string myString } と同じです: class MyClass { private string myString } それで、それらは同じなので、フィールドとメソッドでprivateキーワードを使用する必要がありますか?多くのオンラインコードサンプルでは、​​コードでprivateキーワードを使用していますが、それはなぜですか?

5
単一の反復ですべてのデータを収集するか、読み取り可能なコードの関数を使用するか
たとえば、最も高いランナー、最も速いランナー、最も軽いランナーを見つけるために必要な一連のランナーがあるとします。最も読みやすいソリューションは次のようになります: runners = getRunners(); tallestRunner = getTallestRunner(runners); fastestRunner = getFastestRunner(runners); lightestRunner = getLightestRunner(runners); ..各関数はランナーを反復処理し、最高の高さ、最高の速度、最低の重量を追跡します。ただし、配列を3回繰り返し処理することは、あまり良い考えではないようです。代わりにそれを行う方が良いでしょう: int greatestHeght, greatestSpeed, leastWeight; Runner tallestRunner, fastestRunner, lightestRunner; for(runner in runners){ if(runner.height > greatestHeight) { greatestHeight = runner.height; tallestRunner = runner; } if(runner.speed > ... } これは読みにくくありませんが、反復で抽出される情報の各部分にさらにロジックがあると、面倒になる可能性があります。 ここの中間点は何ですか?コードを論理ユニットに分割したまま、単一の反復のみを使用するにはどうすればよいですか?

3
シンプルなウィジェットシステムで、各ウィジェットがその親への参照を必要とするのはなぜですか?
私は単純なウィジェットシステム(単一ウィンドウ、固定サイズ)に取り組んでいます。各ウィジェットは、その親(つまり、ウィジェットを含むウィジェット)をコンストラクターに渡します。ただし、私がScreenと呼んだルートウィジェットを除きます。 そのアプローチが理にかなっているかどうか、私にはいくつかの疑問があります。以前使用したほとんどのウィジェットシステム(Qt、GTKなど)で実行したためですが、これらは私のものよりもかなり複雑であることに気付きました。 ウィンドウのサイズ変更はありません 子供のサイズに基づいてコンテナのサイズを設定する予定はありません メモリ管理には必要ないと思います(C ++を使用しています)。代わりに共有ポインタを使用できます(基本的にはJavaでの動作) ウィジェットがその親への参照を必要とする理由はありますか? これを変更することは大きなリファクタリングです。そのため、先に進んでコンテナーとレイアウトを実装する前に、その親が必要かどうかをよく理解したいと思います。 編集:親はとにかくそのすべての子を知っていることに注意してください。子供も親を知る必要があるのか​​と思っています。

6
ランダムなコードスニペットを見ることは、プロジェクトの品質をすばやく判断するのに役立ちますか?
今まで見たことのないプロジェクト(通常、使用するかどうかを検討しているオープンソースプロジェクト)の品質を把握するために、ランダムファイルを開いてコードの細部を見ることから始めることがよくあります。 私は次のものを探します: スタイル(言語で認められている規則に従っていますか、一貫していますか) コメントの品質と一貫性 共通言語固有の落とし穴(たとえば、一貫し===てJavaScriptで使用しない) 論理的に構造化されているように見えますか これにより、コードの目的がまったく分からなくても、コードを書いた開発者のスキルがよくわかります。 これは便利だと人々は思いますか?実際にどのように機能するかについての知識がないと仮定して、プロジェクトのコードベースの品質を迅速に評価するために何を考慮する必要がありますか?

6
新しいもので良いコードを書くには?[閉まっている]
ここで何が尋ねられているのかを知るのは難しい。この質問は、あいまいで、あいまいで、不完全で、過度に広い、または修辞的であり、現在の形では合理的に回答することができません。再開できるようにこの質問を明確にするヘルプについては、ヘルプセンターに アクセスしてください。 7年前休業。 私はいつも、よく構成された読みやすいコードを書くようにしています。 私は何か新しいものをいじり回しているとき、私は特定の問題に直面します。私はコードや構造などを変更し続けています。結局、私はコードを見て、とても単純なことをしようとしたときにコードがどれほど複雑になったのか悩みました。 何かを完成させたら、それをよりリファクタリングしてよりクリーンにします。これはほとんどの場合完了後に発生し、コードが大きくなるほどコードを書き換えるのが面倒になるため、面倒です。 特に多くの人が共有する大きなプロジェクトで、人々がそのような苦痛にどう対処するのか知りたいです。

4
どのようにしてコードに対して建設的な批判を得ることができますか?
私のチームがコードレビューを行うことはめったにありません。これは、主に十分な時間がないため、人々はエネルギーを欠いており、そうするつもりだからです。しかし、私のコードを読んだときに、人々が私のコードについてどう思うかを本当に知りたいです。このようにして、他の人が私のコードをどのように考え、調整するかを理解し、読みやすくしています。 だから私の質問は、どうすれば私のコードに対して建設的な批判を得ることができるのですか?私の目的は、より読みやすいコードを記述できるように、人々の考え方を理解することです。

4
引数またはメンバー変数としてのメソッドフラグ?
タイトルは「メソッドフラグを引数として、またはメンバー変数として?」最適ではないかもしれませんが、より良い用語のATMがないため、次のようになります。 私は現在、特定のクラス(プライベート)メソッドのフラグを関数の引数として渡すか、メンバー変数を介して渡すか、この側面をカバーするパターンまたは名前があるかどうか、および/またはこの問題を回避しようとしています。これが他の設計上の問題を示唆しているかどうか。 例(言語はC ++、Java、C#である可能性があり、実際にはIMHOには関係ありません): class Thingamajig { private ResultType DoInternalStuff(FlagType calcSelect) { ResultType res; for (... some loop condition ...) { ... if (calcSelect == typeA) { ... } else if (calcSelect == typeX) { ... } else if ... } ... return res; } private void InteralStuffInvoker(FlagType calcSelect) { …

3
PHPを使用する場合の(null!= $ object)と($ object!= null)の(ある場合)違いは何ですか?
私はJavaに慣れているので、条件は左から右に解釈されると常に考えています。つまりnull != $obj、$obj != null これは、PHPには当てはまらないようです。 常にnull左側から始めると、PHPで何か問題がありますか?Javaからの動作を維持できますか、それともPHPの条件を処理するときに何か他のことをするようにトレーニングする必要がありますか?

8
C ++の美しいコードとは何ですか?なぜほとんどのプログラマーはそんなに気にかけているのですか?[閉まっている]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 2年前休業。 ほとんどのプロジェクトはC ++ APIを使用しているため、APIの制約とプロジェクト自体の制約を扱います。 私はプログラミングの初心者ですが、OOPを使用するのは好きではありません。他のプログラマーが何らかの種類のデータ編成の一貫性を壊すのを防ぐためにプライベートスコープで制限することが非常に重要である理由を明確に誰も説明できなかったためです。 QtやOgre3Dのような素晴らしいものを作ることができるので、私はまだOOPで大丈夫ですが、それらはAPIであり、アプリケーションではなく、それらのコードは完璧である必要があり、誰も作業を批判できません。 ほとんどのプログラマーがAPIではなくアプリを作成しているため、なぜ天才的なコードを設計するような完璧なコードを作成し、これに時間を費やしたいのか、よくわかりません。

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