タグ付けされた質問 「coding-standards」

コーディング標準またはコーディング規約は、ソフトウェアプロジェクトでのコード生成のプロセスを管理するために設計された一連のルールまたはガイドラインです。それらは通常、業界のベストプラクティスまたは一般に受け入れられている規則に基づいています。これには、命名規則、スタイル、禁止されている機能などが含まれます。

9
カスタムプロパティを持つJSブール値は悪い習慣ですか?
JSでは、カスタムプロパティを持つブール値を返すことができます。例えば。Modernizrは、ビデオサポートのためにテストするときに返すtrueかfalseが、返されたブール(ブール値は、JSでのファーストクラスのオブジェクトである)の形式がサポートされているものを指定するプロパティがあります。最初は少し驚きましたが、そのアイデアが好きになり始め、なぜそれが控えめに使用されているのか疑問に思い始めましたか? 基本的に何かが真であるか偽であるかを知りたいすべてのシナリオを扱うエレガントな方法のように見えますが、カスタム戻りオブジェクトを定義することなく、または準備されたコールバック関数を使用せずに定義できる追加情報に興味があるかもしれませんより多くのパラメーターを受け入れます。この方法により、より複雑なデータを返す能力を損なうことなく、非常に普遍的な関数シグネチャを保持できます。 私が想像できる3つの議論があります: インターフェイスが明確でトリッキーではない方がおそらく良い場合、それは少し珍しい/予期しないことです。 これはストローマンの議論かもしれませんが、それは少しエッジケースであるため、JSオプティマイザー、uい、VMで静かに裏目に出るか、または言語仕様のマイナーな変更などで静かに裏目に出ることを想像できます。 より正確な、簡潔で、明確で一般的な-まったく同じ方法があります。 だから私の質問は、追加のプロパティでブール値を使用することを避ける強力な理由はありますか?彼らはトリックまたは御treat走ですか? ねじれ警告をプロットします。 上記は元気な質問です。Matthew Crumleyとsenevoldsenの両方が指摘したように、それは誤った(偽の?)前提に基づいています。優れたJSの伝統では、Modernizrが行うことは言語のトリックであり、汚いものです。要するに、falseに設定された場合、プロップ(サイレントに失敗する)を追加しようとしてもfalseに設定されるプリミティブboolを持つJSと、カスタムプロップを持つことができるが、オブジェクトであるブールオブジェクトは常に真実です。Modernizrは、ブール値falseまたは真実のブール値オブジェクトを返します。 私の元々の質問は、トリックの動作が異なると想定していたため、最も一般的な回答は、コーディング標準の側面(完全に有効)を扱っています。しかし、私はトリック全体を暴く答えが最も役立つと思います(そして、メソッドを使用することに対する究極の引数も)ので、私はそれらの1つを受け入れています。すべての参加者に感謝します!

8
スイッチケースの使用中にデフォルトのケースを追加する必要がありますか?
最近のコードレビュー中に、ブロック内で何もすることがなくても、ブロックが使用されるdefaultすべてのファイルにケースを入れるように頼まれswitchましたdefault。つまり、defaultケースを入れて、何も書いてはいけないということです。 これは正しいことですか?それはどのような目的に役立つでしょうか?

13
職場でのコーディング標準の取り扱い(私はボスではありません)
私は約10人の開発者の小さなチームで働いています。コーディング標準はまったくありません。標準になった特定の事柄がありますが、物事を行ういくつかの方法は完全に異なっています。私の大きなものはインデントです。一部のユーザーはタブを使用し、一部のユーザーはスペースを使用し、一部のユーザーは異なる数のスペースを使用するため、大きな問題が発生します。誰かがIDEを使用して自動フォーマットを行い、彼らが私とは異なる文字をインデントするので、マージするとしばしば競合が発生します。どちらを使用するかは気にせず、全員に同じものを使用するようにしたいだけです。 または、ファイルを開いて、条件と同じ行に中括弧がある行と、次の行にある中括弧がある行があります。繰り返しますが、それらがすべて同じである限り、どれでもかまいません。 私は直接のマネージャーに1対1およびグループ会議で標準の問題を提起しましたが、彼はそれについて過度に心配していません(私と同じ意見を共有する他の人がいます)。インデント文字に関する特定の懸念を持ち出し、彼はより良い解決策は「レポからプッシュ/プルするときにすべてを変換できるようなスクリプトを作成する」ことだと考えました。彼は変えたくないと思うし、この解決策は過度に複雑で、将来的にはメンテナンスの問題になりやすいと思われる(また、これはより大きな問題の一つの現れにしか対応していない)。 職場で同様の状況に陥った人はいますか?もしそうなら、どのようにそれを処理しましたか?標準で上司を売るのに役立つ良い点は何ですか?草の根運動を始めて、興味のある私たちの中でコーディング標準を作成することは良い考えでしょうか?私はあまりにも細心すぎて、手放すだけですか? お時間をありがとうございました。 注:これまでにすばらしいフィードバックをありがとう!明確にするために、1つのスタイルですべてを支配するのは望ましくありません。私は、誰にとっても最も適していることを支持して、何かをする私の好ましい方法を喜んで認めます。一貫性が欲しいし、これが民主主義になりたい。私はそれが誰もが同意するグループ決定であることを望んでいます。確かに、誰もが自分の道を歩むわけではありませんが、グループの改善のために妥協するのに十分な成熟を期待しています。 注2:上記の2つの例に巻き込まれている人もいます。私は問題の核心をより重視しています。それは多くの例で現れます:命名規則、分割されるべき巨大な機能、何かがユーティリティまたはサービスに行くべきである、何かが定数または注入されるべきである、私たちはすべて異なるバージョンの依存関係を使用するか同じこの場合はインターフェースを使用し、ユニットテストをどのように設定するか、ユニットテストを行う必要があるか、(Java固有)アノテーションまたは外部設定を使用する必要があります。続けられた。

5
名前空間を持つスマーフ命名クラスの回避に関する問題
ここからsmurf命名という用語を取りました(21番)。トラブルに慣れていない人を救うために、Smurfの命名は、関連するクラス、変数などの束に共通の接頭辞を付ける行為であるため、「a SmurfAccountViewpass SmurfAccountDTOto to SmurfAccountController」などになります。 私がこれに対して一般的に聞いた解決策は、smurf名前空間を作成し、smurfプレフィックスを削除することです。これは一般的に私に役立ちましたが、私は2つの問題に直面しています。 私はConfigurationクラスを持つライブラリで作業しています。呼び出すこともできましたがWartmongerConfiguration、Wartmonger名前空間にあるため、単に呼び出されConfigurationます。同様Configurationに呼び出すことができるクラスもありますSmurfConfigurationが、それはSmurf名前空間にあるため、冗長になります。私のコードにSmurf.Configurationは横に表示される場所があり、Wartmonger.Configuration完全修飾名を入力するのは面倒で、コードが読みにくくなります。SmurfConfigurationand(ライブラリではなく私のコードである場合)を扱う方が良いでしょうWartmongerConfiguration。 私はServiceSmurf名前空間で呼び出されたクラスを呼び出しましたSmurfService。Smurfジョブを実行する複雑なSmurfライブラリの上にServiceあるファサードです。Smurf接頭辞がなければ非常に一般的なSmurfServiceため、より良い名前のようServiceです。それSmurfServiceはすでに一般的で役に立たない名前であり、スマーフを取り除くことはこれをより明白にしただけだと認めることができます。しかし、、などと命名することもできますがRunner、Launcherそれでも「気分が良くなる」SmurfLauncherのLauncherは、a が何をするのかわからないからですが、a SmurfLauncherが何をするのかは知っているからです。あなたは、a Smurf.Launcherがすることはa と同じように明白であるべきだと主張することができますSmurf.SmurfLauncher、しかし、 `Smurf.Launcherは、smurfsを起動するクラスではなく、セットアップに関連する何らかのクラスであることがわかりました。 これらのいずれかに対処するためのオープンな方法と閉じた方法があれば、それは素晴らしいことです。そうでない場合、彼らの迷惑を軽減するための一般的な慣行は何ですか?

13
変数名の前に変数タイプの略語を付けますか?(ハンガリー記法)[終了]
私の現在の仕事では、コーディングのガイドラインはありません。誰もが彼の望み通りにコーディングしています。会社が小さいので、これは問題ありません。 ただし、最近、新しい記者の1人が、常にハンガリー記法を使用することを提案しました。これまで、私たちの中にはある種のハンガリー記法を使用していた人もいれば、そうでない人もいました。エンジニアリング会社なので、アルゴリズムが適切である限り、コーディングスタイルは実際には重要ではありません。 個人的には、これらの小さなタイプの略語は一種の冗長であると感じています。よく考え抜かれた名前は通常、同じメッセージを伝えます。(さらに、私たちのコードのほとんどは、とにかくコンセプトが存在する、boolまたはfloat存在しない、奇妙なDSPで実行する必要があります)。 それでは、ハンガリー記法についてどう思いますか?使いますか?どうして?

5
メソッドを引数名(型ではなく)で区別するだけで十分ですか?
メソッドを引数名(型ではなく)で区別するだけで十分ですか、それとも明示的に名前を付ける方がよいでしょうか? たとえば、T Find<T>(int id)VS T FindById<T>(int id)。 ById引数名だけを保持するのではなく、より明示的に名前を付ける(つまり、追加する)正当な理由はありますか? 私が考えることができる理由の1つは、メソッドのシグネチャが同じであるが、意味が異なる場合です。 FindByFirstName(string name) そして FindByLastName(string name)

7
マルチスレッドおよびマルチプロセッサプログラミングの非推奨のプラクティスはありますか?
FORTRANとBASICの初期には、本質的にすべてのプログラムはGOTOステートメントで記述されていました。結果はスパゲッティコードであり、ソリューションは構造化プログラミングでした。 同様に、ポインターはプログラムの特性を制御するのが難しい場合があります。C ++は多くのポインターで開始しましたが、参照の使用をお勧めします。STLのようなライブラリは、依存関係の一部を軽減できます。より優れた特性を持つスマートポインターを作成するイディオムもあり、C ++の一部のバージョンでは参照とマネージコードを許可しています。 継承やポリモーフィズムなどのプログラミング手法では、舞台裏で多くのポインターを使用します(ただし、構造化プログラミングでは分岐命令で満たされたコードを生成します)。Javaのような言語は、プログラマーに依存せずにポインターを削除し、ガベージコレクションを使用して動的に割り当てられたデータを管理します。 私の読書では、セマフォを使用していないように見えるマルチプロセスおよびマルチスレッドのプログラミングの例を見てきました。異なる名前で同じものを使用していますか、それとも同時使用からリソースの保護を構築する新しい方法がありますか? たとえば、マルチコアプロセッサを使用したマルチスレッドプログラミングシステムの具体例は、OpenMPです。環境に含まれていないように見えるセマフォを使用せずに、次のように重要な領域を表します。 th_id = omp_get_thread_num(); #pragma omp critical { cout << "Hello World from thread " << th_id << '\n'; } この例は、http://en.wikipedia.org/wiki/OpenMPからの抜粋です。 あるいは、関数wait()およびsignal()を使用したセマフォを使用したスレッドの相互の保護は、次のようになります。 wait(sem); th_id = get_thread_num(); cout << "Hello World from thread " << th_id << '\n'; signal(sem); この例では、物事は非常に単純であり、wait()およびsignal()呼び出しが一致していることを示すには簡単なレビューで十分であり、多くの並行性がある場合でもスレッドセーフが提供されます。しかし、他のアルゴリズムはより複雑で、複数のセマフォ(バイナリとカウントの両方)を使用し、多くのスレッドが呼び出すことができる複雑な条件を持つ複数の関数に分散しています。デッドロックを作成したり、物事をスレッドセーフにできなかったりすることの結果は、管理が難しい場合があります。 OpenMPのようなこれらのシステムはセマフォの問題を排除しますか? 彼らは問題を他のどこかに移動させますか? セマフォを使用しないようにアルゴリズムを使用してお気に入りのセマフォを変換するにはどうすればよいですか?

10
マジックナンバーの削除:「いいえ」と言うタイミングはいつですか?
マジックナンバー(ハードコードされた値)がプログラムに大混乱をもたらす可能性があることは誰もが知っています。特にコメントのないコードセクションを変更するときは、どこに線を引きますか? たとえば、2日間の秒数を計算する関数がある場合、置き換えますか seconds = num_days * 24 * 60 * 60 と seconds = num_days * HOURS_PER_DAY * MINUTES_PER_HOUR * SECONDS_PER_MINUTE どの時点で、ハードコーディングされた値の意味が完全に明らかであると判断し、そのままにしておくのですか?

10
switch文またはlong if…elseチェーンを使用する必要がありますか?
多くの場合、switchステートメントについて聞いたとき、長いif ... elseチェーンを置き換える方法として先送りされています。しかし、switchステートメントを使用する場合、if ... else以外の場合に書くよりも多くのコードを書いているようです。また、すべての呼び出しのすべての変数を同じスコープに保持するなど、他の問題もあります。 ここに私が通常書くフローを表すいくつかのコードがあります(diamのおかげで) String comment; // The generated insult. int which = (int)(Math.random() * 3); // Result is 0, 1, or 2. if (which == 0) { comment = "You look so much better than usual."; } else if (which == 1) { comment = "Your work …

3
これはシンボリックな定数の過剰使用ですか?
私はソフトウェアエンジニアリングが初めてなので、学習演習としてチェスゲームを書きました。私の友人はそれを見て、私のコードが次のように見えることを指摘しました for (int i = 0; i < 8; i++){ for (int j = 0; j < 8; j++){ 彼は代わりにあるべきだと主張した for (int i = 0; i < CHESS_CONST; i++){ for (int j = 0; j < CHESS_CONST; j++){ 私が今考えるのが面倒ではないいくつかのより良いシンボル名で。 もちろん、私は一般的にマジックナンバーの使用を避けることを知っていますが、 この数は変更されません。 番号はコード全体で非常に多くの場所で使用されているため、名前はとにかく説明的ではありません。そして チェスプログラムのソースコードを調べている人は、8の目的を知るためにチェスについて十分に知っている必要があります。 シンボリック定数は本当に必要ありません。 では、皆さんはどう思いますか?これはやり過ぎですか、それとも慣習に沿ってシンボルを使用する必要がありますか?

20
コーディング標準には何が必要ですか?[閉まっている]
良い(読む:役に立つ)コーディング標準には何が必要ですか? コードに必要なもの。 コードにあるべきではないもの。 コーディング標準には、言語、コンパイラ、またはコードフォーマッタが実施するものの定義を含める必要がありますか? 循環的複雑度、ファイルごとの行数などのメトリックについてはどうですか?

4
本当に定数にすべて大文字を使用する必要がありますか?
私は主にパイリントを使用してソースコードをリントするPythonプログラマです。1つを除くすべての警告を削除できます:定数の名前が無効です。名前をすべて大文字に変更すると修正されますが、本当にそうすることになっていますか?私がそれを行うと、ほとんどの変数が定数であるため、コードがいように見えます(pylintによると)。

2
ソフトウェアがWin32名を使用するのはなぜですか?
ソフトウェア/ライブラリがWindowsプラットフォームをサポートしている場合、ほとんどの場合、ディレクトリと変数の名前はwin32。これは、C / C ++プロジェクトで最も一般的です。MinGWプロジェクトのターゲットトリプルでさえ使用しwin32ます。これには理由がありますか?WindowsやMicrosoft Windowsのような適切な名前を使用しないのはなぜですか?命名の選択に法的な障害がありますか? この質問はAPIに関するものではなく、使用中の命名規則に関するものです。ライブラリが他のオペレーティングシステムをサポートする場合、多くの場合、のような固有の名前linux、freebsdまたは必要な特別なサポートを使用します。しかし、Windowsの場合、それは多くの場合省略されてwin32います。

5
プログラミングが遅すぎますか?[閉まっている]
私はこの業界に1年しかいませんでしたが、特定のタスクを見積もるのに問題がありました。これを閉じる前に、はい、私はすでにこれを読みました:見積もりを求められたときにどのように対応しますか?それは私が抱えている問題とほぼ同じです。しかし、より具体的な経験の尺度、定量化可能な、またはおそらく他のプログラマーの平均的なパフォーマンスを探しています。回答の範囲は数週間で、1日程度に割り当てられたタスクのレベルに関する回答を探していました。(これにはQAやドキュメントの送信は含まれず、TDDを使用した場合のテストの作成からテストの送信前のページの作成までの実際の開発時間のみが含まれます) 現在の現在のレートは次のとおりです(ASP.NET Webフォームで)。 現在、1日(8時間)の時間を与えられている場合、既に構築されたアーキテクチャ上に、グリッドリスト(複雑なロジックはなく、作成と読み取りのみ)を含む単純なデータ入力ページを開発できます。 複雑な機能を追加し、ページを更新および削除すると、1日がタスクに追加されます。 ページをゼロから開始する必要がある場合(ソリューションなし、既存のWebサイトなし)、1日かかります。 (常にではありません)しかし、何か新しいことに遭遇したり、まだ行っていない場合は、丸一日かかります。 予想よりも長い見積りをするたびに、他の人よりもかなり遅れていると他の人が思うと感じます。1ページだけでも1日もかからないはずだという期待があったので、心配しています。はい、間違いなく改善の余地があります。常にあります。学ぶべきことがたくさんあります。しかし、私の現在のレートが遅すぎるのか、ただ平均なのか、それとも業界で1年以内の誰かの平均なのかを知りたいです。

10
あなたの会社にはコーディング標準がありますか?[閉まっている]
最近、Microsoftがコーディング標準ドキュメント(All-In-One Code Framework Coding Standards)をリリースしたのを見て、考えました...私が働いている会社には、正式なコーディング標準がまったくありません。開発者は数人しかいませんが、私たちは同じようなスタイルに進化するのに十分な長さで協力してきましたが、それは決して問題ではありませんでした。 あなたが働いている会社には、文書化されたコーディング標準がありますか?いいえの場合、なぜですか?標準があれば違いはありますか?ゼロから標準を書く価値がありますか、それとも別の標準を独自のものとして採用する必要がありますか(つまり、Microsoftの標準を自分のものにする)。

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