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

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

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

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

こういうコードを読みやすくするにはどうすればいいでしょうか?
というようなことを語るスレ。需要ありますかね?

0351デフォルトの名無しさん2014/12/13(土) 00:05:24.55ID:54ajxy39
そうなんだろうな...

0352デフォルトの名無しさん2014/12/13(土) 02:19:46.63ID:WvyZJyoU
そうだな

0353デフォルトの名無しさん2014/12/13(土) 05:42:46.74ID:xVemfz4a
書いてみた
http://ideone.com/3l8aq6

0354デフォルトの名無しさん2014/12/13(土) 10:22:39.34ID:xVemfz4a
と思ったら終わってたのね、話

0355デフォルトの名無しさん2014/12/13(土) 10:25:53.22ID:/4slIr06
>>353
え??

そもそも ID:Znidw3Lc なん?

0356デフォルトの名無しさん2014/12/13(土) 10:31:24.66ID:xVemfz4a
>>355
ちがうよ
ログ見ながら書いてみただけ

0357デフォルトの名無しさん2014/12/13(土) 10:36:24.43ID:JDqKcE2X
十年ROMれ

0358デフォルトの名無しさん2014/12/13(土) 10:40:39.82ID:xVemfz4a
あぅぅ

0359名無しさん@そうだ選挙に行こう2014/12/13(土) 23:21:18.25ID:K/9GRqnp
10年後に2chがなくなってなきゃいいが…

0360デフォルトの名無しさん2014/12/18(木) 20:59:16.69ID:IPlfnya6
c言語である程度プログラムが大きくなってくると関数の数も増えて来るし
どの関数がどの関数を呼び出してるとか色々増えて来ると思うんだけど
こういうのってどういう管理が一般的なんだろか

0361デフォルトの名無しさん2014/12/18(木) 22:04:19.41ID:PpZ3cpAI
>>360
> どの関数がどの関数を呼び出してるとか色々増えて来ると思うんだけど

増えていかないようにモジュール化する

> こういうのってどういう管理が一般的なんだろか

増えちゃったとか不幸にもぐちゃぐちゃのソースを解析するなら Doxygen とか、金があるなら Imagix とかで見るとか

0362デフォルトの名無しさん2014/12/18(木) 23:37:34.74ID:mulBDlyx
関数がある程度増えたら、それを小さく分割するってことを
しないからどんどん増えるんだよね。

なんで過去のコードを修正しないのか?
簡単なうちにすぐ手を付けないから、あとから手遅れになるんだけど。

0363デフォルトの名無しさん2014/12/18(木) 23:47:41.58ID:LWfoPtOf
あまり小さく分割すると見通しが悪くなる派

0364デフォルトの名無しさん2014/12/19(金) 14:45:53.53ID:YQiCmoKD
>>363
それは分割の仕方が間違ってる派

正しいやり方は

長い関数があった時、その中で汎用的に使える所をシンプルな関数に
抜き出しながら全体を短くするというやり方。

間違ったやり方だと

長い関数があった時、その一部。例えば前半分と後ろ半分みたいに分けて
汎用的ではない関数(というよりもルーチン)を増やすやり方。

”見通しが悪くなる" という言葉がうまく表している。
間違ったやり方は、汎用的ではない関数ができるから"見ないといけない"
「処理があちこちにジャンプして見にくい」など言うのはまさにこれが原因

正しいやり方ならは、汎用的でシンプルだから(一度見るだけで)あとは見なくて良くなる。
見るべきコードが減って処理も分割されないので、あちこちにジャンプすることもなく、見通しが良くなる。

0365デフォルトの名無しさん2014/12/19(金) 23:26:05.82ID:wb+cst2b
>>364
以上、本ばかり読んでてコード書いたことのない自称できるプログラマーの意見でした

0366デフォルトの名無しさん2014/12/19(金) 23:29:01.15ID:YQiCmoKD
>>365
なんにも言い返していない所がウケるw

0367デフォルトの名無しさん2014/12/19(金) 23:44:37.90ID:cAPBq6kb
なかなか難しいところだ脳。
やっぱコード書く前にしっかり設計やってからやるべきなのかね。
趣味だけども

0368デフォルトの名無しさん2014/12/19(金) 23:57:59.54ID:wb+cst2b
>>366
正論だから反論はできないよ
無限の時間と労力かけてでもやれと言う主張だから、役に立たないけどな w

0369デフォルトの名無しさん2014/12/20(土) 01:22:27.35ID:+b2U+9C3
このスレの忘年会みたいな軽いノリで、リーダブルじゃない現場コードの晒し合いとか愚痴晒し合いとかしませんか
言語問わずなんでもありで

丁度上司のunreadableコードと戦っててもうね
出所バレない感じに整形したりしてるんですがもうね

0370デフォルトの名無しさん2014/12/20(土) 01:41:00.69ID:acQ5HpBR
再帰関数使いたいけど無名関数じゃ再帰できないようだからしぶしぶprivateメソッド化して細切れになる現象

0371デフォルトの名無しさん2014/12/20(土) 05:18:20.39ID:dWuhsWfV
>>364
ワンストップ・サービス(窓口)のFacadeはどうなる?

fA(){
fB();fC();fD();
}

>>367
Eclipseのリファクタリングの説明を読むといい

0372デフォルトの名無しさん2014/12/20(土) 09:26:41.56ID:z0Uvrlhl
>>370つ Yコンビネータ
って全然リーダブルじゃねーか

0373デフォルトの名無しさん2014/12/20(土) 10:07:02.21ID:KOv8i75g
void isReadable()

0374デフォルトの名無しさん2014/12/20(土) 10:10:00.30ID:KOv8i75g
new codeClone[num_of_func]

0375デフォルトの名無しさん2014/12/20(土) 12:02:33.91ID:F1BtQojg
>>368
> 無限の時間と労力かけてでもやれと言う主張だから、役に立たないけどな w

なんで無限?w
あなたが仕事すると無限の時間がかかるって話?w

0376デフォルトの名無しさん2014/12/20(土) 12:12:29.43ID:cUhMXe+F
>>375
> 無限の時間と労力かけてでも
> 無限の時間と労力かかるけど

区別できないアホは絡んで来るなよ

0377デフォルトの名無しさん2014/12/20(土) 12:16:04.49ID:F1BtQojg
>>371
> ワンストップ・サービス(窓口)のFacadeはどうなる?

その例から何を言いたいのかよくわからないよ。

何か俺が言ったことを勘違いしていそうだから、
勘違いしていそうなところの補足をしておく。

> 間違ったやり方だと
>
> 長い関数があった時、その一部。例えば前半分と後ろ半分みたいに分けて
> 汎用的ではない関数(というよりもルーチン)を増やすやり方。

この前半分と後ろ半分にわける間違ったやり方というのは、
例えば一つの工程をA、Bの二つに分けた時、
Bの内容(引数・戻り値じゃなくて"内容")を見ないと
Aが最終的にどうなるかわからないようなもののこと。

Facadeみたいにそれぞれの独立した工程に処理を渡して
引数・戻り値といった最小限の情報だけでやり出来るものは関係ない。

0378デフォルトの名無しさん2014/12/20(土) 12:18:32.86ID:F1BtQojg
>>376
区別できているかできていないかの前に
質問に答えてよ。

俺は「無限の時間と労力をかけてでもやれ」なんて一言も言っていない。
でもまあ、仕事(作業)するなら時間がかかるのはあたりまえだよ。

(その時間内で)適切なやり方をやれって言っているだけだが
どうして無限の時間をかけるって話になったのさ?

0379デフォルトの名無しさん2014/12/20(土) 12:21:24.19ID:F1BtQojg
「適切なやり方をやれ」って言っただけなのに
それを「無限の時間と労力をかけてでもやれ」と勘違いしてしまうのは

「適切なやり方をやったら、俺は無限の時間がかかるんだ。適切なやり方=無限の時間なんだ」って
>>368が言っているようにみえるのは仕方ないでしょw

0380デフォルトの名無しさん2014/12/20(土) 13:02:04.48ID:lS6KGt9L
>>377
ようは暗黙にBの事前条件がAの事後条件となるのがダメということかね。
>>364の「汎用的」がどういうものを指しているのかいまいち意味がつかめなかったが、
条件を明確にするなら汎用/専用関係なくていいんじゃね?

0381デフォルトの名無しさん2014/12/20(土) 13:09:20.32ID:z0Uvrlhl
>>396
java で何でかんでも定数定義して(カウンタ変数とか!)
フォーマッタでぐちゃぐちゃになったソースは見たことある

0382デフォルトの名無しさん2014/12/20(土) 13:22:29.06ID:cUhMXe+F
だから正論に反論なんてできないよ
「適切なやり方やればいい」
間違ったことは言ってないからな
でも、そんなことは小学生でも言えるわ w

0383デフォルトの名無しさん2014/12/20(土) 14:21:29.36ID:qyYbVqEq
>>382の上司「無限の時間をかけてでも適切なことをやれ!でも給料はいつも通り!」
って言われてるからここで愚痴ってるんでしょ

0384デフォルトの名無しさん2014/12/20(土) 22:26:54.94ID:F1BtQojg
>>382
だから変なのは「無限の時間」って話が出てきた所だけだよ。
正論言ってるんだから、俺が言った内容に反論できないのはわかってるよ。
俺が言った内容ではない話が、どこからできたんだ?って言ってるだけ。

0385デフォルトの名無しさん2014/12/20(土) 22:56:28.88ID:cUhMXe+F
>>384
そんな時間じゃできません
と言われたらどう答えるんだ?

0386デフォルトの名無しさん2014/12/20(土) 23:25:50.20ID:F1BtQojg
>>385
誰が誰の立場でできませんっていうんだよ?
わけわからんわ。

時間内に出来るかどうかはケースバイケースなんだし、
出来るところまでやればいいだけだろ。

それに技術力を上げれば時間内にできることも多くなるぞ。
何も努力しないでコピペばかりするから技術力も上がらなくなる。

0387デフォルトの名無しさん2014/12/21(日) 00:56:33.95ID:XZ/0moqW
>>385
上司「何言ってるんだ土日があるだろ。ただしそれはお前の能力不足が原因だから残業代は出ないからな。」

0388デフォルトの名無しさん2014/12/21(日) 11:05:47.64ID:ikKWfd9P
>>386
> 誰が誰の立場でできませんっていうんだよ?

はあ?
指示を受けた人がその指示を実行する責任を負う立場でだよ。
常識だと思うが。

まあ、常識ないから
> 出来るところまでやればいいだけだろ。
なんてことを平気で言えるんだろうな。

>>387
先月すでに土日も使うことにあなたの指示で計画変更されてますが、お忘れでしょうか? ...

0389デフォルトの名無しさん2014/12/21(日) 13:01:56.36ID:XZ/0moqW
>>388
上司「俺は土日をつかえなんて指示はしていない。そんな計画を承認したはずもない。
ただお前が業務時間内に間に合わないなら土日や深夜や自宅時間も使わざる負えないだろうということだ。そんなこともわからんのか。」

0390デフォルトの名無しさん2014/12/21(日) 14:38:18.36ID:dx70AcKS
>>388
> 指示を受けた人がその指示を実行する責任を負う立場でだよ。

つまり俺か? なら出来ますって言えばいいだけじゃないか。

「お前このバグ直せる?」って聞かれた時
出来ますって答えるだろ?

0391デフォルトの名無しさん2014/12/21(日) 14:40:57.90ID:dx70AcKS
あ、もしかして俺なら(上級者なら)時間内にできる仕事を
どれだけ時間があっても出来ないって言いたい人なのかな?
俺にはいくら時間があっても仕事できないよって。

0392デフォルトの名無しさん2014/12/21(日) 14:50:49.21ID:dx70AcKS
まあ、ここいらでリーダブルコーディングの話に戻すか。

仕事が遅い人って見ていると、自分で自分を苦しめてるんだよね。

自分でぐちゃぐちゃなコードを書いて、
正しく動かない、バグが直せないって言ってる。
自分が書いたコードと戦っているわけさw

リーダブル、つまり読みやすいコードを書けるように
自分を鍛えれば、自分が書いたコードと戦うことは少なくなっていく。

でも仕事が遅い人って、自分が書いたコードと戦うことに精一杯。
時間がないを言い訳にしてレベルを上げようとしないから、
戦う敵を量産するだけで、更に時間をなくしてる。

コードは読むものなのだが、どうもレベルが低い人にとっては
解析する物になっているようだ。解析した後その謎を片付けないでそのままにして
さらにコードを追加するから、書けば書くほど謎が深まっていく
だから仕事をするばするほどかかる時間が増えていく。

あ、だから無限の時間って話になるのかw

0393デフォルトの名無しさん2014/12/21(日) 15:48:14.53ID:wuWkedhz
>>391-392
話の流れも読めてないバカ乙

0394デフォルトの名無しさん2014/12/22(月) 21:28:40.57ID:ndw8Yqnw
流れが読めないのはリーダブルでないのの典型

0395デフォルトの名無しさん2014/12/22(月) 22:36:05.51ID:bXw2G98F
と責任転嫁w

0396デフォルトの名無しさん2014/12/27(土) 23:32:28.76ID:OlYxJx97
自作のソフト、ネタ尽きてきたからコードの簡略化してたら5時間くらいたってた

0397デフォルトの名無しさん2015/10/14(水) 23:40:08.29ID:DmhFYPJM
クリエイティブじゃないやつはリファクタリングして仕事した気になってる勘違いが多い

0398デフォルトの名無しさん2015/10/15(木) 01:26:25.23ID:h4rpxLqO
ぎくっ

0399デフォルトの名無しさん2015/10/15(木) 12:52:24.82ID:fomBTPP1
はい

0400デフォルトの名無しさん2016/05/01(日) 16:37:41.94ID:tKi6j9CT
匿名通信(Tor、i2p等)ができるファイル共有ソフトBitComet(ビットコメット)みたいな、
BitTorrentがオープンソースで開発されています

言語は何でも大丈夫だそうなので、P2P書きたい!って人居ませんか?

Covenantの作者(Lyrise)がそういう人と話したいそうなので、よろしければツイートお願いします
https://twitter.com/Lyrise_al

ちなみにオイラはCovenantの完成が待ち遠しいプログラミングできないアスペルガーw


The Covenant Project
概要

Covenantは、純粋P2Pのファイル共有ソフトです

目的

インターネットにおける権力による抑圧を排除することが最終的な目標です。 そのためにCovenantでは、中央に依存しない、高効率で検索能力の高いファイル共有の機能をユーザーに提供します

特徴

Covenant = Bittorrent + Abstract Network + DHT + (Search = WoT + PoW)

接続は抽象化されているので、I2P, Tor, TCP, Proxy, その他を利用可能です
DHTにはKademlia + コネクションプールを使用します
UPnPによってポートを解放することができますが、Port0でも利用可能です(接続数は少なくなります)
検索リクエスト、アップロード、ダウンロードなどのすべての通信はDHT的に分散され、特定のサーバーに依存しません
1^

0401デフォルトの名無しさん2016/11/11(金) 16:02:24.59ID:dP+cWDA6
>>58
>道具が使えるだけの奴は三流。
>技術・知識も使いこなせて二流。
>人も使いこなせてこそ一流。

医療系の管理者です。
今更ですが金言だと思いました。
その立場にならんとわからないですね。

■ このスレッドは過去ログ倉庫に格納されています