リーダブルコーディング技術スレ

■ このスレッドは過去ログ倉庫に格納されています
2013/10/11(金) 01:06:21.56
リーダブルコードとは

・読みやすさ、理解しやすさを追及したコードのことです
・読みやすいということはメンテナンス性も高いということです。
・理解しやすいコードはコードレビューも楽になります。
・理解しやすいコードはバグも少なくなります。
・短いほうが優れていることが多いですが、必ずしも短いほうがいいとは限りません。

俺ルール
・書き方の勝負であり、言語の勝負をしないでください。
・標準、非標準に限らずライブラリを使いましょう。
・なければ自分で関数を作りましょう。関数はなるべく汎用的に。

こういうコードを読みやすくするにはどうすればいいでしょうか?
というようなことを語るスレ。需要ありますかね?
2013/12/30(月) 11:04:11.99
デザパタの目的はいくつかあるだろうが、
その中で「カタログ化」だの「パターンに名前をつけて共有」だの、
さもそれこそがおいしいという論調には疑問だね。

>>199を見ろよ。何がFactoryMethodパターンだ。
ただのファクトリメソッドじゃねーか。
「インスタンス化をサブクラスに任せる」っていう点を押さえて理解できてない。
2014/04/10(木) 09:43:21.89ID:VcyeIpim
>>191
これ
203拳聖ピストン矢口
垢版 |
2014/11/13(木) 23:50:19.89ID:yHSquATN
【注目】チョー気持ちいい!
やっぱセクロスするならアイドルっしょ 超有名アイドルグループ所属の美少女が衝撃のAVデビュー
アイドルは裏切らないっ!!

https://www.youtube.com/watch?v=XmP1TRsAe88
2014/11/15(土) 06:53:16.50ID:6Z/ZPh8x
>>190
変更コストがつらくなってこない?
読みやすさでは>>182も好きなんだけど
2014/11/15(土) 14:58:16.01ID:/lNofN3M
>>204
変更コストって言っても
getterでかつ今までの関数名より長いときにしか起こらないし,そこまで気にしなくていいのでは?
1分もかからないっしょ
2014/11/15(土) 16:17:34.44ID:lm0Ap3/W
変更コストよりも
変更したい箇所以外に、並列されてるだけで関係ない行まで修正が発生するのは気持ち悪いと感じる
1行の修正のはずなのにdiffとると何行も出たり まあオプションで消せるけど
2014/11/16(日) 07:07:37.48ID:fuIgZytk
それでタイポして余計なバグが増えて…
ってなったから>>182みたいに揃えるのは止めたなぁ
見栄えだけなら揃えるのが好きだけど
2014/11/16(日) 08:15:35.42ID:fuIgZytk
見栄え→読みやすさ
2014/11/16(日) 08:30:50.35ID:EKSPBw73
returnの位置を揃えるのとタイポは本質的には関係ないじゃね?
2014/11/17(月) 10:22:10.98ID:vQHrlZj+
alignみたいなやつで気軽にガンガン揃えられるような環境ができればいいのだろうか
2014/11/19(水) 00:13:58.01ID:GN47sEav
自分は次の3つを結構その時の気分で描いてしまうのですが、どれかに統一したほうがよいとか、ありますか?
こういうのに対するコーディング規約とかも、会社によってはあるんでしょうか?
(ちなみに3は否定を使わない事でif文が素直に読めるかな?という理由で条件を逆にしているだけです)

例1
hash = INVALID_HASH;
if (! data.empty()) {
 hash = ComputeHash(data);
}

例2
if (! data.empty()) {
 hash = ComputeHash(data);
} else {
 hash = INVALID_HASH;
}

例3
if (data.empty()) {
 hash = INVALID_HASH;
} else {
 hash = ComputeHash(data);
}
2014/11/19(水) 00:41:55.06ID:eeZRz+g3
>>211
hash = data.empty() ? INVALID_HASH : ComputeHash(data);
213デフォルトの名無しさん
垢版 |
2014/11/19(水) 05:42:14.41ID:3mSy2rZk
hash = INVALID_HASH;
hash = ComputeHash(data) if (! data.empty());
2014/11/19(水) 12:53:45.74ID:GN47sEav
>>212
なるほど、代入が1命令で済むなら参考演算子の方が見やすいですよね。
ちなみに複数行にわたる時はどうします?

>> 213
説明不足でした、C言語を想定していました。
ちなみにこの書き方だと、同じ変数に対する代入が二つ連続しているだけのように(ぱっと見)見えませんか?
1行目の代入って無駄じゃね? と一瞬思わせてからの2行目、みたいな。
2014/11/19(水) 13:24:54.27ID:xQuvo0yG
俺は>>212じゃないけど、

> なるほど、代入が1命令で済むなら参考演算子の方が見やすいですよね。
代入が1命令というより、代入した後は変数の値を変更しないためだな。
変数は代入文とともに宣言し、その後は変更してはならない。
関数型言語の考え方よ。

なので>>213はだめだね。値を書き換えてるから。
2014/11/19(水) 13:29:08.73ID:xQuvo0yG
>>214
> ちなみに複数行にわたる時はどうします?

三項演算子でも見やすく書ける。

場合によってはハッシュを使う。
Perlで書くけど、

my $value = {
 key1 => 'value1',
 key2 => 'value2',
 key3 => 'value3',
}->{$key} || 'other';
2014/11/19(水) 20:19:45.26ID:eeZRz+g3
>>214
>ちなみに複数行にわたる時はどうします?

hash = data.empty() ? (
    INVALID_HASH
  ) : (
    ComputeHash(data)
  ) ;

理屈は >>215、いわゆる参照透明性のことで、
関数型言語や Ruby のような関数型プログラミングに適した言語ならではのコード
・Rubyによる関数型プログラミング
 http://www.h6.dion.ne.jp/~machan/misc/FPwithRuby.html

なお Ruby には C と同様な条件演算子(三項演算子)もあるけど、
複数行にわたる場合には if 式を使うのが普通

hash = if data.empty()
    INVALID_HASH
  else
    ComputeHash(data)
  end
218214
垢版 |
2014/11/20(木) 00:50:43.10ID:dK3PPRDP
最初の話しとはズレるんですが、宣言と同時に初期化し、それ以降の代入を極力避ける
というスタイルをC/C++で言い換えると、積極的に const をつける という事になりますかね。
変数をなるべく const 宣言するというのは、キーワードconstが目印になって宣言箇所がすぐにわかるので
個人的にも好きですね。ただ関数の非ポインタ引数にconstをつけるのは煩わしく思いますが。
2014/11/20(木) 00:55:42.04ID:8SWsMjHc
それより条件式の比較演算子の省略と条件式内での関数呼び出しをやめてほしい
2014/11/20(木) 11:12:42.88ID:nwROesTX
>>219
それは十分シンプルで十分意味がわかるならば問題ないよ。

いるんだよね。ルールを守ることが目的になってる奴って。

× 書き方を統一しようとする
○ わかりやすいように書く

わかりやすいならば、どんな書き方だっていいんだよ。
どうせ書き方なんて些細な事なんだし。
2014/11/20(木) 11:40:07.19ID:jeSKdYmy
まあ比較演算子の省略はわかればいいんだけど
if文の条件式で関数呼ばれると単にデバッグが面倒なんだよね
これは別の問題か
2014/11/20(木) 17:57:21.94ID:B4HwyTzw
えっ
2014/11/20(木) 18:25:29.28ID:d0Ca/Au6
if (func()) { }

ではなく

result = func();
if (result) { }

こういうこと?
2014/11/20(木) 18:35:58.57ID:d0Ca/Au6
比較演算子を省略しないとこうか
result = func();
if (result == true) { }

真偽値だったら省略したくなるな〜俺は
2014/11/21(金) 10:27:03.29ID:09t/alwf
そうそう
C言語って既定の真偽値型ないし
2014/11/21(金) 10:53:54.88ID:09t/alwf
ごめんやっぱリーダーブル関係ないね
2014/11/21(金) 13:24:31.65ID:Y2Jui1fN
Cだったら
if (result == true) はダメでしょ。resultが非0かつ非1だったときに困る。
if (result != false) にしないと。
結局真偽値判定は比較演算子使わない方がいいんでない?
2014/11/21(金) 13:47:31.12ID:18AXju9B
真偽値を直接返す関数を作らなければいいのかな
2014/11/21(金) 14:12:52.15ID:Mc3QBWVu
変数名をresultではなく、 doneやcompleteのように状態を表す言葉にすればいい。
if (done) { }
2014/11/21(金) 14:14:08.05ID:biiemfBm
if (expr == TRUE) とか書くのは馬鹿げている、とcomp.lang.c FAQの回答にもある。
http://c-faq.com/bool/bool2.html 単に if (expr) と書くべき。
2014/11/22(土) 03:29:01.87ID:CZJjmAQJ
真偽値の場合、doneかisDoneにするかで迷う時がある。
2014/11/22(土) 04:07:44.39ID:FS7ceVya
結局どーんすんの
2014/11/22(土) 05:06:36.83ID:CZJjmAQJ
たまにいずどーんにすんの
2014/11/22(土) 11:35:45.69ID:HicAMECL
いやexprは関係演算子以外から導くべきではない、って話だろ
2014/11/22(土) 16:46:09.25ID:jgE9Y6q3
if(variable == undefined)
236デフォルトの名無しさん
垢版 |
2014/11/22(土) 19:28:06.50ID:Le0NeUvk
職場のスパゲティソースのメトリクス値がやばすぎるんで

今度大幅に直そうという話はあがったものの
全く手がついてないんだけど

どういうふうに課員を指導したらいいんだろう
2014/11/22(土) 22:08:19.55ID:6LKk2FqN
同値変形のやり方を練習させろよ
2014/11/22(土) 22:09:52.26ID:+O+q8SCA
それは、どうちて?
239デフォルトの名無しさん
垢版 |
2014/11/23(日) 08:18:15.22ID:zrTQYxev
>>220
こーいう人ってなんなん?

分かりやすいだけがルールじゃないし、
分かりやすい定義が曖昧だから、ルール作って
こーいう意識もってやりましょうってのがルールなのになんで勝手なことするの
2014/11/23(日) 08:46:26.24ID:hspGDGDv
そういう人が言う「分かりやすいコード」って
基本的に誤解しやすいコードが多い
2014/11/23(日) 08:59:26.38ID:DxJUdIe1
>>200がプロだって前提で言うと、
>>200みたいな意見は研究所出身の人に多いね。

で、そういう人の書いたコードは、実際にモノに組み込んで
テストすると大量のバグが露見する(机上、単体テストはOKて言ってたにもかかわらず!)
2014/11/23(日) 09:00:06.86ID:DxJUdIe1
失礼、>>200ではなく>>220でした。
2014/11/23(日) 09:16:30.23ID:rJ+2DU/G
>>242
それはルールを守らずに,独自のわかりやすい方法で書いたからってこと?
2014/11/23(日) 09:34:54.26ID:0xPoVd9P
一貫性の欠いたフレームワークなんて作られた日には使えたもんじゃないだろ
2014/11/23(日) 11:55:45.10ID:c84onc2P
独自のわかりやすいコードっていうのを見てみたいわw

わかりやすいコードっていうのは、独自じゃない。
多くが○○スタイルみたいな言い方で呼ばれてる。
もちろんいろんなスタイルがあって、わかりやすいスタイルというのは
一つではないが、わかりやすいという点では共通してる。

わかりやすいのに、バグがでまくるとか矛盾してるってw
2014/11/23(日) 12:50:11.85ID:Pyfj4pkz
C言語で
#ifdef DEBUG
printf(var);
#endif
が1つの関数に頻出するコードは非常に読みにくい

今やらされてる組織内独自のフレームワークのコード
2014/11/23(日) 12:59:40.43ID:K4bM7kRY
>>246
プリプロの記法はもうちょっとなんとかならないものか?#if/#ifdef/#endif を一行で書ければいいのだが‥
2014/11/23(日) 13:20:52.44ID:hspGDGDv
>>245
本人はわかりやすいつもりで書いてるコードが該当するんじゃね?
省略できるものは全部省略しちゃうとか。
2014/11/23(日) 15:02:18.53ID:E8ar0Vq9
こうだろ
DBGP(var);
2014/11/23(日) 21:25:37.37ID:c84onc2P
>>248
> 本人はわかりやすいつもりで書いてるコードが該当するんじゃね?
> 省略できるものは全部省略しちゃうとか。

だからそれがどんなのかってこと。
例えば、単語を省略して書くのは
わかりにくいとされている。
2014/11/23(日) 21:27:09.08ID:c84onc2P
>>246
それ、明らかにわかりにくいコードだよね。

わかりやすいコードとして考えられたのではなく、
単にやっつけ仕事でifdef DEBUGを入れたのだろう。

一般的な仕組み、例えばsyslog当たりを使えば
分かりやすくなるよね。
2014/11/23(日) 21:27:34.82ID:cV5L5A+9
#ifdef NDEBUG
#define DEBUG_ONLY(x)
#define RELEASE_ONLY(x) x
#else
#define DEBUG_ONLY(x) x
#define RELEASE_ONLY(x)
#endif
253241
垢版 |
2014/11/24(月) 00:06:43.37ID:/hENsJtv
な〜んかID:c84onc2Pの癇に障ったみたいなので一応補足すると、
別に>>220みたいな意見を持つ人全員がバグ量産機だなんて言うつもりはないよ。

ただ、プロとして仕事する以上、コーディング規約に沿ったものでなければ
納品できない開発なんてざらにあるんだよね(有名所だとIEC61508とか)。

釈迦に説法かもしれんが、分かり易いとテストし易いは、似てるようで別物。
技術力が充分でないのに「分かり易ければOK」ていう人は往々にして
テスト漏れ仕込むってことを愚痴りたかっただけ。>>241は完全に個人的な経験からくる偏見だな。ごめんね。
2014/11/24(月) 00:10:37.50ID:LP7Sk3Ho
プロとか言い訳すんなやw

「コーディング規約に沿ったものでなければ 納品できない」
というのが、理由であって

わかりやすくするためではないだろ。

クライアントが望むなら、けばけばしいデザインのサイトだって作るさ。
だがそれは、クライアントの指示でだめなことをしているのであって
それが正しいと思ってはいけない。

今ここに、クソなクライアントはいないんだぜ?
2014/11/24(月) 00:14:44.32ID:/hENsJtv
いや、言い訳じゃなくて、契約の問題ですし。。。常識でしょ?
2014/11/24(月) 00:19:33.68ID:LP7Sk3Ho
スレタイ読んでね。リーダブルコーディング技術スレ。

リーダブルなコードのための話であって、

契約で〜とかいうのが理由ならそれは無関係だろ。
2014/11/24(月) 00:22:07.34ID:3/CdPMI5
プロか否か、常識か否か、
これを早々に持ち出す姿勢w
2014/11/24(月) 00:25:05.80ID:ALHBj7yp
>>249
そう書いてあればまだ読みやすいのにひどいコードだよ全く
あくまでメンテナンス性最悪なコードの例として出したんだけどね

>>253
横からだけど一言多いなんじゃないかな
2014/11/24(月) 00:25:55.45ID:LP7Sk3Ho
プロとか常識とか言い出す奴は
信用してないわw

だってそれ、単なる虎の威を借る狐だもの。
それに、虎ですらないかもしれないしな

俺の信じる、虎さまはこうおっしゃってる。
だから信じなさい。みたいなw

俺が定義するプロはこういうものなんだ。
お前はプロじゃないのか!みたいで
どっかの宗教と同じ。お前は(俺らの)神を信じないのか!
2014/11/24(月) 00:27:15.22ID:LP7Sk3Ho
プロとか常識とかクライアントが決めたこことか無視しようぜ

わかりやすいコードとはなにか?
これだけで考えよう。
2014/11/24(月) 00:27:26.67ID:/hENsJtv
う〜ん、何か余計に癇に障ったみたいだね。
不覚にもスレ違いな話題に誘導されちゃったから、しばらく黙ってるは。

以下↓本来のリーダブルコーディング技術スレ
2014/11/24(月) 00:30:38.62ID:LP7Sk3Ho
まあ、俺は最初から、わかりやすいコードの
話しかしてないんけどねw

○な書き方、△な書き方、どっちがわかりやすい?
の答えに、どちらでもわかりやすい。という答えがあるのは事実

だから複数のコーディング規約が存在するわけで。

書き方を(自分の好きな書き方に)統一すると、気持ちいかも知れないが
わかりやすさの点から見れば、どちらでもいいことが多い。
2014/11/24(月) 00:34:18.09ID:cBWQwcU/
>>262
>>254 >>259
2014/11/24(月) 00:35:36.40ID:LP7Sk3Ho
>>263
全部俺が言ったことだなw
2014/11/24(月) 00:36:13.26ID:LP7Sk3Ho
あ、まとめてくれてありがとよって
いうところかw
2014/11/24(月) 00:50:24.64ID:VgrvAE4c
>>246
エディタの置換コマンドで
一行に置換してしまえばいいんじゃないか?
2014/11/24(月) 00:59:19.90ID:ALHBj7yp
>>266
読むぶんには読めるけど書き換えはさせてもらえない
なのにコード読まないと処理が理解できないというコード

リーダブルと真逆なものを上げることで参考になればいいなと思って
2014/11/24(月) 01:04:11.30ID:LP7Sk3Ho
> 読むぶんには読めるけど書き換えはさせてもらえない
可愛そうだよね。まあ、社内規則だからw

で、ここはリーダブルなのかはどういうことかって話すスレだから
社内規則で変えられないとかはどうでもよくて。

じゃあリーダブルなのはどういうコードかってことで、
意見を集めましょう。

ってもうみんな書いたか? 俺はsyslogって書いた。

デバッグ出力をするために再コンパイルが必要っていうのも
変な話なんだよね。そもそもオプションで指定すればいいと。
デバッグ出力機能を持っている。という所まで仕様。
で、こういう仕様を考える人、そこまで頭が回る人が、いないんだろうね。
2014/11/24(月) 01:05:10.00ID:cBWQwcU/
只のデバッグプリントなら読み飛ばせばいいだけじゃん

リーダブルの真逆てコードの意図が伝わってこないものを言うんじゃない?
2014/11/24(月) 01:06:14.43ID:cBWQwcU/
どうでもいいけど、syslogでデバッグって相当頭悪いか、ぬるい開発だな
2014/11/24(月) 01:10:43.53ID:LP7Sk3Ho
おいおい、syslogでやるのはデバッグプリントであって
デバッグそのものじゃないぞw

syslogにあるだろ。プライオリティdebugのことだよ。

http://www.atmarkit.co.jp/ait/articles/0209/07/news002_2.html
> プライオリティ(priority)
>
> priorityは、プログラムが出力するメッセージのうち、ログのレベルの重要度を設定します。
>
> priority 内容
> debug デバッグ情報
> info 情報
> notice 通知
> warn 警告
> err 一般的なエラー
> crit 致命的なエラー
> alert 緊急に対処すべきエラー
> emerg システムが落ちるような状態
> 下になるほど重要度が高い

なんでこんな基礎的を説明せにゃならんのだw
2014/11/24(月) 01:11:55.52ID:LP7Sk3Ho
既に世の中にあるものを使わずに(知らずに)
少ない知識でもやれるぜって考えで
オレオレで実装するのも、リーダブルにならない原因の一つだよね。
273デフォルトの名無しさん
垢版 |
2014/11/24(月) 06:48:20.80ID:owm7UG/9
なぜ、人はアンリーダブルを求めるのでしょうか?
人は生きて、死ぬだけの存在でありながら、
存在するということに意味を持たせ、生と死をより複雑なものにしようとしました。

本来、人は無駄を好む存在です。
オートメーション、自動化、リーダブルなどというものは、
将来、オートメーションにより追いやられた人々により破壊されることが目に見えているのですから、
破壊されるために効率化を豪語し、効率化に勤しむ人々がいることに、
私は含み笑いを抑えることができません。
2014/11/24(月) 07:00:20.21ID:yM+Y0wwR
リーダプルは、時間的にどの程度のスパンで考えるのかな?
2014/11/24(月) 07:09:48.66ID:g28cqnpj
読みやすさは主観であり、人により異なる。
全員に対して読みやすさを一定量担保するために、コーディング規約を作る。

デバッグプリント関係は、『CODE COMPLETE』 第八章防御的プログラミングがお勧め。
2014/11/24(月) 07:30:10.66ID:NWUcXEp0
> 読みやすさは主観であり、人により異なる。

つまり、人によっては、Aという書き方が読みやすく、
別の人は、Bと言う書き方、Cと言う書き方が一番読みやすいということ

> 全員に対して読みやすさを一定量担保するために、コーディング規約を作る。

たとえば規約でBという書き方に統一する。
さて、統一することによって、Aという書き方は読みにくということになるのか?
Bという書き方は読みにくいということになるのか?


もちろん違う。なぜなら、
> 読みやすさは主観であり、人により異なる。
と書いてあるように、人によって、AやCが読みやすいということに変わりはないからだ。

つまりなりが良いたいかというと、
AでもBでもCでも読みやすいことには変わりないということ。

統一するのは、読みにくい書き方を無くすのが目的であり、
読みやすい書き方は複数あるということは真実だし、
読みやすい書き方ならどれでもいいことにかわりはないのである。

だからこそAとCは自分のに取っては一番ではないが
それでも読みやすいならばどれでもいいから、その規約に従うのである。
277デフォルトの名無しさん
垢版 |
2014/11/24(月) 07:35:54.08ID:tFEPR/wR
>>220
>× 書き方を統一しようとする
>○ わかりやすいように書く

世間に受け入れられているコーディング規約に従うのが一番わかりやすいんだから
それ対立軸じゃなくて両方○になるか両方×になるかだろ
2014/11/24(月) 07:42:27.18ID:NWUcXEp0
> 世間に受け入れられているコーディング規約

が複数あることを忘れてない?

わかりやすい書き方は一つじゃないんだよ。
2014/11/24(月) 07:55:36.62ID:tFEPR/wR
>が複数あることを忘れてない?

忘れてない

>わかりやすい書き方は一つじゃないんだよ。

もちろん

で?
2014/11/24(月) 07:55:49.98ID:cBWQwcU/
>>271
当たり前なことをわざわざ引用付きで語んなよw
お前がぬるい開発しかしてないことはよく分かったから
2014/11/24(月) 08:01:29.70ID:NWUcXEp0
>>280
お前、「お前は語るな」と「俺はそう思ってる」の
2つのことしか言ってないぞ。

何か言い返せよw
2014/11/24(月) 08:03:05.74ID:NWUcXEp0
>>279
で?と言われてもな。

最初から言っているように、

わかりやすいコードを書くことが目的であって
書き方を統一することは目的じゃないんだよって話
言い換えると、わかりやすければ統一する理由はない。

本当の目的を忘れるなって話。
2014/11/24(月) 08:06:01.78ID:tFEPR/wR
>言い換えると、わかりやすければ統一する理由はない。

いや、AとBの両方わかりやすくても、一つの製品にAとBが混在してたら駄目だろ
2014/11/24(月) 08:28:02.98ID:tFEPR/wR
デバッグ出力でsyslogって発想は無いなぁ

最初に批判されてるが
#ifdef DEBUG
は普通のイディオムだから小さなプログラムなら悪くはないし
もう少し大きな規模になってロギングフレームワークを検討しようというなら
もっと抽象度の高いレベルでちゃんとしたフレームワークを採用するだろ
(C++ならglogとか。言語ごとにあるだろ)
285デフォルトの名無しさん
垢版 |
2014/11/24(月) 08:38:23.76ID:owm7UG/9
>>282
君のコードは分かりにくい。はい。論破。

だから、ルールを決めるんだよ。お分かり?
2014/11/24(月) 09:04:52.85ID:NWUcXEp0
>>283
> いや、AとBの両方わかりやすくても、一つの製品にAとBが混在してたら駄目だろ
なんで? それで問題が起きたことなんて無いよ。

どうせコーディング規約なんて誰かが我慢すれば済むようなもんでしょ?
一つに統一することで、他の人が我慢するという横暴(笑)が成り立つんだから。
全員が我慢するか、一部の人だけ除いて我慢するかの違い。

>>285
なんで、世の中で普及してあるコーディング規約の
一つを使ってるのにわかりにくいんだよw
馬鹿じゃないのか?
2014/11/24(月) 09:05:43.57ID:NWUcXEp0
>>284
> デバッグ出力でsyslogって発想は無いなぁ
無いなぁと言われてもね。

ほとんどの有名どころのオープンソースはsyslog
でデバッグ出力している。
それが事実じゃね?
2014/11/24(月) 09:13:38.29ID:tFEPR/wR
>なんで? それで問題が起きたことなんて無いよ。

すまんが、2ch で匿名でここから議論する気はないので退散。論破と思うならそれで構わん。
教育しても俺に見返りないし。
2014/11/24(月) 09:16:25.55ID:NWUcXEp0
はい、論破と思いますよ?
別にわざわざいなくてもいいのに。
2014/11/24(月) 09:24:55.73ID:tFEPR/wR
このページの「デバッグライト」とか
http://www.pro.or.jp/~fuji/mybooks/cdiag/cdiag.6.3.html

ここでは、DebugPrintというマクロを用意しているわけだが、一度これを用意したら全員がDebugPrintを使わなきゃ意味ない
DebugPrintを使ってるコードと#ifdef DEBUGを生で使っているコードが両方存在するのは最悪で。

DebugPrintを用意することで、その定義を変えればデバッグ先をsyslogにしたりできるだろ
ところが、生で#ifdef DEBUGされてるコードが残ってたらそこで変更漏れのバグになる
DebugPrintなど無くて全員生で書いていれば、変更時には漏れがないように注意するからまだマシ
DebugPrintを用意したのに使ってないというのは本当に最悪

これがまず、統一するってことな。
2014/11/24(月) 09:27:04.25ID:tFEPR/wR
もう一つは、
そもそもこういうDebugPrintみたいなのは車輪の再発明なので
今時こんな「オレオレフレームワーク」を作るのは間抜け
(元ページはCopyright 1996)
あるものを使うのが普通
2014/11/24(月) 09:44:09.94ID:J2WKp7i1
>>286
同じものは同じように見えるようにしておかないと、コードレビューしづらい。
コードに手をいれるときにいちいちスタイルどうするか迷うのも無駄。

・・・コードレビューしないなら問題は起こらない。
まわりと明らかにスタイルの違うコードを混入させて気にしないなら問題は起こらない。
つまりそういうことなんだろうと思ってる。
2014/11/24(月) 10:02:33.90ID:NWUcXEp0
>>291
> あるものを使うのが普通

だからsyslogだろ?

もしかして、syslog(ライブラリ)を使っていれば
標準出力や任意のファイルに出力できるって知らない?
2014/11/24(月) 10:06:55.47ID:XbvFM8cR
>>287
> ほとんどの有名どころのオープンソースはsyslog
> でデバッグ出力している。

サーバーソフトだけじゃね?
クライアントソフトの例を 10個ぐらいあげてみて
2014/11/24(月) 10:28:26.69ID:g28cqnpj
ログは異常管理にdebugレベルを含めて使うけど、
開発時のデバッグには使わないかな。
2014/11/24(月) 10:41:04.30ID:tFEPR/wR
>>294
サーバプログラムだってsyslog決め打ちなんて少ないと思うが。ログ出力先の選択肢の一つとしてsyslogがあるだけだろ。

Apache httpd (http://httpd.apache.org/docs/current/logs.html)
エラーログは普通はファイルに書かれます (通常 Unix システムでは error_log、Windows と OS/2 では error.log)。 Unix システムではエラーを syslog や パイプでプログラムに送る ことができます。

Postgresql (https://www.postgresql.jp/document/9.3/html/runtime-config-logging.html)
PostgreSQLは、stderr、csvlogおよびsyslogを含めて、サーバメッセージのログ取得に対し数種類の方法を提供します。

Tomcat (http://tomcat.apache.org/tomcat-6.0-doc/logging.html)
Logging in Apache Tomcat is implemented with the help of Apache Commons Logging library.

有名どころのオープンソースでログ機能がsyslog決め打ちって何かあるの?
2014/11/24(月) 10:57:11.56ID:tFEPR/wR
>>295
「デバッガを使え」みたいな方法論と、デバッグ出力をどうするかは別だと思うが、そういうこと?どうしてる?
2014/11/24(月) 11:23:35.39ID:g28cqnpj
>>297
システム運用中に異常処理を行った場合、管理者にその旨を通報する用途でログを使う。
あくまで、システムの一部なので、リリース後でも取り除かれない。

開発時にだけ有効で、リリース時に無効にする用途には使わないかなって話。
2014/11/24(月) 11:56:52.74ID:NWUcXEp0
開発時のみで使うものだったら
ifdefで残したりしねーよ?

そういう残してあるコードが
じゃまだってのが、話の始まりだろ?
2014/11/24(月) 12:01:55.48ID:tFEPR/wR
>>298
ああ、理解した
デバッグエイドとログを完全に別の概念として使い分けるということか
プリプロセッサ命令のある言語だと確かにそれがスマートだな、なるほど
■ このスレッドは過去ログ倉庫に格納されています