リーダブルコードとは
・読みやすさ、理解しやすさを追及したコードのことです
・読みやすいということはメンテナンス性も高いということです。
・理解しやすいコードはコードレビューも楽になります。
・理解しやすいコードはバグも少なくなります。
・短いほうが優れていることが多いですが、必ずしも短いほうがいいとは限りません。
俺ルール
・書き方の勝負であり、言語の勝負をしないでください。
・標準、非標準に限らずライブラリを使いましょう。
・なければ自分で関数を作りましょう。関数はなるべく汎用的に。
こういうコードを読みやすくするにはどうすればいいでしょうか?
というようなことを語るスレ。需要ありますかね?
探検
リーダブルコーディング技術スレ
■ このスレッドは過去ログ倉庫に格納されています
2013/10/11(金) 01:06:21.56
286デフォルトの名無しさん
2014/11/24(月) 09:04:52.85ID:NWUcXEp0287デフォルトの名無しさん
2014/11/24(月) 09:05:43.57ID:NWUcXEp0288デフォルトの名無しさん
2014/11/24(月) 09:13:38.29ID:tFEPR/wR >なんで? それで問題が起きたことなんて無いよ。
すまんが、2ch で匿名でここから議論する気はないので退散。論破と思うならそれで構わん。
教育しても俺に見返りないし。
すまんが、2ch で匿名でここから議論する気はないので退散。論破と思うならそれで構わん。
教育しても俺に見返りないし。
289デフォルトの名無しさん
2014/11/24(月) 09:16:25.55ID:NWUcXEp0 はい、論破と思いますよ?
別にわざわざいなくてもいいのに。
別にわざわざいなくてもいいのに。
290デフォルトの名無しさん
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を用意したのに使ってないというのは本当に最悪
これがまず、統一するってことな。
http://www.pro.or.jp/~fuji/mybooks/cdiag/cdiag.6.3.html
ここでは、DebugPrintというマクロを用意しているわけだが、一度これを用意したら全員がDebugPrintを使わなきゃ意味ない
DebugPrintを使ってるコードと#ifdef DEBUGを生で使っているコードが両方存在するのは最悪で。
DebugPrintを用意することで、その定義を変えればデバッグ先をsyslogにしたりできるだろ
ところが、生で#ifdef DEBUGされてるコードが残ってたらそこで変更漏れのバグになる
DebugPrintなど無くて全員生で書いていれば、変更時には漏れがないように注意するからまだマシ
DebugPrintを用意したのに使ってないというのは本当に最悪
これがまず、統一するってことな。
291デフォルトの名無しさん
2014/11/24(月) 09:27:04.25ID:tFEPR/wR もう一つは、
そもそもこういうDebugPrintみたいなのは車輪の再発明なので
今時こんな「オレオレフレームワーク」を作るのは間抜け
(元ページはCopyright 1996)
あるものを使うのが普通
そもそもこういうDebugPrintみたいなのは車輪の再発明なので
今時こんな「オレオレフレームワーク」を作るのは間抜け
(元ページはCopyright 1996)
あるものを使うのが普通
292デフォルトの名無しさん
2014/11/24(月) 09:44:09.94ID:J2WKp7i1 >>286
同じものは同じように見えるようにしておかないと、コードレビューしづらい。
コードに手をいれるときにいちいちスタイルどうするか迷うのも無駄。
・・・コードレビューしないなら問題は起こらない。
まわりと明らかにスタイルの違うコードを混入させて気にしないなら問題は起こらない。
つまりそういうことなんだろうと思ってる。
同じものは同じように見えるようにしておかないと、コードレビューしづらい。
コードに手をいれるときにいちいちスタイルどうするか迷うのも無駄。
・・・コードレビューしないなら問題は起こらない。
まわりと明らかにスタイルの違うコードを混入させて気にしないなら問題は起こらない。
つまりそういうことなんだろうと思ってる。
293デフォルトの名無しさん
2014/11/24(月) 10:02:33.90ID:NWUcXEp0294デフォルトの名無しさん
2014/11/24(月) 10:06:55.47ID:XbvFM8cR295デフォルトの名無しさん
2014/11/24(月) 10:28:26.69ID:g28cqnpj ログは異常管理にdebugレベルを含めて使うけど、
開発時のデバッグには使わないかな。
開発時のデバッグには使わないかな。
296デフォルトの名無しさん
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決め打ちって何かあるの?
サーバプログラムだって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決め打ちって何かあるの?
297デフォルトの名無しさん
2014/11/24(月) 10:57:11.56ID:tFEPR/wR >>295
「デバッガを使え」みたいな方法論と、デバッグ出力をどうするかは別だと思うが、そういうこと?どうしてる?
「デバッガを使え」みたいな方法論と、デバッグ出力をどうするかは別だと思うが、そういうこと?どうしてる?
298デフォルトの名無しさん
2014/11/24(月) 11:23:35.39ID:g28cqnpj >>297
システム運用中に異常処理を行った場合、管理者にその旨を通報する用途でログを使う。
あくまで、システムの一部なので、リリース後でも取り除かれない。
開発時にだけ有効で、リリース時に無効にする用途には使わないかなって話。
システム運用中に異常処理を行った場合、管理者にその旨を通報する用途でログを使う。
あくまで、システムの一部なので、リリース後でも取り除かれない。
開発時にだけ有効で、リリース時に無効にする用途には使わないかなって話。
299デフォルトの名無しさん
2014/11/24(月) 11:56:52.74ID:NWUcXEp0 開発時のみで使うものだったら
ifdefで残したりしねーよ?
そういう残してあるコードが
じゃまだってのが、話の始まりだろ?
ifdefで残したりしねーよ?
そういう残してあるコードが
じゃまだってのが、話の始まりだろ?
300デフォルトの名無しさん
2014/11/24(月) 12:01:55.48ID:tFEPR/wR301デフォルトの名無しさん
2014/11/24(月) 12:05:06.98ID:/Xnwup+Z302デフォルトの名無しさん
2014/11/24(月) 12:55:47.70ID:NWUcXEp0 ifdefでソースコードに書いて
それをずっと保守し続けてるってことは
残す理由があるからそうしてる。
ここまでOK?
その残されたコードがじゃまで
リーダブルにならくなって困っている。
ここまではOK?
ならばifdefなんか使わずに
もっとわかりやすいコードにしろって話。
それをずっと保守し続けてるってことは
残す理由があるからそうしてる。
ここまでOK?
その残されたコードがじゃまで
リーダブルにならくなって困っている。
ここまではOK?
ならばifdefなんか使わずに
もっとわかりやすいコードにしろって話。
303デフォルトの名無しさん
2014/11/24(月) 15:12:20.28ID:DZ0ISr8h お前はいい加減周りのことも考えて行動や発言できるようになれよ
コーディングはそれから
コーディングはそれから
304デフォルトの名無しさん
2014/11/24(月) 17:13:58.44ID:+VpmsKoD >>302
で、具体的な提案もなく、文句言うだけ?
で、具体的な提案もなく、文句言うだけ?
305デフォルトの名無しさん
2014/11/24(月) 17:49:29.24ID:SQsB+YJ2 プリプロの改良だね‥
306デフォルトの名無しさん
2014/11/24(月) 18:31:46.57ID:CiPNuJ6e で、そこに#ifdefの方がわかりやすい派が現れるんですねわかります
307片山博文MZ次期CEO ◆T6xkBnTXz7B0
2014/11/24(月) 18:39:55.49ID:cxOxEmtO #ifdefをインデントするのってアリ?
308デフォルトの名無しさん
2014/11/24(月) 19:32:19.00ID:xxtEEteG 中身はインデントするかも
309デフォルトの名無しさん
2014/11/24(月) 19:42:14.05ID:UXHgSloT ソースとプリプロセッサのインデントが混じって見辛くなるから、俺はしない
310デフォルトの名無しさん
2014/11/24(月) 20:41:48.81ID:U0wuvsWn 半角スペースでインデントはよく見かける
311デフォルトの名無しさん
2014/11/24(月) 22:10:52.63ID:DZ0ISr8h プリプロセッサのみの部分(define値の切り替えとかerrorとか)だったらインデントしたほうが見やすいと思いインデントしてる
ソース内にかかる部分だと309と同じ意見でしてない
基本は#ifがネストしないようにしたいと思ってるけどね
ソース内にかかる部分だと309と同じ意見でしてない
基本は#ifがネストしないようにしたいと思ってるけどね
312デフォルトの名無しさん
2014/11/24(月) 22:23:12.31ID:TsbXFfYg プリプロ行はスペースで、コード行はタブでインデントしてる。
見やすくはなるけど、読みやすさに繋がるかどうかはわからない。
見やすくはなるけど、読みやすさに繋がるかどうかはわからない。
313デフォルトの名無しさん
2014/11/24(月) 22:28:30.02ID:EZS/NtvV #if XXX
aaa
bbb
#endif
よりも
#if XXX
void func() {
aaa
bbb
}
#else
void func() {}
#endif
func()
ってやっちゃうなあ。これならfunc呼び出し部分についてのインデントに悩まなくてもすむじゃん?
しかも条件XXXで切り替わる部分が複数に成った場合でも、定義を一カ所にまとめておける。
aaa
bbb
#endif
よりも
#if XXX
void func() {
aaa
bbb
}
#else
void func() {}
#endif
func()
ってやっちゃうなあ。これならfunc呼び出し部分についてのインデントに悩まなくてもすむじゃん?
しかも条件XXXで切り替わる部分が複数に成った場合でも、定義を一カ所にまとめておける。
314デフォルトの名無しさん
2014/11/24(月) 22:34:36.62ID:o0oR/6A6 目から瓢箪が独楽です
315デフォルトの名無しさん
2014/11/24(月) 22:38:27.07ID:TsbXFfYg 関数呼び出しじゃなくてマクロにした方が良くない?
リーダブルの観点ではないけれど、関数呼び出しのネストが深くなるのは良くないと思うんだ。
リーダブルの観点ではないけれど、関数呼び出しのネストが深くなるのは良くないと思うんだ。
316デフォルトの名無しさん
2014/11/24(月) 22:39:45.84ID:/Xnwup+Z317デフォルトの名無しさん
2014/11/25(火) 01:15:46.45ID:45kyml8T318デフォルトの名無しさん
2014/11/25(火) 02:33:45.34ID:GW/pgxiU 目から箪笥です
319デフォルトの名無しさん
2014/11/25(火) 03:16:47.66ID:45kyml8T 私も目から箪笥です
320デフォルトの名無しさん
2014/11/25(火) 03:53:07.08ID:relupevl 同じじゃない部分だけ分ければいいだけじゃん
321デフォルトの名無しさん
2014/11/25(火) 06:54:59.12ID:eaby6zdh >>317
ああ、すまん、勘違いしてたわ
変更部分を別関数に切り出すと言うことか
> aaa
> bbb
が元々関数に切り出すような意味のある単位ならわかるけど、処理の途中の一部を切り出したような場合だと関数名も付け辛いし分かりにくくなる
あと、単に aaa, bbb って書いてるから違和感ないけど、実際には aaa, bbb で必要とする情報や、逆に変更した情報等のやり取りを引数でやる必要もあるので、結構面倒に思うんだけど
ああ、すまん、勘違いしてたわ
変更部分を別関数に切り出すと言うことか
> aaa
> bbb
が元々関数に切り出すような意味のある単位ならわかるけど、処理の途中の一部を切り出したような場合だと関数名も付け辛いし分かりにくくなる
あと、単に aaa, bbb って書いてるから違和感ないけど、実際には aaa, bbb で必要とする情報や、逆に変更した情報等のやり取りを引数でやる必要もあるので、結構面倒に思うんだけど
322デフォルトの名無しさん
2014/11/25(火) 07:46:51.85ID:53f+YSIW 確かOpenSSLも各プラットフォーム毎に
#ifdefの嵐でで手が付けられなくなったらしいけど、
こういうのはTemplate Methodパターンみたいなものを使えばいいんだよ。
デバッグ用の関数、またはクラスと
リリース用の関数、またはクラスを作って
それを使うコードはどちらを使っているか意識する必要がないようにする
これぐらい基本だと思うんだが、OpenSSLを見る限り
世の中のレベルってこの程度のものなのかもしれんな。
#ifdefの嵐でで手が付けられなくなったらしいけど、
こういうのはTemplate Methodパターンみたいなものを使えばいいんだよ。
デバッグ用の関数、またはクラスと
リリース用の関数、またはクラスを作って
それを使うコードはどちらを使っているか意識する必要がないようにする
これぐらい基本だと思うんだが、OpenSSLを見る限り
世の中のレベルってこの程度のものなのかもしれんな。
323デフォルトの名無しさん
2014/11/29(土) 12:47:04.96ID:u8/hKXWz324デフォルトの名無しさん
2014/11/29(土) 14:50:29.22ID:quQRjBUx デバッグ用出力の話なら
>>249 で十分テンプレートメソッドパターンと言えるでしょ
>>249 で十分テンプレートメソッドパターンと言えるでしょ
325デフォルトの名無しさん
2014/11/30(日) 21:01:48.36ID:4o6Sx4rW 呼び出し元のスコープを維持したいからマクロを使うんであって、関数やクラスに分けられるものをマクロで書く奴はいないだろ
326デフォルトの名無しさん
2014/11/30(日) 22:41:03.33ID:8xQ5/Fxy 『レガシーコード改善ガイド』を読むと、どこにテスト用のフックを
仕掛けるかみたいな話が出てくるからお勧めしとく。
仕掛けるかみたいな話が出てくるからお勧めしとく。
327デフォルトの名無しさん
2014/12/12(金) 00:27:58.93ID:bKiv2VYA c言語でなるべくグローバル変数を使わない方がいいという事で
グローバル変数無しで書き直したら、関数の引数がやたら多くなってしまった。
(´・ω・`)
グローバル変数無しで書き直したら、関数の引数がやたら多くなってしまった。
(´・ω・`)
328デフォルトの名無しさん
2014/12/12(金) 00:31:23.89ID:+hKqCGtl こぞーよ、こーぞーたいつかいやがれ
329デフォルトの名無しさん
2014/12/12(金) 00:40:38.34ID:ADDM5Suo データ結合まで分離できたって事だろ
誇ってよし
誇ってよし
330デフォルトの名無しさん
2014/12/12(金) 07:43:19.28ID:Znidw3Lc なるべくグローバル変数を使わない でいいんだが、
組み込み系だと、場合によって使っていいかと。
組み込みは仮想メモリが無く、搭載メモリ容量も決まっていて、
各機能それぞれ、どれだけの最大サイズでメモリを使うかなんて
設計段階で確定するものだから、
その最大サイズで最初からグローバルにメモリマップを切っておくべきかと。
動的確保とかだと開放漏れなんていう不具合がありがちだし。
普通にローカル変数ですむようなことまでグローバルにするのは厳禁だけど。
組み込み系だと、場合によって使っていいかと。
組み込みは仮想メモリが無く、搭載メモリ容量も決まっていて、
各機能それぞれ、どれだけの最大サイズでメモリを使うかなんて
設計段階で確定するものだから、
その最大サイズで最初からグローバルにメモリマップを切っておくべきかと。
動的確保とかだと開放漏れなんていう不具合がありがちだし。
普通にローカル変数ですむようなことまでグローバルにするのは厳禁だけど。
331デフォルトの名無しさん
2014/12/12(金) 08:57:20.70ID:bKiv2VYA 勉強になるわあ(´・ω・`)
332デフォルトの名無しさん
2014/12/12(金) 09:27:52.69ID:E/liDhvH メモリなどの制約があるからやるのであって、
それをするのが常識な業界であっても
その目的は「リーダブル」ではないことに注意ね。
それをするのが常識な業界であっても
その目的は「リーダブル」ではないことに注意ね。
333デフォルトの名無しさん
2014/12/12(金) 15:16:05.63ID:tymqzhoh >>330
グローバル(スコープの話)と動的確保(メモリー領域の話)をごっちゃにするなよ...
グローバル(スコープの話)と動的確保(メモリー領域の話)をごっちゃにするなよ...
334デフォルトの名無しさん
2014/12/12(金) 18:32:11.35ID:qq9LAV1Z 言語の話としては、スコープ(可視範囲)とエクステント(生存期間・寿命)な。
スタックに確保するかヒープに確保するかは、それらの実装の話。
スタックに確保するかヒープに確保するかは、それらの実装の話。
335330
2014/12/12(金) 22:14:49.55ID:Znidw3Lc いやあ、結構可読性が変わってくるよ。
動的確保系の処理って、寿命管理にそれなりの設計というかコードを書く必要があるし、
未確保の場合の条件分け処理だとか。
グローバルにすればそういう系のコードが排除出来てすっきりするんで。
今、組み込みで動的確保バリバリのプロジェクトに関わってて。
本来大丈夫なはずの所まで、大量の未確保時の例外処理を入れまくって、
可読性?なにそれ?なソースを相手にしているところww
動的確保系の処理って、寿命管理にそれなりの設計というかコードを書く必要があるし、
未確保の場合の条件分け処理だとか。
グローバルにすればそういう系のコードが排除出来てすっきりするんで。
今、組み込みで動的確保バリバリのプロジェクトに関わってて。
本来大丈夫なはずの所まで、大量の未確保時の例外処理を入れまくって、
可読性?なにそれ?なソースを相手にしているところww
336デフォルトの名無しさん
2014/12/12(金) 23:24:59.05ID:OvrU0/Qj337デフォルトの名無しさん
2014/12/12(金) 23:30:21.77ID:JABIbbJk >>336
C言語の問題になるが、例外というものがなく
エラーは戻り値で返ってくるので、
ちゃんとしたコードを書こうと思ったら原則的に
このように書かないといけない。
int ret;
ret = printf('Hello');
if (ret < 0) {
return ret;
}
ret = printf('World');
if (ret < 0) {
return ret;
}
C言語の問題になるが、例外というものがなく
エラーは戻り値で返ってくるので、
ちゃんとしたコードを書こうと思ったら原則的に
このように書かないといけない。
int ret;
ret = printf('Hello');
if (ret < 0) {
return ret;
}
ret = printf('World');
if (ret < 0) {
return ret;
}
338デフォルトの名無しさん
2014/12/12(金) 23:32:27.88ID:SFp8/UEn トンチンカンすぎんべ…
339デフォルトの名無しさん
2014/12/12(金) 23:35:05.15ID:OvrU0/Qj >>337
だからグローバル使えばどうすっきりするのかと
だからグローバル使えばどうすっきりするのかと
340デフォルトの名無しさん
2014/12/12(金) 23:35:23.81ID:Znidw3Lc ポインタのヌルチェックとかな
341デフォルトの名無しさん
2014/12/12(金) 23:43:14.66ID:Znidw3Lc オブジェクト指向系言語だったらヌルオブジェクト使ってヌルチェックを不要に出来るし、
どのタイミングで動的確保されるかとかはクラスで隠蔽出来るんだが
どのタイミングで動的確保されるかとかはクラスで隠蔽出来るんだが
342デフォルトの名無しさん
2014/12/12(金) 23:44:06.16ID:OvrU0/Qj コードで示してくれない?
グローバルでもチェックが不要になる訳じゃないよね?
グローバルでもチェックが不要になる訳じゃないよね?
343デフォルトの名無しさん
2014/12/12(金) 23:46:39.06ID:Znidw3Lc ?
ポインタをグローバルに持つとかじゃないよ?念のため。
普通に、ごく普通にプリミティブ型やら構造体変数をグローバルに持つだけなんだが。
ポインタをグローバルに持つとかじゃないよ?念のため。
普通に、ごく普通にプリミティブ型やら構造体変数をグローバルに持つだけなんだが。
344デフォルトの名無しさん
2014/12/12(金) 23:53:59.93ID:Znidw3Lc イメージ的には、様々な動的確保情報を全て確保した状態のヒープを、
最初から固定でグローバルに持っておく、という感じ。で伝わるかな。。
最初から固定でグローバルに持っておく、という感じ。で伝わるかな。。
345デフォルトの名無しさん
2014/12/12(金) 23:54:55.17ID:ADDM5Suo (やべえ何度読み直しても分からねえ…何が分からないのかさえ分からねえ…)
346デフォルトの名無しさん
2014/12/12(金) 23:56:53.96ID:9Ma9oPly347デフォルトの名無しさん
2014/12/12(金) 23:58:05.91ID:SUQ8ZHc4 >>343-344
ごめん、マジで伝わらん
ごめん、マジで伝わらん
348デフォルトの名無しさん
2014/12/12(金) 23:59:06.81ID:bKiv2VYA やり取りの内容がまだ理解できるレベルではないが
奥がふかいんですねえ
やっぱcだけじゃなくjavaあたりもやっといた方がいいのかな
奥がふかいんですねえ
やっぱcだけじゃなくjavaあたりもやっといた方がいいのかな
349デフォルトの名無しさん
2014/12/13(土) 00:01:01.37ID:54ajxy39 >>346
ヒープ ⇔ スタティック の話なの?
ヒープ ⇔ スタティック の話なの?
350デフォルトの名無しさん
2014/12/13(土) 00:02:55.00ID:uQ37H43s おそらく最初から動的と静的の話なんでしょうよ
351デフォルトの名無しさん
2014/12/13(土) 00:05:24.55ID:54ajxy39 そうなんだろうな...
352デフォルトの名無しさん
2014/12/13(土) 02:19:46.63ID:WvyZJyoU そうだな
353デフォルトの名無しさん
2014/12/13(土) 05:42:46.74ID:xVemfz4a 書いてみた
http://ideone.com/3l8aq6
http://ideone.com/3l8aq6
354デフォルトの名無しさん
2014/12/13(土) 10:22:39.34ID:xVemfz4a と思ったら終わってたのね、話
355デフォルトの名無しさん
2014/12/13(土) 10:25:53.22ID:/4slIr06356デフォルトの名無しさん
2014/12/13(土) 10:31:24.66ID:xVemfz4a357デフォルトの名無しさん
2014/12/13(土) 10:36:24.43ID:JDqKcE2X 十年ROMれ
358デフォルトの名無しさん
2014/12/13(土) 10:40:39.82ID:xVemfz4a あぅぅ
2014/12/13(土) 23:21:18.25ID:K/9GRqnp
10年後に2chがなくなってなきゃいいが…
360デフォルトの名無しさん
2014/12/18(木) 20:59:16.69ID:IPlfnya6 c言語である程度プログラムが大きくなってくると関数の数も増えて来るし
どの関数がどの関数を呼び出してるとか色々増えて来ると思うんだけど
こういうのってどういう管理が一般的なんだろか
どの関数がどの関数を呼び出してるとか色々増えて来ると思うんだけど
こういうのってどういう管理が一般的なんだろか
361デフォルトの名無しさん
2014/12/18(木) 22:04:19.41ID:PpZ3cpAI >>360
> どの関数がどの関数を呼び出してるとか色々増えて来ると思うんだけど
増えていかないようにモジュール化する
> こういうのってどういう管理が一般的なんだろか
増えちゃったとか不幸にもぐちゃぐちゃのソースを解析するなら Doxygen とか、金があるなら Imagix とかで見るとか
> どの関数がどの関数を呼び出してるとか色々増えて来ると思うんだけど
増えていかないようにモジュール化する
> こういうのってどういう管理が一般的なんだろか
増えちゃったとか不幸にもぐちゃぐちゃのソースを解析するなら Doxygen とか、金があるなら Imagix とかで見るとか
362デフォルトの名無しさん
2014/12/18(木) 23:37:34.74ID:mulBDlyx 関数がある程度増えたら、それを小さく分割するってことを
しないからどんどん増えるんだよね。
なんで過去のコードを修正しないのか?
簡単なうちにすぐ手を付けないから、あとから手遅れになるんだけど。
しないからどんどん増えるんだよね。
なんで過去のコードを修正しないのか?
簡単なうちにすぐ手を付けないから、あとから手遅れになるんだけど。
363デフォルトの名無しさん
2014/12/18(木) 23:47:41.58ID:LWfoPtOf あまり小さく分割すると見通しが悪くなる派
364デフォルトの名無しさん
2014/12/19(金) 14:45:53.53ID:YQiCmoKD >>363
それは分割の仕方が間違ってる派
正しいやり方は
長い関数があった時、その中で汎用的に使える所をシンプルな関数に
抜き出しながら全体を短くするというやり方。
間違ったやり方だと
長い関数があった時、その一部。例えば前半分と後ろ半分みたいに分けて
汎用的ではない関数(というよりもルーチン)を増やすやり方。
”見通しが悪くなる" という言葉がうまく表している。
間違ったやり方は、汎用的ではない関数ができるから"見ないといけない"
「処理があちこちにジャンプして見にくい」など言うのはまさにこれが原因
正しいやり方ならは、汎用的でシンプルだから(一度見るだけで)あとは見なくて良くなる。
見るべきコードが減って処理も分割されないので、あちこちにジャンプすることもなく、見通しが良くなる。
それは分割の仕方が間違ってる派
正しいやり方は
長い関数があった時、その中で汎用的に使える所をシンプルな関数に
抜き出しながら全体を短くするというやり方。
間違ったやり方だと
長い関数があった時、その一部。例えば前半分と後ろ半分みたいに分けて
汎用的ではない関数(というよりもルーチン)を増やすやり方。
”見通しが悪くなる" という言葉がうまく表している。
間違ったやり方は、汎用的ではない関数ができるから"見ないといけない"
「処理があちこちにジャンプして見にくい」など言うのはまさにこれが原因
正しいやり方ならは、汎用的でシンプルだから(一度見るだけで)あとは見なくて良くなる。
見るべきコードが減って処理も分割されないので、あちこちにジャンプすることもなく、見通しが良くなる。
365デフォルトの名無しさん
2014/12/19(金) 23:26:05.82ID:wb+cst2b >>364
以上、本ばかり読んでてコード書いたことのない自称できるプログラマーの意見でした
以上、本ばかり読んでてコード書いたことのない自称できるプログラマーの意見でした
366デフォルトの名無しさん
2014/12/19(金) 23:29:01.15ID:YQiCmoKD >>365
なんにも言い返していない所がウケるw
なんにも言い返していない所がウケるw
367デフォルトの名無しさん
2014/12/19(金) 23:44:37.90ID:cAPBq6kb なかなか難しいところだ脳。
やっぱコード書く前にしっかり設計やってからやるべきなのかね。
趣味だけども
やっぱコード書く前にしっかり設計やってからやるべきなのかね。
趣味だけども
368デフォルトの名無しさん
2014/12/19(金) 23:57:59.54ID:wb+cst2b369デフォルトの名無しさん
2014/12/20(土) 01:22:27.35ID:+b2U+9C3 このスレの忘年会みたいな軽いノリで、リーダブルじゃない現場コードの晒し合いとか愚痴晒し合いとかしませんか
言語問わずなんでもありで
丁度上司のunreadableコードと戦っててもうね
出所バレない感じに整形したりしてるんですがもうね
言語問わずなんでもありで
丁度上司のunreadableコードと戦っててもうね
出所バレない感じに整形したりしてるんですがもうね
370デフォルトの名無しさん
2014/12/20(土) 01:41:00.69ID:acQ5HpBR 再帰関数使いたいけど無名関数じゃ再帰できないようだからしぶしぶprivateメソッド化して細切れになる現象
371デフォルトの名無しさん
2014/12/20(土) 05:18:20.39ID:dWuhsWfV372デフォルトの名無しさん
2014/12/20(土) 09:26:41.56ID:z0Uvrlhl >>370つ Yコンビネータ
って全然リーダブルじゃねーか
って全然リーダブルじゃねーか
373デフォルトの名無しさん
2014/12/20(土) 10:07:02.21ID:KOv8i75g void isReadable()
374デフォルトの名無しさん
2014/12/20(土) 10:10:00.30ID:KOv8i75g new codeClone[num_of_func]
375デフォルトの名無しさん
2014/12/20(土) 12:02:33.91ID:F1BtQojg376デフォルトの名無しさん
2014/12/20(土) 12:12:29.43ID:cUhMXe+F377デフォルトの名無しさん
2014/12/20(土) 12:16:04.49ID:F1BtQojg >>371
> ワンストップ・サービス(窓口)のFacadeはどうなる?
その例から何を言いたいのかよくわからないよ。
何か俺が言ったことを勘違いしていそうだから、
勘違いしていそうなところの補足をしておく。
> 間違ったやり方だと
>
> 長い関数があった時、その一部。例えば前半分と後ろ半分みたいに分けて
> 汎用的ではない関数(というよりもルーチン)を増やすやり方。
この前半分と後ろ半分にわける間違ったやり方というのは、
例えば一つの工程をA、Bの二つに分けた時、
Bの内容(引数・戻り値じゃなくて"内容")を見ないと
Aが最終的にどうなるかわからないようなもののこと。
Facadeみたいにそれぞれの独立した工程に処理を渡して
引数・戻り値といった最小限の情報だけでやり出来るものは関係ない。
> ワンストップ・サービス(窓口)のFacadeはどうなる?
その例から何を言いたいのかよくわからないよ。
何か俺が言ったことを勘違いしていそうだから、
勘違いしていそうなところの補足をしておく。
> 間違ったやり方だと
>
> 長い関数があった時、その一部。例えば前半分と後ろ半分みたいに分けて
> 汎用的ではない関数(というよりもルーチン)を増やすやり方。
この前半分と後ろ半分にわける間違ったやり方というのは、
例えば一つの工程をA、Bの二つに分けた時、
Bの内容(引数・戻り値じゃなくて"内容")を見ないと
Aが最終的にどうなるかわからないようなもののこと。
Facadeみたいにそれぞれの独立した工程に処理を渡して
引数・戻り値といった最小限の情報だけでやり出来るものは関係ない。
378デフォルトの名無しさん
2014/12/20(土) 12:18:32.86ID:F1BtQojg >>376
区別できているかできていないかの前に
質問に答えてよ。
俺は「無限の時間と労力をかけてでもやれ」なんて一言も言っていない。
でもまあ、仕事(作業)するなら時間がかかるのはあたりまえだよ。
(その時間内で)適切なやり方をやれって言っているだけだが
どうして無限の時間をかけるって話になったのさ?
区別できているかできていないかの前に
質問に答えてよ。
俺は「無限の時間と労力をかけてでもやれ」なんて一言も言っていない。
でもまあ、仕事(作業)するなら時間がかかるのはあたりまえだよ。
(その時間内で)適切なやり方をやれって言っているだけだが
どうして無限の時間をかけるって話になったのさ?
379デフォルトの名無しさん
2014/12/20(土) 12:21:24.19ID:F1BtQojg 「適切なやり方をやれ」って言っただけなのに
それを「無限の時間と労力をかけてでもやれ」と勘違いしてしまうのは
「適切なやり方をやったら、俺は無限の時間がかかるんだ。適切なやり方=無限の時間なんだ」って
>>368が言っているようにみえるのは仕方ないでしょw
それを「無限の時間と労力をかけてでもやれ」と勘違いしてしまうのは
「適切なやり方をやったら、俺は無限の時間がかかるんだ。適切なやり方=無限の時間なんだ」って
>>368が言っているようにみえるのは仕方ないでしょw
380デフォルトの名無しさん
2014/12/20(土) 13:02:04.48ID:lS6KGt9L381デフォルトの名無しさん
2014/12/20(土) 13:09:20.32ID:z0Uvrlhl382デフォルトの名無しさん
2014/12/20(土) 13:22:29.06ID:cUhMXe+F だから正論に反論なんてできないよ
「適切なやり方やればいい」
間違ったことは言ってないからな
でも、そんなことは小学生でも言えるわ w
「適切なやり方やればいい」
間違ったことは言ってないからな
でも、そんなことは小学生でも言えるわ w
383デフォルトの名無しさん
2014/12/20(土) 14:21:29.36ID:qyYbVqEq >>382の上司「無限の時間をかけてでも適切なことをやれ!でも給料はいつも通り!」
って言われてるからここで愚痴ってるんでしょ
って言われてるからここで愚痴ってるんでしょ
384デフォルトの名無しさん
2014/12/20(土) 22:26:54.94ID:F1BtQojg >>382
だから変なのは「無限の時間」って話が出てきた所だけだよ。
正論言ってるんだから、俺が言った内容に反論できないのはわかってるよ。
俺が言った内容ではない話が、どこからできたんだ?って言ってるだけ。
だから変なのは「無限の時間」って話が出てきた所だけだよ。
正論言ってるんだから、俺が言った内容に反論できないのはわかってるよ。
俺が言った内容ではない話が、どこからできたんだ?って言ってるだけ。
385デフォルトの名無しさん
2014/12/20(土) 22:56:28.88ID:cUhMXe+F■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【給食無償化】国が全額負担 自維公3党、近く合意へ [ぐれ★]
- こども家庭庁、2026年から“独身税”を開始、年収200万なら年4200円、年収400万なら年7800円 ★6 [お断り★]
- 【サッカー】Jリーグ、43億円の赤字予算を承認 ★2 [鉄チーズ烏★]
- 松村沙友理、スタバは好きだけど「やっぱコーヒーに700円800円が…」「家でお湯わかしてやったらタダやん」 [muffin★]
- 「レーダー照射」なぜ中国は素直に謝罪しないのか 非を認めず反論、逆ギレ「ごめんなさい」と言えない国情★3 [七波羅探題★]
- 40代教員、1億8600万円分の暗号資産だまし取られる 「警察手帳のような物」見せられ−滋賀県草津市 [蚤の市★]
- 【実況】博衣こよりのえちえちダンガンロンパ2🧪★6
- ブレイキングダウンの試合前挑発タイムでくも膜下出血 朝倉未来の責任は [279254606]
- 味の素会長「日本の冷凍餃子は安すぎる。価値に見合った価格を」 [573472858]
- 【実況】博衣こよりのえちえちダンガンロンパ2🧪★5
- 高市早苗「子どもがいる世帯への扶養控除廃止は私の意向ではなく自民党の意向で仕方ない」与党爆笑 [245325974]
- IDにSexキタ━━━━(゚∀゚)━━━━!!
