1 名前:デフォルトの名無しさん [2007/10/28(日) 15:59:01 ] コーディングスタイルについて熱く語れ
256 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 01:22:53 ] なるほどね。いわゆるCのstatic関数ってのは推奨されてないのかな。 そこまで意識して気をつけようとも思わないけど、気が付くと疑問に思う。
257 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 01:25:22 ] >>256 関数や変数だけならいいんだけど、 C と違って .cpp ローカルな struct や enum も グローバルに置いてると定義がかぶってアウトだから、なるべく無名名前空間を使う 癖をつけておいたほうがいいよ。
258 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 12:56:17 ] >>257 それだけなら別にアウトじゃない。 規格としてはダメかもしれんが。 ただ、メンバ関数はリンケージをファイル スコープにできないから、無名名前空間が 絶対必須。
259 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 17:20:06 ] addとappendや、eraseとremoveの使い分けってどうしてる?
260 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 17:28:41 ] addは追加、appendは付加。 eraseは消去、removeは除去。ついでに言えばdeleteは削除。 まぁ、それでも巧く決まらないときは既存ライブラリの命名に倣ったりするが。
261 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 17:48:20 ] ロングマンで一通り調べてみた appendは追記みたいな 順序付きリストの末尾に付け加えるということなのか add⊇append 議論領域をUとすると remove A from Bの操作の後はA B∧A∈Uだけど erase A from Bの場合はA B∧A Uとまぁそんな感じ? delteはcomputer上での操作を強調してあったけど メモリから消えるって事だからプログラミングっていう議論領域だとeraseに近いのかな?
262 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 21:03:27 ] erase(A) はAによって識別される何かを削除する delete(A) はAを削除する remove(A) はAを取り除くが削除されるかどうかは仕様次第
263 名前:デフォルトの名無しさん mailto:sage [2009/02/22(日) 13:37:57 ] append は後ろに追加するような意味だから 例えば map や set には使えない でも add なら使えると思う
264 名前:デフォルトの名無しさん mailto:sage [2009/02/22(日) 17:56:13 ] 使われ方みると前 insert,後 appendで対って感じだな
265 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 13:48:14 ] ちなみに、先頭に加えるのは prepend っていう。
266 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 14:29:25 ] 難しく考えないでAddFirst/AddLastでいいと思う javaや.NETのコレクションではそうなってる
267 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 16:32:13 ] 似た言葉をニュアンスの違いで使い分けたりするのはやめるべき
268 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 10:44:11 ] ははは
269 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 16:59:50 ] 突然このスレにたどりついた俺は if(hoge(var) == 0) じゃなくて、絶対 if (0== hoge(var)) 派だ なぜなら左辺が変数のときに if(var == 0) じゃなくて、絶対 if (var = 0) と書いてバグらせてしまう 奴がプロジェクトに出るからだ(中々見つけにくいんだな、このバグ) 後、関数の出口の return が必ず末尾の一つだけってプロジェクトに 参加したことがあるけど、処理の条件が変わっても、メモリリークが 出にくい構造になるのは良いと思った
270 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 17:10:55 ] > 後、関数の出口の return が必ず末尾の一つだけってプロジェクトに > 参加したことがあるけど、処理の条件が変わっても、メモリリークが > 出にくい構造になるのは良いと思った これは結局ケースバイケースで、関数的(副作用がない)なコードが主か、 副作用とかバリバリか、で変わってくるよね。 あと、例外的な場合の処理にgotoを許すか、とか。
271 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 17:44:38 ] >中々見つけにくいんだな、このバグ 最近のコンパイラなら確実にwarning出すんでそうでも無い
272 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 22:26:29 ] ついでに言えば、比較対象が0ではなくて変数だったらやっぱり検出できないから殆ど意味がない。
273 名前:デフォルトの名無しさん mailto:sage [2009/04/18(土) 01:02:21 ] RAII 使え、 const 付けとけ、って話でもあるな。
274 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 17:39:24 ] まぁOOPが不可能なプロジェクトなら、そういうリーク対策にも意味はあるかもしれんね OOPが可能なら、RAII(厳密にはデストラクタによる資源解放)の徹底も可能だよな
275 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 12:09:43 ] >>269 C/C++で、zeroとの比較をするのであれば、 if (hoge(var) == 0)とぜすに、if (!hoge(var))の方が目的がはっきりする 比較する数値がたまたまzeroであるのなら、数字で比較すべきではない 定数化された変数を用いるか、#defineマクロで名付けられた定数を用いるべきだ よって条件式に、数字が書き込まれている時点で何かおかしなコードであると思われる
276 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 12:32:58 ] >>275 しかしstrcmpの時ははゼロを扱っていいと思う。
277 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 12:38:20 ] おばかのきわみ > #define ZERO 0
278 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 12:55:27 ] >>276 その場合、BASE_CMPとか名付けて比較したほうが分りやすい予感
279 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 13:11:50 ] >>278 少なくとも俺は今、BASE_CMPナニソレ?(´・ω・`) ってなってるが。
280 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 13:12:58 ] >>278 CMP_OBJCTじゃね?
281 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 13:15:20 ] >>275 あほか。 「ゼロと比較する」という処理ならコードにそのまま書いたほうがいいだろjk
282 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 13:22:58 ] #define STREQ(a, b) !strcmp((a), (b)) みたいなマクロに
283 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 13:28:21 ] >>282 それなら辛うじて許せるような気もするが、 strcmpくらいそのまま使えよ、ってのが正直なところ。 strcmp(a, b) < 0 // a < b strcmp(a, b) > 0 // a > b strcmp(a, b) == 0 // a == b という、並べて書いた上での法則がせっかくあるのに。
284 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 18:55:48 ] >>278 わかりやすくねーよ。 イディオムはそのままにするべき。
285 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 19:01:39 ] strcmpの場合 比較対象と同等か、大きい、もしくは、小さいだから >>282 よりはマシだろ
286 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 19:04:58 ] >>285 意味不明(´・ω・`)
287 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 19:25:05 ] >>275 > if (hoge(var) == 0)とぜすに、if (!hoge(var))の方が目的がはっきりする そんなバナナ 0との比較なら素直に==0、真偽値としての比較ならそのまま、ってのが普通の感覚だと 思うけどなぁ。まぁ最後は主観だからあれだけど。 0をマクロに入れるなんてのは論外。
288 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 19:51:24 ] NULLの分らんアホばっかだな
289 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 20:10:03 ] >>287 0との比較の「0」とは何かという話じゃないの?
290 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 20:14:06 ] >>288-289 お前ら二人は一体なにをいってるんだ?
291 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 21:11:58 ] NULL自体が要らないマクロ
292 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 23:12:56 ] 初心者なんですが、if (cond == false)って書き方と if (!cond)ってどちらにすべきですか? ずっと後者だと思っていたのですが、前者もたまに見かけるので わからなくなってしまいました。
293 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 23:50:59 ] >>292 論理定数との比較はそもそもナンセンスなので、前者は論理値に対する理解が あやしい感じがする。 たいした理由じゃないんだけど、どちらかというと後者にしといたほうがいいと思うよ。
294 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 00:27:29 ] >>293 ありがとうございます。このまま後者の書き方を続けていきます。
295 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 10:41:39 ] その cond の名前が ablable とか enabled なら ! allowed のような書き方が良いだろう。 availability とか visibility とかだと、「可視性ですか?」 じゃ頭弱いみたいだから 「可視性は偽ですか」の方が分かりやすいと思う。 専用に enum 作れという話だけど。
296 名前:デフォルトの名無しさん mailto:sage [2009/09/11(金) 19:06:43 ] //これはだめ hoge(foo,bar); //これはおk hoge(foo, bar);
297 名前:デフォルトの名無しさん mailto:sage [2009/09/11(金) 20:49:45 ] www.eetimes.jp/content/3107 1TBS って初めて聞いた。
298 名前:デフォルトの名無しさん mailto:sage [2009/09/11(金) 21:31:02 ] >297 これ思ったけど、1TBSの方が図2のような間違いは簡単に検出できるような。 (単純に /;\s*{/ で検出できる。オールマンスタイルの場合、ツールによってはマッチしない) でも個人的にはオールマンスタイルのが好きだけどな。
299 名前:デフォルトの名無しさん mailto:sage [2009/09/12(土) 07:31:42 ] 俺は1TBSくらいの黒っぽさが好みだな もちろん黒すぎるのは辛いけど、オールマンだとちょっと白っぽく感じる まぁこれはさすがに完全に好みの問題だろうと思うな…
300 名前:デフォルトの名無しさん mailto:sage [2009/09/13(日) 02:47:08 ] そもそも筆者のコメントを打つ位置が気に入らない。 //行末に書くな
301 名前:デフォルトの名無しさん mailto:sage [2009/09/13(日) 03:18:16 ] 俺は//の後にスペースがないのが気に入らない
302 名前:デフォルトの名無しさん mailto:sage [2009/09/13(日) 11:47:43 ] 一番のツッコミどころは比較式の左辺に定数だろ。
303 名前:デフォルトの名無しさん [2009/09/25(金) 00:36:47 ] そもそも if(!x) とか if(!(z=x-N)) とかやることが多いから==使わないな。
304 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 07:48:41 ] 条件式に関数呼び出しを書くなってルールもあったな
305 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 09:26:21 ] へぇ。どういう理屈でそんなルールが認められるのかさっぱりわからんな。
306 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 10:21:31 ] >>305 && や || のショートカットと関数の副作用の関係 f0() || f1() || … f0 が成立すると f1 以降が評価されないってのを知らないやつがいるそうだ なので、こう書かなきゃいけない。とてもうざい。 v0 = f0(); v1 = f1(); … if (v0 || v1 || …)
307 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 10:25:40 ] >>306 それ、 (s && strlen(s) > MIN) とかいう時はどうすればいいの?
308 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 10:59:33 ] int len = -1; if (!s) { len = strlen(s); if (MIN < len) { ... } }
309 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 11:00:20 ] !sじゃなくてsなw 素で間違えた。
310 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 11:26:08 ] そんなルールおとなしく守ってるプログラマなんてほんとにいるの? 何なの?ばかなの?しぬの?
311 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 12:08:10 ] >>310 元請けにコードの監査部隊がいて意地でも書き直させる方法を取っていた うざくってしょうがなかった
312 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 12:10:14 ] その監査部隊を短絡評価の講習要員にすればいいのに。
313 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 21:43:06 ] 308の書き方だと、正しく読めない/書けない奴が居るから仕方が無い。 一方、漏れらに308の書き方を強制しても、せいぜい能率が落ちるだけ。 実戦の世界じゃ、手駒の性能を上げるよりは数を増やす方が効果的だしな。 平均能力UPの為に手駒を減らすより、平均能力を下げてでも手駒を増やそうってのは 冷徹ではあるが正しい方策。
314 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 23:32:37 ] へぼいコーディングルールの話になると、その理論がよくでてくるけど、実際はコーディングルールを 決めてるやつがヘボいだけだろうな。ほとんどの場合。 それに「ヘボいヤツを使うためにヘボいコーディングルールが有効」理論が、本当に正しいかすごい疑問だし。
315 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 23:42:03 ] まぁ俺の持論とは真逆だな ウンココーダの頭数揃えても、精鋭一人にも劣る
316 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 09:34:49 ] > 実戦の世界じゃ、手駒の性能を上げるよりは数を増やす方が効果的だしな。 > 平均能力UPの為に手駒を減らすより、平均能力を下げてでも手駒を増やそうってのは > 冷徹ではあるが正しい方策。 「人月の神話」に燦然と挑戦しているな。 まぁそのような開発分野もあるんだろう。多分。
317 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 09:09:58 ] 「ヘボいヤツを使うためにヘボいコーディングルールが有効」理論は確かに疑問だが、 十分な精鋭を確保できるプロジェクトなんてほとんど無いんだから、大量のヘボが存在 するのは前提だと思う。 加えて上司も無能だと、そのヘボが逐次投入されてチームは恐竜に、プロジェクトは タールの沼に。
318 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 21:53:42 ] >316 そうでもないと思うが。 1つのプロジェクトに投入する人員については、「人月の神話」の理論で良いけど、 複数のプロジェクトに人員を配置する場合は、>313の理論の方が適している。 308みないなルールは大規模なプロジェクトほど多く、小規模なプロジェクトほど比較的フリーだろ? (逆な例もある事は承知している)
319 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 21:57:10 ] 短絡評価が分からないだけならまだしも、「教えても理解できない」という人員なんか さすがに切り捨てても困らないと思うけどな
320 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 22:31:14 ] 簡単なコードを量産するような人海戦術プロジェクトでも、上位の2,3割だけ使って、 のこりはじゃまにならないように遊ばせておいても、あんがい生産性あがるんじゃないかって気もする。
321 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 23:13:59 ] >>318 人月の神話、読んでないか忘れてるだろ。 >>319 短絡評価に限って言えばその通りだけど、教えられても理解できない部分は人によって違うから。 >>320 論文報告を楽しみに待ってる。
322 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 00:10:59 ] どうでもいいけどstrlen()が返すのはintじゃなくてsize_tだよ
323 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 20:40:57 ] ストレンツォ容赦せん!
324 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 14:52:50 ] >>318 つまり、たとえば優秀なプログラマなら3ヶ月で終わる仕事を一年かけて (原則同じくらいの人数で)やるけど、 同時に抱えられるプロジェクト数を増やして会社としてのスケールメリットを得るって話? 要するに節約できるのは総務だの人事だのの管理コストの話であって プロジェクトそのものの効率は上がってないと思うが…
325 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 02:57:19 ] >324 プロジェクトの効率は上がらなくても、利益は上げられる罠。 場合にもよるが。 下手すりゃ投入人員と期間を増やせばその分儲かる。 糞ルールがまかり通ってる現場って、大体は上がこんな思想で動いてる希ガス。
326 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 03:57:31 ] まぁ、その思想を最高だと思って布教しようとしたりしなきゃどうでもいいけどな
327 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 11:55:45 ] javaで public void XXX() throws YYY, ZZZ { } のthrows以下が長くなると80桁超えますけど見やすい折り返し方ないですか? eclipseのデフォルトで整形すると public void XXX() throws YYY, ZZZ { } とやってくれましたけど見づらいな。
328 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 12:44:58 ] >>325 思想とか計算づくで、レベル低いんじゃなくて、ただレベル低いだけなんじゃないの? 効率が利益に結びつかないから、淘汰されないだけで。
329 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 21:42:59 ] >>324 保守要員みたいなところにエース級は投入せんだろ。 むしろ OJT で勉強させるために新人を。。。
330 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 11:51:05 ] >>327 行が長くなるときどう折り返すか ttp://java-house.jp/ml/archive/j-h-b/009166.html#body
331 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 12:09:53 ] C++ 使っててカンマとか演算子の「前」で折り返して、演算子の類が行頭にくるように してたんだけど、 Python 使い出したらそうもいかなくなって、今は微妙な気持ちです。
332 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 12:20:08 ] >>331 英語では普通、カンマやセミコロンなどは単語の後ろに空白なしにつける。当然、改行はその後。 演算子もそれに準じる。
333 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 13:57:32 ] >>331 ( ・∀・)人(・∀・ )ナカーマ .append(foo) .append(bar) .toString(); + fooooooooooooooooooooooo - (baaaaaaaaaar % baaaaaaaaz); = { 11111111111 , 2222222222 , 3333333333 } if ( (cooooooooooooooond) || (baaaaaaaar && bazzzzzzzz) ) 文末を見るより、文頭を見るほうが目の動きが少ない。
334 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 14:05:42 ] . を先頭にもってくるのは許せるが、 , を先頭にもってくるのが許せないのはなぜだろう。
335 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 22:25:29 ] if 〜 else if 〜 else の各節にコメントをつけたいとき、俺はこのように書いているんです。 // こういう場合はこう if (...) { } // こういう場合はこう else { } ところが、節を分断するのはよくないと言う人がいるんですね。それはそれで一理あります。 その人はこう書いている。 if (...) // こういう場合はこう { } else // こういう場合はこう { } このやり方だと、条件式が長くなったり複数行にわたると、ちっと面倒なことになる。 みなさん、if文のコメントはどのように書いていますか?
336 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 22:35:25 ] >>335 if にコメント付いてれば else へのコメントは冗長だろ?考えるだけ無駄。
337 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 23:21:52 ] 冗長なんて言ったらコメントなんて書けなくなる。 それに複数のelse ifがある場合はコメントがあった方がいい。
338 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 00:16:58 ] >>337 お前はなんのためにコメントが書きたいの? コメントを書くことが目的なの?
339 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 01:41:21 ] // コメント if(...) { } else { // コメント }
340 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 02:39:09 ] >>339 俺もそれだ。
341 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 02:43:33 ] 俺はこうだわ。space efficiant!! if(...) { // コメント foo(); } else if(...) { // コメント bar(); } else { foobar(); }
342 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 07:39:57 ] 漏れは内容に応じて使い分けた方が良いと思うけど。 // 分岐全体について。 if( ... ){ // 式について。 // ブロック内の処理&実行条件の概要 } else { // ブロック内の処理&実行条件の概要 } (例) // 〜と〜を切り分ける if( … // 〜をチェック && … ) { // 〜をチェック // 〜の場合、〜する } else { // 〜の場合、〜する }
343 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 14:06:52 ] こうしてる if(...) { // ...なら〜 } else { // 〜(条件についての記述は無し) }