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

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

5
CSSやSVGで大量のマジックナンバーを使用できるのはなぜですか?
しばしば、私のようなホットネットワークの質問リスト上の質問を参照、この基本的には「私はCSSでこの任意の形状を描くんか」尋ねます。常に答えは、要求された形状を形成する一見ランダムにハードコードされた値の束を持つCSSまたはSVGデータのブロックです。 これを見ると、「うん!なんとcodeいコードブロックです。私のプロジェクトでこの種のものを見ないことを願っています。」しかし、私はこれらのタイプのQ&Aを非常に頻繁に、多数の賛成票で見ているので、明らかにコミュニティはそれらが悪いとは思わない。 しかし、なぜこれが受け入れられるのでしょうか?私のバックエンドの経験から来ると、これは私には意味がありません。では、なぜCSS / SVGで問題ないのでしょうか?

11
非常にひどく記述されたコードを扱うとき、どのように生産性を維持しますか?
私はソフトウェア業界での仕事、独学、就職する前にオープンソースに参加した経験はあまりありません。お金のために働いている今、私はまた、いくつかの不快なものに対処する必要がありますが、これは当然のことです。 最近、私は明らかに仕事でコーディングすることを学んでいたプログラマーによって書かれた大規模なSharePointプロジェクトにロギングを追加するように割り当てられました。2年間の共同作業の後、クライアントは当社に切り替えましたが、損害は発生しました。そして今、どういうわけかこのコードを保守する必要があります。 コードはありませんでしたことをあまりにも読みにくいです。問題にもかかわらず、各プロジェクトにはコピーペーストされたメソッド、巨大なifネスト、Systems Hungarian、無秩序な接続を含む1つのクラスがあります。 しかし、ロギングを追加するような簡単な作業を行っていたにもかかわらず、私は完全に非生産的でした。基本的に、ステップごとにコードを調べて、トレース呼び出しを追加するだけです。ただし、コードの愚かさは非常に迷惑なので、開始から10分以内に疲れてしまいます。最初は、usingコンストラクトを追加し、を逆にしてネストを減らしif、変数の名前を読み取り可能な名前に変更しましたが、プロジェクトは大きく、最終的にはgaveめました。これは私がやるべきタスクではないことはわかっていますが、少なくとも混乱を減らすことで、続けることができるように何らかの心理的な報酬を得ることができました。トリックが機能しなくなり、仕事の60%がまだ残っています。 仕事の後に頭痛がし始め、今までの満足感が得られなくなりました。通常は、10時間ストレートでコーディングしても新鮮に感じることができます。 これは単なる大騒ぎではありません。実際に質問があります。 生産性を維持し、風車と戦わない方法はありますか? 代わりに思考の、タスクに集中するために心理的なトリックのいくつかの種類があり、「どのように愚かであることは?」私は以前、プログラマが別の巧妙なトリックを見るたびに?ロギングを追加する際の問題は、実際にコードが何をするのかを理解しなければならないことであり、そうすることは不快な形で脳を傷つけます。

10
プライベート関数/メソッドが多すぎるようなものはありますか?
よく文書化されたコードの重要性を理解しています。しかし、自己文書化コードの重要性も理解しています。特定の機能を視覚的に読みやすくするほど、ソフトウェアのメンテナンス中にすばやく移動できます。 とはいえ、私は大きな機能を他の小さな機能に分離するのが好きです。しかし、1つのパブリックメソッドを提供するためだけに、クラスが5つまで持つことができるようになります。ここで、5つのプライベートメソッドに5つのパブリックメソッドを掛けると、それらのパブリックメソッドによって1回だけ呼び出される可能性のある、25の隠しメソッドを取得できます。 確かに、これらのパブリックメソッドは読みやすくなりましたが、機能が多すぎるのは悪い習慣だと思わざるを得ません。 [編集] 人々は、なぜ機能が多すぎるのが悪い習慣だと思うのかと私に尋ねてきました。 簡単な答え:それは直感です。 私の信念は、少しの間、ソフトウェアエンジニアリングの経験に支えられていません。「ライターのブロック」を与えたのは、プログラマーにとってだけの不確実性です。 過去には、私は個人的なプロジェクトのみをプログラミングしてきました。チームベースのプロジェクトに移ったのはつい最近のことです。ここで、他の人がコードを読んで理解できるようにします。 何が読みやすさを改善するのか分かりませんでした。一方では、1つの大きな関数を、わかりやすい名前を持つ他の小さな関数に分離することを考えていました。しかし、それは単に冗長であると言っている私の側面がありました。 それで、正しい道を選ぶために自分自身を啓発するように私はこれを求めています。 [編集] 以下は、私がどのように2つのバージョンが含ま可能性が私の問題を解決します。最初のものは、コードの大きな塊を分離しないことでそれを解決します。2番目は別のことを行います。 最初のバージョン: public static int Main() { // Displays the menu. Console.WriteLine("Pick your option"); Console.Writeline("[1] Input and display a polynomial"); Console.WriteLine("[2] Add two polynomials"); Console.WriteLine("[3] Subtract two polynomials"); Console.WriteLine("[4] Differentiate two polynomials"); Console.WriteLine("[0] Quit"); } 2番目のバージョン: public static int …

12
変数を再利用する必要がありますか?
変数を再利用する必要がありますか? 私は多くのベストプラクティスがあなたがそれをするべきではないと言うことを知っていますが、後で、異なる開発者がコードをデバッグしていて、似たような3つの変数を持っているとき、唯一の違いはそれらがコードの異なる場所で作成されることです混乱した。単体テストは、この好例です。 しかし、私はないのベストプラクティスは、それに対して、ほとんどの時間であることを知っています。例えば、彼らはメソッドのパラメーターを「オーバーライドしない」と言います。 ベストプラクティスは、以前の変数をnullにすることに対してです(Javaにはnull、変数に代入するときに警告を出すSonarがあります。Java6 以降、ガベージコレクターを呼び出すためにそれを行う必要はありません。どの警告がオフになります;ほとんどの場合、デフォルトはオンです。)

19
OOPはコードの再利用という約束を果たしていますか?コードの再利用を実現するための代替手段はありますか?
おそらく、オブジェクト指向のパラダイムを使用する最大の約束は、コードの再利用です。これが達成されたという論争もある。なぜ達成されたのか(達成されなかったのか)? OOPが定義するとおりにコードを再利用し、プロジェクトの生産性を高めますか? それとも管理しやすいですか?または保守が簡単ですか?または、より品質が高いですか? おそらく、コードの再利用は良いことですが、この目標を達成する方法はいくつかあります。問題は、OOPが提供するコード再利用の方法です。良かった?オブジェクト指向、サブクラス化、ポリモーフィズムなどよりも優れたコード再利用を実現する方法はありますか?より良い方法は何ですか?なんで? OOPの再利用や他のパラダイムの再利用の経験を教えてください。

10
どのような場合に、コードが少ないほど良くないのですか?[閉まっている]
私は最近仕事でいくつかのコードをリファクタリングしました、そして私は良い仕事をしたと思いました。980行のコードを450行に落とし、クラスの数を半分にしました。 これを同僚に見せたとき、これが改善であることに同意しなかった人もいました。 彼らは言った-「より少ないコード行が必ずしも良いとは限らない」 人々が本当に長い行を書いたり、いくつかの行を保存するためにすべてを単一のメソッドに入れたりする極端なケースがあるかもしれませんが、それは私がやったことではありません。私の意見では、コードは適切に構造化されており、サイズが半分であるため、理解/保守が簡単です。 仕事を遂行するために必要なコードを2倍にしたい人がいる理由を理解するのに苦労しています。 ?

9
コードの一貫性とコードの改善の適切なバランスは何ですか?
最近、同僚とコードスタイルについて話し合いました。彼は、コードの外観(ブレースの配置、大文字の使用など)の場合と同じように、APIの使用法と使用している一般的なパターンは、コードベース全体ではなく、周囲のコードとできるだけ似ている必要があると主張していました。たとえば、C#でDAOクラスにメソッドを追加する場合、そのクラスの他のメソッドがそれを使用していない場合でも、コードをクリーンで維持しやすくするために、必要に応じてLINQを使用しようとします。しかし、私の同僚は、そのクラスの既存のスタイルに反するため、そのインスタンスでそれを使用すべきではないと主張し、したがって理解が難しくなります。 最初は私は彼の立場がかなり極端であると感じましたが、しばらく考え直した後、私は彼の主張を見始めています。架空のLINQの例では、同僚がLINQに慣れていないために、おそらくこのクラスには含まれていませんか?もしそうなら、もし私がそれを使わなかったなら、私の仲間の開発者にとって私のコードはより保守しやすいでしょうか?一方、このような手法を使用するとコードがよりきれいになると本当に信じている場合、周囲のコードと大幅に異なる場合でも使用すべきではありませんか? 私の同僚の議論の核心は、私たち全員が異なる方法でコードベースに同様の機能を実装しようとすると、私たちはそれぞれ私たちの方法が「最高」だと思うと、最終的にコード全体が難しくなることだと思う理解する。しかし、現時点では、既存のコードを盲目的にたどりすぎると、時間の経過とともに品質が徐々に低下していくと思います。 では、パターンはどの程度までコードスタイルの一部であり、一貫性を維持することと改善を行うことの間のどこに線を引くべきでしょうか。

7
バージョン管理の方法に何か問題がありますか?
私はプログラマーのチームとビジネスアナリストとして仕事をしています。製品のバージョン2.0をリリースしたばかりで、3か月後にリリースされる次のバージョンに取り組んでいます(内部ソフトウェア製品です)。残念ながら、バージョン2.0には修正が必要な問題がいくつかあり、数週間以内に修正を展開する予定です。問題は、まだ作業中であり、さらに3か月間リリースされる予定のない変更を展開したくないことです。 プログラマーは、これを管理する方法は、欠陥のコードのみをチェックインし、新しい拡張機能のコードは、完了するまで開発者のローカルマシンに保持することであると判断しました。テストのためにマシンからローカルビルドを取得する必要があります。彼らがコードをチェックインし、不具合を修正するために別のパッチをプッシュする必要がある場合、それらの機能強化をまだ含めたくないからです。また、同じコードファイルに不具合の修正と機能強化の両方が含まれるという問題もあるため、ローカルでコードファイルをコピーし、バグを修正するために変更を加えてバグをチェックし、その後、彼らが作ったローカルコピー。 かなり複雑に思えます-このタイプのシナリオを処理するより良い方法はありますか?Team Foundation ServerとVisual Studio 2010を使用しています。

12
一歩下がって、新鮮な目でコードを見る方法は?[閉まっている]
私は昨年、1人のチームとしてリッチクライアントアプリケーション(35,000以上のLoC、価値あるもの)を開発しました。現在は安定しており、運用中です。しかし、プロジェクトの最初の段階では私のスキルが錆びていたことを知っているので、間違いなくコードに大きな問題があります。この時点で、ほとんどの問題はアーキテクチャ、構造、および相互作用にあります。簡単な問題は、アーキテクチャ/設計の問題でさえ、すでに取り除かれています。 残念ながら、私はこのプロジェクトに多くの時間を費やしているため、その外側を考えるのに苦労しています。新しい視点からアプローチして、設計に深く埋め込まれている、または固有の欠陥を確認します。 どうすれば頭の外やコードの外に出て、見た目を新しくしてより良くすることができますか?

12
単体テストコードが「匂う」場合、それは本当に重要ですか?
通常、コピーアンドペーストおよびその他のあらゆる悪い慣行を使用して、単体テストを一緒にスローします。通常、単体テストは非常に見苦しく、「コードのにおい」に満ちていますが、これは本当に重要ですか?「本当の」コードが「良い」ものである限り、それは重要なことです。さらに、ユニットテストでは通常、スタブ機能などのさまざまな「臭いハック」が必要です。 不十分に設計された(「臭い」)単体テストについて、どの程度心配する必要がありますか?

10
「適切な」プログラミングはもはや重要ではありませんか?
暇なときにAndroidゲームを作成しています。libgdxライブラリを使用しているので、かなり面倒な作業が行われます。 開発中に、いくつかの手順で不注意にデータ型を選択しました。連想配列に近いものが欲しかったため、ハッシュテーブルを使用しました。人間が読めるキー値。同様のことを達成する他の場所では、ベクトルを使用します。libgdxにはvector2およびvector3クラスがありますが、それらを使用したことはありません。 奇妙な問題に遭遇し、Stack Overflowでヘルプを検索すると、特定のデータ型が技術的に「適切」である場合に、特定のデータ型を使用する質問を多くの人がリーミングしています。ArrayListを使用するのと同様、定義済みの境界を必要としないため、新しい既知の境界でint []を再定義します。または、次のような些細なことでも: for(int i = 0; i < items.length; i ++) { // do something } 私はそれがすべての反復でitem.lengthを評価することを知っています。ただし、アイテムが15〜20個を超えることはありません。したがって、繰り返しごとにitems.lengthを評価する場合は注意が必要ですか? いくつかのテストを実行して、先ほど説明した方法と適切な方法を使用してアプリがどのように動作するかを確認し、チュートリアルに従って、コミュニティから提案された正確なデータ型を使用しました。結果:同じこと。平均45 fps。電話とgalaxyタブですべてのアプリを開きました。変わりはない。 だから私はあなたへの私の質問はこれだと思う:それは適切であることがもはや重要ではないときにしきい値はありますか?「仕事をやり遂げる限り、私は気にしませんか?」と言っても大丈夫ですか?

14
Reflectionの使用に問題はありますか?
理由はわかりませんが、リフレクションを使用するときは常に「ごまかし」のような気がします-おそらく、自分が取っているパフォーマンスヒットのせいでしょう。 私の一部は、それがあなたが使用している言語の一部であり、あなたがしようとしていることを達成できるなら、なぜそれを使用しないのかと言います。私の他の部分は、リフレクションを使用せずにこれを行うことができる方法がある必要があると言います。多分それは状況次第だと思います。 リフレクションを使用する際に注意する必要のある潜在的な問題は何ですか?従来の解決策を見つけようとするのにどれだけの労力を費やす価値がありますか?

7
一貫したコードスタイルの実際の価値は何ですか
私は、顧客向けの新しいソリューションを実装するコンサルタントチームの一員です。クライアント側のコードベース(Reactおよびjavascript)のコードレビューの大部分を担当しています。 一部のチームメンバーが独自のコーディングパターンを使用して、スタイルだけで作者が誰であるかをランダムに選択できるようになっていることに気付きました。 例1(1回限りのインライン関数) React.createClass({ render: function () { var someFunc = function () { ... return someValue; }; return <div>{someFunc()}</div> } }); 著者は、someFuncに意味のある名前を割り当てることで、コードが読みやすくなると主張しています。関数をインライン化し、代わりにコメントを追加すると、同じ効果が得られると思います。 例2(非バインド関数) function renderSomePart(props, state) { return ( <div> <p>{props.myProp}</p> <p>{state.myState}</p> </div> ); } React.createClass({ render: function () { return <div>{renderSomePart(this.props, this.state)}</div>; } }); これは通常の方法です(状態と小道具を渡す必要がなくなります)。 React.createClass({ renderSomePart: function …

4
#include <iostream.h>が悪いのはなぜですか?
私は別のスレッドを読んでいたが、ある男が初心者向けにC ++の本について尋ね、プログラマーの一人がこれを書いた。 いくつかの警告:「hello world」を示すすべての本を避ける #include &lt;iostream.h&gt; C ++ブックを開いて、上記の例のようなiostreamヘッダーが含まれていることを確認しました。 なぜそれが悪いのですか?C ++を学習するとき、他にどのような留意点がありますか? 背景:私はCに精通しており、次の学期にC ++を学び始めます。

10
フラグ変数は絶対的な悪ですか?[閉まっている]
フラグ変数は悪ですか?次の種類の変数は非常に不道徳であり、それらを使用するのは邪悪ですか? 「特定の場所で値を割り当てた後でブール値または整数変数を下にチェックしてから、何かをするかどうかをチェックしてから、たとえばnewItem = true以下の行を使用するif (newItem ) then」 フラグの使用を完全に無視して、より良いアーキテクチャ/コードになったプロジェクトをいくつか行ったことを覚えています。しかし、それは私が働いている他のプロジェクトでは一般的な慣行であり、コードが大きくなりフラグが追加されると、IMHOコードスパゲッティも大きくなります。 フラグを使用するのが良い習慣である、あるいは必要な場合があると言いますか?またはコードでフラグを使用することは...赤いフラグであり、回避/リファクタリングする必要があることに同意しますか?私は、代わりにリアルタイムで状態をチェックする関数/メソッドを実行するだけでうまくいきます。

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