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

コーディングスタイルは、ソースコードの読みやすさと理解に役立つ一連のガイドラインです。

14
メソッドの理想的な長さは何ですか?[閉まっている]
オブジェクト指向プログラミングでは、メソッドの最大長に関する厳密なルールはもちろんありませんが、これらの2つの引用符は相反するものであることに気付いたので、ご意見をお聞かせください。 でクリーンコード:アジャイルソフトウェアクラフトマンシップのハンドブックは、ロバート・マーティン氏は述べています: 関数の最初のルールは、関数は小さくなければならないということです。関数の2番目の規則は、関数はそれよりも小さくなければならないということです。関数の長さは100行であってはなりません。関数の長さが20行になることはほとんどありません。 そして、彼はKent Beckから見たJavaコードから例を示します。 彼のプログラムのすべての機能は、わずか2、3、または4行でした。それぞれが透過的に明らかでした。それぞれが物語を語った。そして、それぞれがあなたを説得力のある順序で次へと導きました。それはあなたの関数がどれほど短いかです! これは素晴らしいように聞こえますが、一方で、Code Completeでは、Steve McConnellが非常に異なることを言っています。 ルーチンは、100〜200行まで有機的に成長できるようにする必要があります。数十年の証拠によると、このような長さのルーチンは、より短いルーチンよりもエラーが発生しにくいと言われています。 そして彼は、65行以上のルーチンを開発する方が安価であるという研究への言及を提供します。 この問題について意見が分かれていますが、機能的なベストプラクティスはありますか?

8
末尾の空白が重要なのはなぜですか?[閉まっている]
末尾の空白はプログラマにとっては十分な問題であり、Emacsのようなエディタはそれを強調表示したり自動的に削除したりする特別な機能を備えており、多くのコーディング標準ではすべてのインスタンスを削除する必要があります。なぜだか完全にはわかりません。不要な空白を回避する実際的な理由の1つを考えることができます。人々がそれを避けることに注意を払わないと、コミット間で変更される可能性があり、その後、誰かが削除されたか、スペースを追加しました。 これは既にそれを避けるためのかなりの理由のように聞こえますが、それ以上のものがあるかどうかを見たいです。それでは、なぜ末尾の空白がそれほど重要なのでしょうか?

5
Javaでは、パラメータとローカルに「最終」を使用する必要はありますか?
Javaでは、変数(フィールド/ローカル/パラメーター)をとしてマークしてfinal、それらへの再割り当てを防ぐことができます。一部の属性(またはクラス全体)が不変であるべきかどうかをすばやく確認できるので、フィールドで非常に便利です。 一方、ローカルおよびパラメーターではあまり役に立たないことがわかり、通常final、それらが再割り当てされないようにマークすることは避けます(内部クラスで使用する必要がある場合は明らかな例外があります) 。しかし、最近では、できる限りfinalを使用するコードに出会いました。これは技術的に詳細な情報を提供していると思います。 プログラミングスタイルに自信がなくなったので、finalどこにでも適用することのその他の長所と短所は何か、最も一般的な業界スタイルは何か、そしてその理由は何だろう。
105 java  coding-style  final 

11
「goto」ステートメントはどのようなバグにつながりますか?歴史的に重要な例はありますか?
ループに入れ子になったループから抜け出すために保存することを理解しています。このgotoステートメントは回避され、バグが発生しやすいプログラミングスタイルとして悪用され、決して使用されることはありません。 代替テキスト: 「ニール・スティーブンソンは自分のラベルに「dengo」という名前を付けるのはかわいいと思っている」 オリジナルのコミックを参照:http : //xkcd.com/292/ 私はこれを早く学んだからです。どんな種類のバグがgoto実際につながるのかについての洞察や経験は本当にありません。ここで何を話しているのか: 不安定? 維持不能または読み取り不能なコード? セキュリティの脆弱性? 完全に何か他のもの? 「goto」ステートメントは実際にどのようなバグにつながりますか?歴史的に重要な例はありますか?

10
職場で確立された慣習に従うためだけに、悪いコーディングスタイルに従うべきですか?
私は約1年間仕事で働いています。私は主にCバックエンドのメソッドを使用するGUIインターフェースで作業しますが、通常は戻り値を除いてそれらを処理する必要はありません。私たちのGUIは、制限があるため、かなり合理的に構成されています。 私は、プログラムのコマンドライン部分に関数を追加する仕事をしました。これらの関数のほとんどは、長さが300行で使いにくいものです。特定のアラーム情報を取得するためにそれらの断片を収集しようとしていますが、整理するのに苦労しています。単一の長い関数でテストを行うことで、テストをより複雑にしていることを知っています。 既存の機能のスタイルに従って、すべてを巨大な機能に保持する必要がありますか、それともアラームを独自の機能にカプセル化する必要がありますか? 現在のコーディング規約に反するのが適切かどうか、または単に弾丸を噛んでコードを少し混乱させて書くべきかどうかはわかりません。 要約すると、私は比較しています showAlarms(){ // tons of code } に対して showAlarms(){ alarm1(); alarm2(); return; } alarm1(){ ... printf(...); return; } 編集:みんなのアドバイスのおかげで、ファクタリングされたコードを設計し、彼らが何をしたいのかを尋ねることに決めました、そして彼らがそれをすべて1つにしたいなら、ファクタリングされたコードから切り取って1に戻すことができます大きな機能。これにより、すべてのコードを単一の定義で必要とする場合でも、簡単に記述してテストできるようになります。 更新:彼らはファクタリングされたコードに満足しており、複数の人がこの前例を設定してくれたことに感謝しています。

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

16
ハンガリー記法を使用しないことの利点は何ですか?
私が苦労していることの1つは、ハンガリー記法を使用していないことです。私はしていないだけで、それが何であるかのタイプを参照する変数の定義に行かなければならたいです。プロジェクトが大規模になると、「bool」という接頭辞が付いた変数を見て、0/1値ではなくtrue / falseを探していることを知ることができてうれしいです。 SQL Serverでも多くの仕事をしています。データベース内のすべての変数は言うまでもなく、ストアドプロシージャの先頭に「sp」、テーブルに「tbl」を付けます。 ハンガリーの表記法を実際に使用したくない人は誰もいないと思うので、それを避けます。私の質問は、ハンガリーの表記法を使用しないことの利点は何ですか?また、大多数の開発者がペストのようにそれを避けるのはなぜですか?

14
必要でない場合でも、論理ステートメントで括弧を使用する必要がありますか?
ブール条件がa AND b OR c AND dありAND、操作優先順位がの言語よりも高い言語を使用しているとしますOR。次のコード行を書くことができます。 If (a AND b) OR (c AND d) Then ... しかし実際には、それは次と同等です: If a AND b OR c AND d Then ... 余分な括弧を含めることに賛成または反対する議論はありますか?実用的な経験は、読みやすさのためにそれらを含める価値があることを示唆していますか?それとも、開発者が実際に座って自分の言語の基本に自信を持つ必要があるという兆候ですか?

13
可能な場合、ローカル変数を削除する必要がありますか?
たとえば、AndroidでCPUをオンに保つには、次のようなコードを使用できます。 PowerManager powerManager = (PowerManager)getSystemService(POWER_SERVICE); WakeLock wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "abc"); wakeLock.acquire(); しかし、私はローカル変数powerManagerと考えるwakeLockことができます: ((PowerManager)getSystemService(POWER_SERVICE)) .newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyWakelockTag") .acquire(); 同様のシーンがiOSアラートビューに表示されます。例:from UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"my title" message:@"my message" delegate:nil cancelButtonTitle:@"ok" otherButtonTitles:nil]; [alert show]; -(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{ [alertView release]; } に: [[[UIAlertView alloc] initWithTitle:@"my title" message:@"my message" delegate:nil cancelButtonTitle:@"ok" otherButtonTitles:nil] show]; -(void)alertView:(UIAlertView *)alertView …

10
「役に立たないブレース」を取り除くことを愛するボブおじさんに挑戦したことがありますか?
私は有料のコンテンツを参照するのは嫌いですが、このビデオはまさに私が話していることを示しています。ロバート・マーティンでの正確な12分間はこれを見ています。 そして、彼がこれを次のように変えると、「私がやるべきことの1つは、役に立たないブレースを取り除くことです」と言います。 昔、遠く離れた教育で、そうではないことによって制御されていると考える別のインデントされた行を追加することでバグを簡単に導入できるため、これを行わないように教えられましたif。 ボブおじさんに公平を期すために、彼は長いJavaメソッドを、はるかに読みやすい小さな機能にリファクタリングしています。彼がそれを変更し終えると、(22.18)このようになります: それが中括弧の削除を検証することになっているのかどうか疑問に思っています。私はすでにベストプラクティスに精通しています。この点でボブおじさんに挑戦することはできますか?ボブおじさんはその考えを擁護しましたか?

2
Pythonの相対インポートの何が問題になっていますか?
最近、人気のPythonスタイルチェッカーであるpylintのバージョンをアップグレードしました。 コード全体で弾道的になり、完全なパッケージパスを指定せずに、同じパッケージ内のモジュールをインポートする場所を指摘しました。 新しいエラーメッセージはW0403です。 W0403:相対インポート%r、%rである必要があります パッケージディレクトリに関連するインポートが検出されたときに使用されます。 例 たとえば、私のパッケージが次のように構成されている場合: /cake /__init__.py /icing.py /sponge.py /drink そしてスポンジパッケージに私は書いています: import icing の代わりに import cake.icing このエラーが発生します。 すべてのPylintメッセージが同等に重要であるとは限らないことを理解しており、それらを却下することを恐れていませんが、そのような慣行が悪いアイデアと見なされる理由はわかりません。 私は誰かが落とし穴を説明できることを望んでいたので、この明らかに見せかけの警告をオフにするのではなく、コーディングスタイルを改善することができます(現在の予定です)。

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."); …

22
タブとスペース-あらゆる状況において、あらゆるものに適切なインデント文字は何ですか?[閉まっている]
drupal.orgでホストされているコードのコーディング標準では、2つのスペースを使用してコードをインデントすることを推奨しています。他のサイトでは、タブを使用してコードをインデントすることを推奨しています。 あらゆる状況、あらゆる状況で適切なインデント文字は何ですか?答えを説明してください。

12
弾性タブストップの欠点は何ですか?[閉まっている]
ここを見てください:タブとスペースの典型的な聖戦。 弾性タブストップをご覧ください。すべての問題が解決し、非常に便利な新しい動作が多数追加されました。 弾性タブストップは、タブ対スペースの議論でも言及されていますか?何故なの?弾力性のあるタブストップのアイデアには非常に深刻な欠点があり、誰もそれを人気のあるエディターに実装したことはありませんか? 編集:「なぜ彼らは言及されていない」にあまりにも重点を置いて謝罪します。それは本当に私が意図したものではありませんでした。その質問はおそらく話題外です。私が本当に言っているのは、明らかに有益なアイデアのより広範な採用を妨げるこの最大の欠点は何ですか?(すべてがすでにそれをサポートしている理想的な世界で) (そこには、Microsoft Connectのリクエストすでにだ判明弾性タブストップのVisual Studioの実装は、およびEclipseの要求はあまりにも。プラスについて尋ねる質問があります弾性タブストップを実装する他のエディタは)

9
このような場合に必要な最小限のデータを常に関数に渡す必要があります
IsAdminユーザーが管理者であるかどうかをチェックする機能があるとしましょう。また、管理者チェックは、ユーザーID、名前、およびパスワードを何らかのルール(重要ではない)と照合することで行われるとしましょう。 私の頭の中には、このための2つの可能な関数シグネチャがあります。 public bool IsAdmin(User user); public bool IsAdmin(int id, string name, string password); 私は次のことを考えて、ほとんどの場合、2番目のタイプの署名を使用します。 関数の署名は、読者により多くの情報を提供します 関数内に含まれるロジックは、Userクラスについて知る必要はありません 通常、関数内のコードはわずかに少なくなります しかし、私は時々このアプローチに疑問を呈し、またある時点でそれが扱いにくくなることを認識しています。たとえば、関数が10個の異なるオブジェクトフィールド間を結果boolにマップする場合、私は明らかにオブジェクト全体を送信します。しかし、そのような厳格な例は別として、実際のオブジェクトを渡す理由がわかりません。 どちらのスタイルについても議論があれば、また一般的な意見をいただければ幸いです。 私はオブジェクト指向スタイルと機能スタイルの両方でプログラミングしているので、質問はありとあらゆるイディオムに関するものと見なされるべきです。

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