◎正当な理由による書き込みの削除について:      生島英之とみられる方へ:

リーダブルコーディング技術スレYouTube動画>1本 ->画像>1枚


動画、画像抽出 || この掲示板へ 類似スレ 掲示板一覧 人気スレ 動画人気順

このスレへの固定リンク: http://5chb.net/r/tech/1381421181/
ヒント:5chスレのurlに http://xxxx.5chb.net/xxxx のようにbを入れるだけでここでスレ保存、閲覧できます。

1デフォルトの名無しさん
2013/10/11(金) 01:06:21.56
リーダブルコードとは

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

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

こういうコードを読みやすくするにはどうすればいいでしょうか?
というようなことを語るスレ。需要ありますかね?
2デフォルトの名無しさん
2013/10/11(金) 01:12:14.22
コスト感も癖にテストテスト叫ぶガキはまずリーダブルなコード書けてから言えといいたい
3デフォルトの名無しさん
2013/10/11(金) 01:19:10.70
最近、メインのコードから汎用的なコードを関数化していって
汎用的なコードはまあテストするが、
そうするとメインのコードが凄くシンプルになって、
それをテストするって意味あるのか?って思えてきた。

むしろテストしにくいコードをテストしなくて済むように
複雑なものを極力追いだすというか。そんな感じ。
4デフォルトの名無しさん
2013/10/11(金) 01:23:06.16
テストコード自体にもリーダブルさは必要だからなぁ。
リーダブルなコードを書けない人間がテストコードを書いても
ごみの集まりにしかならない。
テストのメンテナンスが大変になるだけ。
5デフォルトの名無しさん
2013/10/11(金) 06:39:08.19
>>1
汎用的なコードの羅列は読みにくい。コードはできるだけ個別的に書くべき。
ライブラリの使用も極力避けるべき。
6デフォルトの名無しさん
2013/10/11(金) 07:49:34.67
>>2
リーダブルなレス頼む
7デフォルトの名無しさん
2013/10/11(金) 09:03:24.36
>>5
荒らしは無視ですね。
8デフォルトの名無しさん
2013/10/11(金) 09:06:22.36
テストが面倒だから、テストしやすいコードを書くと簡潔になるな。
同じテストを繰り返したくないから、DRYの原則を守るようになってたり。
9デフォルトの名無しさん
2013/10/11(金) 10:02:12.71
>>7
pure Prolog は書き手が書いたことだけが真であって、
読み手との間で誤解の生じる余地がありません。
組込述語(ライブラリ)が無いのですから、個別的であり、
書き手と読み手の間の抽象能力の差から生じる不理解が
生じません。
10デフォルトの名無しさん
2013/10/11(金) 18:11:45.56
このスレッドは天才チンパンジー「アイちゃん」が
言語訓練のために立てたものです。

アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。

                  京都大学霊長類研究所
11デフォルトの名無しさん
2013/10/11(金) 22:46:36.79
>>9
問題はそれがリーダブルかどうかです。

試しにライブラリも関数も使わずにMySQLに接続して
select文を発行するコードを書いてみてくれませんか?

リーダブルコードというのは
実用的でなければなりません。
12デフォルトの名無しさん
2013/10/12(土) 01:48:35.10
例えばPerlでは要素が重複しないリストを返す関数はないわけ。

言語仕様だけで実装すればこんなふうになるけど、

my %count;
@array = grep( !$count{$_}++, @array ) ;

見ての通り明らかに、リーダブルではない。

List::MoreUtilsという有名なライブラリには
これをやってくれる関数がある

@array = uniq @array;

こっちの方が明らかにリーダブル。

実際の開発において、ライブラリを使わずに実装するなんてことは
腐った現場以外ありえない話なので、
リーダブルが目的の現実的な開発ではList::MoreUtilsのuniqを
使うという選択が一番正解なわけだよ。
13デフォルトの名無しさん
2013/10/12(土) 06:07:07.54
>>11
pure Prologではなく普通のPrologですが、
http://nojiriko.asia/prolog/fukakusa_no_shoushou_1_1.html
のようなコードを念頭に置いています。
あなたが意識されているのは読みやすさではなく実用性ではありませんか。
さすがにPrologからMySQLへのインターフェイスはないと思いますが、あれば、

  mysql :: かやうに(_かやうに),

のように質問することになるのでしょう。
14デフォルトの名無しさん
2013/10/12(土) 12:17:28.70
>>13
だから実用性を考えないリーダブルに意味は無いんだって。
読んだってたかが知れてる量だとリーダブルにする意味は無いだろ。

何百、何千行にもなるような実用レベルのコードを
読みやすく構築するのがリーダブルの目標

実用レベルではMySQLを使うのは当たり前の話で
それをライブラリを使わないで書いてもリーダブルといったのはお前じゃんか。

こちとら何百、何千行もあるコードを数行に収めることを目標にしてるんだ。
だから当然ライブラリを使うし、ライブラリを作る他ないだろ。

リーダブルはあくまで実用性を念頭に置いて考えなさい。
サンプル程度の短いコードの話なんて要らないのよ。
15デフォルトの名無しさん
2013/10/12(土) 20:21:50.30
>>13
横レスする

もしもそのリンク先コードがリーダブルであると主張するならば、
同サイトのPrologで書かれたクイックソートのコード:
  http://nojiriko.asia/prolog/quick_sort.html
よりも、以下のコードのほうがリーダブルであることを認めねばならない

  クイックソート [] = []
  クイックソート (中心軸:残りのリスト) =
      クイックソート
        中心軸未満の部分リスト ++ 中心軸:(クイックソート 中心軸以上の部分リスト)
    ここで
      (中心軸未満の部分リスト, 中心軸以上の部分リスト) = リストを分割 (< 中心軸) 残りのリスト

  リストを分割 関数_f = foldr 関数_g ([], [])
    ここで
      関数_g X (部分リスト_Y, 部分リスト_Z) =
        もし 関数_F x ならば
          (X:部分リスト_Y, 部分リスト_Z)
        さもなくば
          (部分リスト_Y, X:部分リスト_Z)

なお、ここでは以下を仮定した(関数型言語Haskellを元にする)架空の言語を想定している
・識別子として日本語文字(UTF-8等)が利用できる
・予約語「where」の代わりに「ここで」が利用できる
・構文「if ... then ... else ....」の代わりに「もし .... ならば .... さもなくば ....」が利用できる
16デフォルトの名無しさん
2013/10/12(土) 23:03:49.36
クイックソートのコードがリーダブルかなんてどうでもよくね?

qsort()

これが一番リーダブルだ。

そう難しいロジックは関数に隠蔽してしまう。
17デフォルトの名無しさん
2013/10/13(日) 00:05:54.29
>>16
関数抽象を言い出せば、あらゆるプログラムなんて、

program()

これが一番リーダブルだ、ってことになる

つまり>>16は、何も言明していないに等しい
18デフォルトの名無しさん
2013/10/13(日) 01:12:47.51
なんのプログラムかわからんだろ
頭悪すぎ
19デフォルトの名無しさん
2013/10/13(日) 01:29:36.94
まったくだw

もし>>17みたいなのがあったら、それは一つの関数で
何でもやってるリーダブルではないコードになってるだろうな。

リーダブルってのはバランス感覚が重要。
何を関数にして、何を関数にしないか。その見極めが重要。

優れた技術者は関数を汎用的なものにして
一度作ればメンテナンスを不要なレベルにする。
アプリのライフサイクルにおいて、修正が必要な箇所を極力減らす。
それがリーダブルなコードになる。

ソート関数なんてアプリの機能が変わったとしても、
一度作ればメンテナンする必要は殆ど無い。
だから関数にする。これがバランス感覚というもの。

>>17みたいなのは、結局program()の中をメンテナンスする
必要があるわけでなにも解決していない。
20デフォルトの名無しさん
2013/10/13(日) 01:46:35.37
それが真実とすると、整数のソート関数を作った後、文字列のソートをしたくなる。
そんな時、テンプレートが使えると理想的。
結果、C++のような変態言語が実は理想なのか?ってなってしまう。
21デフォルトの名無しさん
2013/10/13(日) 01:57:31.48
>>20
うん、各型ににおいて最速のコードを
生成するならC++が理想的だよ?

別にそこまでパフォーマンスが必要ないなら、
比較関数さえ入れ替え可能にしておけば
どんな型にでも対応できるけど。
22デフォルトの名無しさん
2013/10/13(日) 02:00:22.08
void*はリーダブルコードなのか?とか新たな疑問がわいてくる。
23デフォルトの名無しさん
2013/10/13(日) 02:03:46.58
void*でリーダブルかどうかなんて分かるわけがないだろ。
そもそも型であり、コードでないのだから
リーダブル”コード”の範疇外だ。
24デフォルトの名無しさん
2013/10/13(日) 02:05:36.89
そういうレベルまで下りてくると、関数名を適切に付けましょうとか
その程度の話になってくる。
25デフォルトの名無しさん
2013/10/13(日) 02:06:59.70
ちなみに俺はfunction_10000()まであと少しだが、十分リーダブル。
26デフォルトの名無しさん
2013/10/13(日) 02:13:43.33
>>24
重要な事なんだがねぇ。

関数の名前、関数の引数。関数の使い方。
これらがリーダブルコードの大きなカギ。

いかにメンテナンスが必要なコードを
シンプルにかつ柔軟にかけるようにするかを
提供するライブラリの構築は極めて重要な作業。
27デフォルトの名無しさん
2013/10/13(日) 02:17:20.26
コメントを適切につけましょう。
関数名を適切につけましょう。
当たり前の事をきちんとやりましょう。

以上でスレ終わり。
28デフォルトの名無しさん
2013/10/13(日) 02:18:16.83
そういう勘所わかんねえガキがすぐ喚き立てるからな。はてなダイアリーwとかツイッターwでな。滅びろガキ共
29デフォルトの名無しさん
2013/10/13(日) 02:18:48.07
>>28>>26への共感
30デフォルトの名無しさん
2013/10/13(日) 02:18:53.68
まず、コードってのは二種類に分かれる。

アプリの仕様の変化によって
メンテナンスが必要なコードと
そうでないコード。

メンテナンスが必要でないコードの例として
フレームワークやライブラリがある。

アプリってのは何千行、何万行ものコードから
なりたっている。そのうちメンテナンスが必要なコードを
極力減らすのがリーダブルコードの重要な点。

メンテナンスが必要ないコードは汎用的であり一度覚えればよく、
中身を見る必要はないか一度だけ見れば良い。
見る必要がないコードが多ければ、コードレビューも楽になる。

見なくて良いコードを増やして、
見なくてはいけないコードを減らしていくのが
大規模アプリをリーダブルにするコツ。
31デフォルトの名無しさん
2013/10/13(日) 06:56:46.33
>>28
ひとつひとつのツイートをシングルクォートで囲み最後にピリオドを
付ければ、全部 Prolog プログラム。
32デフォルトの名無しさん
2013/10/13(日) 06:57:20.07
ピコーン!

関数に分ければ読む必要ないからリーダブル!
program()
33デフォルトの名無しさん
2013/10/13(日) 07:04:09.04
ソートが必要な場合、sort()に切り分ける。
関数名をわかりやすくsortにしておく。
ここ重要。
中身は知る必要なし。
一目で何をやってるかわかるリーダブルの完成。
34デフォルトの名無しさん
2013/10/13(日) 10:56:43.53
引数なし戻り値なしの関数の占める割合を見ればわかる
35デフォルトの名無しさん
2013/10/13(日) 12:19:10.65
>>34
お、それに気づいたか

引数なし戻り値なしの関数が
多いものは読みにくいコードであることが多い。
36デフォルトの名無しさん
2013/10/13(日) 20:37:38.01
んなもんただのgotoだからな
37デフォルトの名無しさん
2013/10/13(日) 20:43:52.86
>>15
Haskell風コードの方が当然リーダブルのように思うが、違うのか?
38デフォルトの名無しさん
2013/10/14(月) 06:27:13.58
>>36
いや、gosubだ
39デフォルトの名無しさん
2013/10/14(月) 09:03:38.99
インスタンス変数を直接触る関数は自分で書いてて分かりづらいなって思ったからやめた
40デフォルトの名無しさん
2013/10/15(火) 12:33:52.56
思ったよりおもしろい
41デフォルトの名無しさん
2013/10/15(火) 23:12:00.01
関数にすると処理があちこちに飛んで見難くなる。
だから関数を使うな。

というとんでもない意見があるが、
100%間違っているというわけでもない。


それは関数=サブルーチンになっている場合。
コードが長いからという理由だけでその一部分を関数
(という名のサブルーチン)にした所でコードは読みやすくはならない。
なぜなら、関数の中まで読まないと何をやっているかわからないから。

ではなくて、関数というのは中を読まなくてもわかるようにするべき。
標準ライブラリの関数とか通常の開発で中を読むことはまずない。

中を読まなくていいということは、その分読む量が減るということ。
サブルーチンにした場合、その中を読まなくていいということはまずないので、
結局、あちこちに飛んで見難くなるだけ。
正しい関数の作り方を知らないからこうなる。
42デフォルトの名無しさん
2013/10/15(火) 23:52:26.09
1箇所からしか呼ばれないものは関数化しない、という方針は、そんなに間違ってもいないが、
絶対でもないぞ。

極端な話、初見では少々読みづらいコードになったとしても、上位レイヤと下位レイヤに
分けて実装しないと、あとあと全体の構造がメンテ不能になったりすることもある。
43デフォルトの名無しさん
2013/10/16(水) 00:03:18.00
>>42
レイヤ分けも「中を読まなくていいようにする」行為の一つだよ。

正しいレイヤ分けをしていれば、引数と戻り値のみがわかっていれば
そのレイヤで何を行うのかわかってるので、中のコードを読む必要がなくなる。

関数にするときは、中を読まなくていいように
なっているかどうかを意識しよう。

中を読まないといけない状態では
リーダブルにはならないことが多い。
44デフォルトの名無しさん
2013/10/16(水) 00:06:21.74
標準ライブラリ関数のソースは読まないけど、ドキュメントは読まないと使えないよね
>>41のいう"正しい関数の作り方"をすれば、それすらも必要ないの?
それとも、コメント書いとけっていうことを、わざわざ長文にして書いたの?
45デフォルトの名無しさん
2013/10/16(水) 00:14:56.17
>>44
ドキュメント≒コメントな。

同じようにコメントがあったとしても、
コードを毎回のように読まなくてはいけないものと
コードを(初回レビュー以外)読まなくても大丈夫なもの
二通り有るだろ?


コードを読まなくても大丈夫なものは、
標準ライブラリの関数などのように、
それ自体の役目が小さくサブルーチン(処理のまとまり)ではなく
しっかりと関数になっているもの。

サブルーチン(処理のまとまり)なんかだとコメントが有ったとしても
結局コードを読まないと、具体的なことは何もわからない。

どんな時だって、コメントがあれば問題解決するわけじゃないんだよ。

関数の中を毎度毎度読んでるようなら、
それは関数ではなくサブルーチンになっているということさ。
そういうのを減らせと言ってる。
46デフォルトの名無しさん
2013/10/16(水) 00:31:54.47
>>45
>コードを毎回のように読まなくてはいけないものと
>コードを(初回レビュー以外)読まなくても大丈夫なもの
>二通り有るだろ?
コメントでカバーできないような関数にはするなっていうこと?
47デフォルトの名無しさん
2013/10/16(水) 00:42:34.63
>>46
読まないといけないコードを減らして
読まなくても良いコードに置き換えろということ。

読まなくても良いコードの割合が増えれば
それだけコードレビューの時間も減る。


コメントでカバーとかそういう発想をそもそもしていない。
コメントがなくてもコードでわかるのであれば、コメントすら不要。
コメントを書きたくなる時点で、コードがリーダブルでないという証拠でしかない。
48デフォルトの名無しさん
2013/10/16(水) 01:35:36.55
つまりは なでしこで書かれたプログラムが
一番リーダブルなんじゃね?
49デフォルトの名無しさん
2013/10/16(水) 01:40:12.87
噛み合ってないスレ
50デフォルトの名無しさん
2013/10/16(水) 02:44:30.45
関数名と言うのは、巧いコードだと処理の概要を物語るコメントとしても機能する。
例えば void BubbleSort( int *p, int n ) という関数が何をするのかは容易に推測できる。
(ただしこんな名前でクィックソートしてるなら糞コードだが。)

一方、下手なコードだと関数名は単なる識別子としてしか機能しない。
内部で何をやっているかは関数内のコードやコメント、ドキュメントを追う必要がある。
例えば void HogeMoge() という関数が何をするのかは中身を見なければまず分からない。

と書いてみる。
51デフォルトの名無しさん
2013/10/16(水) 06:06:16.25
他人のコードを読む難しさは、”作者が暗黙にイメージしてる図”を推論することの難しさにある。
f(x+d) - f(x) / d
作者自身は「これは微分するためだ」という暗黙のイメージがあるので簡単に理解できる。
一方、他人はコードのみから「これは微分が目的か?」と推論する必要がある。
コードを推論だけで読むには、作者と同等かそれ以上のコードを書けるだけの基礎が必要となる。

これら推論を補助するには、ホワイトボードによる図説が有効である。
イメージ図が有ると無いとではコード理解の難易度が大幅に変わる。
52デフォルトの名無しさん
2013/10/16(水) 06:55:59.31
>>51
それこそ、 >>26 が言っている関数名の付け方の問題で、
関数名を xxxを微分する() にすれば良い。微分という
概念なら共有できるのだとすれば。
問題はこのように概念化、言語化できない(し難い)アルゴリズムの
場合、関数名では解決できないケースがあること。
5352
2013/10/16(水) 07:00:14.97
・・・
問題は、アルゴリズムと呼ばれているものの中には、
このような概念化、言語化できない(し難い)ものが
あり、この場合は関数名では解決できない。・・ですね。
54デフォルトの名無しさん
2013/10/16(水) 07:02:42.74
「微分ってなに?」って奴に対してリーダブルにするにはどうすればいいかってことが問題になるな
55デフォルトの名無しさん
2013/10/16(水) 07:17:57.80
ある位置の傾き
56デフォルトの名無しさん
2013/10/16(水) 08:07:51.68
>>54
それはそれで「こういう処理を微分と呼びます」でいいんじゃないの
例え新たな用語であろうと、それに対しての厳密かつ具体的な処理が示されて「こういう処理をそう呼ぶんだな」と思えないなら
プログラマとしては、数学以外の分野でもかなり困ることになるぞ
57デフォルトの名無しさん
2013/10/16(水) 22:34:46.64
>>54
それは勉強すればいいことなので微分のままでいいよ。
リーダブルというのは知識不足を補うためにあるんじゃない。

会社特有の知識とか、会社やめたら無駄になるようなものは
覚える必要はまずないから、それに関するドキュメントが必要。

でも世間一般の知識は、勉強しろの一言で終わり。
それが技術力ってものだからね。

技術者である以上、自分には技術がないのでわかりません。は恥だと思え。
俺にはわからんから高度な書き方をするな。みたいなことを言ってる奴は
技術力ねぇんだなと思えばいい。自分より技術の低いやつに合わせる必要ない。
足を引っ張ってる奴が悪い。
58デフォルトの名無しさん
2013/10/17(木) 00:18:54.98
道具が使えるだけの奴は三流。
技術・知識も使いこなせて二流。
人も使いこなせてこそ一流。
59デフォルトの名無しさん
2013/10/17(木) 00:39:04.12
ここまでオライリーの「リーダブルコード」への言及なし。

この本のいいとこ悪いとこの話題とか、
もっと深い議論があるスレを期待した俺がバカ。
60デフォルトの名無しさん
2013/10/17(木) 00:42:53.68
>>59
お前がすればいいじゃん。
他人任せなのはやめろ。
自分から行動しろ。
61デフォルトの名無しさん
2013/10/17(木) 08:09:07.43
>>57
それでは足を引っ張られる一方だろ。
自分が楽をするためには
どんな馬鹿にでも判るようなやり方を使って
どんな馬鹿をも楽に使えるような環境を整えるしかない。
62デフォルトの名無しさん
2013/10/18(金) 01:17:22.17
>>61
馬鹿は切り捨てるか育てるしかない。
技術者は技術があるもののことだ。
素人を基準にしてどうする?

自分が楽をしたいんだろう?
馬鹿用のやり方で楽になるわけがないだろう。
63デフォルトの名無しさん
2013/10/18(金) 07:22:05.29
>>62
人事権があるならやってる。
64デフォルトの名無しさん
2013/10/19(土) 10:53:36.95
じゃあ、それは人事権がないのが問題ということで。
65デフォルトの名無しさん
2013/10/21(月) 18:36:53.86
リーダブル関係ねえ
66デフォルトの名無しさん
2013/10/21(月) 22:02:52.00
そうそう、リーダブルというのは
プロがプロのために読みやすいコードとはという話であって、
馬鹿でもわかるコードのことではない。

関数さえ理解できない馬鹿がいるんだしな。
だからそいうヤツのことを考えるのは
リーダブルとは無関係。

”リーダブルではないが”馬鹿用に仕方なく書いている。
という状態になるだけ。
67デフォルトの名無しさん
2013/10/21(月) 23:11:47.66
馬鹿なんて言葉が出てくる時点でどうかと思うけどね。
68デフォルトの名無しさん
2013/10/21(月) 23:13:25.52
馬鹿は切って捨てろというのは同意したいところだが、あまり理想が高すぎると誰もついて来なくなる。
そもそも原著からして「シンプルで実践的」を掲げてるわけで。
69デフォルトの名無しさん
2013/10/21(月) 23:25:30.25
>>68
> 「シンプルで実践的」
って、馬鹿^H^Hプログラミング初心者に迎合しろって意味ではないだろ
7068
2013/10/21(月) 23:27:32.33
思うにコードを読むのにごく一部の天才しか知らない・理解できないような知識を要したり、
ごく一部の馬鹿の為に特別なルールが設けられているなどの背景についての理解を要するのは
どちらもリーダブルではない罠。

一般的なPGの大多数が、予備知識を一切持たずにすんなり読めるコードこそリーダブルと言うべきではなかろうか。
71デフォルトの名無しさん
2013/10/22(火) 00:26:07.90
> 思うにコードを読むのにごく一部の天才しか知らない・理解できないような知識を要したり

なんでそんなのを使うと思うんだ?

プログラミング言語が備えている機能を
普通に使ってるだけだぞ?

えとさ、例えばプロの技術者が、自分の使っている道具を
使いこなせてないとしたらどう思うよ?
72デフォルトの名無しさん
2013/10/22(火) 00:27:18.97
> 予備知識を一切持たずにすんなり読めるコード
そんなものはない。

技術職なんだから技術がない人間が
読めるわけ無いだろ。

反対に言えば、技術職なんだから
素人が出来ないことをできるようになれよ。
73デフォルトの名無しさん
2013/10/22(火) 00:35:47.94
「PGの大多数が」を省いて我田引水おいしいです
74デフォルトの名無しさん
2013/10/22(火) 00:42:08.45
お前が言うPGの大多数って馬鹿のことだろう?
具体的に言えば、入社一年未満レベル。
違うのか?

本物のプログラマが普通に読めるレベルなら
プログラミング言語の機能はどれを使っても
読めるはずだが。
75デフォルトの名無しさん
2013/10/22(火) 00:50:13.69
>71-72

最後に「一般的なPGの大多数が」と書いてるのに、何故そんな解釈するのさ。
言語が備えている機能を普通に使っているコードが読めないレベルが一般的で大多数だとでも?
だとしたら他を見下しすぎ。

あと「予備知識を持たずに」とは書いたけど、「勉強せずに」とは書いてないからね?
例えば余程難解な代物でも無い限り(この条件を見落とさな用に!)、コメントに「~参照」とでも書いておくだけでも
予備知識を持たずに読めるコードになるでしょ。
76デフォルトの名無しさん
2013/10/22(火) 00:54:16.90
>74
>本物のプログラマが普通に読めるレベルなら
>プログラミング言語の機能はどれを使っても
>読めるはずだが。

アセンブラでフルスクラッチできるレベルなんでしょうなぁ。
トグルスィッチでミスせず入力しきった真のPGも居ますが。
77デフォルトの名無しさん
2013/10/22(火) 00:54:37.35
一般的なPGの大多数がどの程度のものを指しているのかしらないけど、
例えば、プロジェクトがオープンソースプロジェクトで
多くの人が参加しているとしよう。

その予備知識を一切持たずにすんなり読めるコードに
書き換えましょうと提案して通るレベルならいいよ。
まあ少数の初心者のために書きなおすことはないだろうね。
78デフォルトの名無しさん
2013/10/22(火) 00:56:14.61
>>74
PGの大多数が入社一年未満レベル?
なに言ってんの?
79デフォルトの名無しさん
2013/10/22(火) 00:58:27.98
ユニバーサルデザインの考え方だな。
より一般的な、説明が不要な方法で実装したほうが、
結局はみんなが幸せよ。

例えば売掛買掛とかいう概念にしがみついてんのは、
自分の立場を守ろうとする老害よ。
専門性に逃げ込むような輩は先細っていくよ。
80デフォルトの名無しさん
2013/10/22(火) 01:01:20.34
おいおい、みんな結局同じことを言ってるぞ。

リーダブルコードというのは、
初心者プログラマでも読めるレベルで書くことじゃない。
プロがプロとして読みやすいコードを書くということだ。

言語の機能には時として使わないほうがいいとされる機能もあるが、
そういうものないのなら、すべて使って良い機能だ。

言語の機能を知らないのは、初心者が頑張って技術をつけろという話であって
初心者のレベルに下げようということではない。

だろ?
81デフォルトの名無しさん
2013/10/22(火) 01:02:49.59
>>79
> より一般的な、説明が不要な方法で実装したほうが、

より一般的な、説明が不要な方法ってなんだよ?
俺らは技術者だぜ。

技術的な方法で実装するのは問題ない。
わからないのは技術が低いからなだけだろう?
82デフォルトの名無しさん
2013/10/22(火) 01:04:44.66
そもそも「初心者」っていう言葉を使ってるの一人だけっぽいが…。
我田引水っ子が混じってる気がするから気持ちよく話に参加できない。
83デフォルトの名無しさん
2013/10/22(火) 01:05:25.45
どんな技術でも使うことに正当な理由があれば使うし、
使うべきでは無いという正当な理由があれば使わないよ。

ただ「周りがわからないから使わない」は
正当な理由にはなりえないな。妥協した理由だ。
84デフォルトの名無しさん
2013/10/22(火) 01:08:07.19
>>83
なるほど。正当な理由と
妥協した理由ね。

つまりはリーダブルコードの話をする時
正当な理由のみで語るべきということ。

そこに妥協した理由を持ってきてはいけない。
妥協したいならお前の周りだけ妥協すればいいだけじゃん。
技術のなさを恥じながら妥協しておけよ。
85デフォルトの名無しさん
2013/10/22(火) 01:09:50.20
>79
>より一般的な、説明が不要な方法で実装したほうが、結局はみんなが幸せよ。

この「説明が不要」と言うのはうまい表現かもね。
専門知識・用語を駆使して「説明を省く」のとはちょっと違う。
86デフォルトの名無しさん
2013/10/22(火) 01:14:31.11
>>85
具体的に言ってよ。

専門知識・用語を使えば簡単なのに、
使わないほうがいい例を
プログラミング技術の話でたとえてみて。
87デフォルトの名無しさん
2013/10/22(火) 01:16:15.84
>>81
> より一般的な、説明が不要な方法ってなんだよ?

分からないの?
それは技術が低いから?
88デフォルトの名無しさん
2013/10/22(火) 01:17:05.09
>>87
いいから説明しろよ。

みんなエスパーじゃないんだからさ。
お前の考えだろ?
89デフォルトの名無しさん
2013/10/22(火) 01:17:50.73
>>88
頑張って、技術をつけてくださいね;)
90デフォルトの名無しさん
2013/10/22(火) 01:18:19.54
>>89
くだらない煽りはいらん。
さっさと寝てろ。
91デフォルトの名無しさん
2013/10/22(火) 01:18:59.89
説明を求められて説明できない人って
何のために意見を言ったんだろうかね。
92デフォルトの名無しさん
2013/10/22(火) 01:25:54.50
>86
>専門知識・用語を使えば簡単なのに、使わないほうがいい例

例えばC++ではないC言語で、「オブジェクト」という単語が出てきたとしよう。
本当にCをよく理解しているならそれが何を意味してるのか分かると思うが、
なまじC++等を知ってるプログラマを混乱させる元になる。
93デフォルトの名無しさん
2013/10/22(火) 02:12:00.61
> 例えばC++ではないC言語で、「オブジェクト」という単語が出てきたとしよう。

その場合それは専門用語ではない。
誰かが勝手に作った用語だろう?

そういう人こそちゃんと勉強して
正しい専門用語を使えと思うんだが?
94デフォルトの名無しさん
2013/10/22(火) 02:20:08.94
>>63-65
合ってるだろ、leaderぶる話で
95デフォルトの名無しさん
2013/10/22(火) 02:32:27.96
ぐんもー☆ぞうをなでなで
96デフォルトの名無しさん
2013/10/22(火) 06:28:57.24
>>88 みんなエスパーだよ?
97デフォルトの名無しさん
2013/10/22(火) 07:37:14.92
関数型言語であるような、mapとかfilterとかは、
知らないと読めない典型だけど、いったん知ってしまえば
とても便利だよね
これがリーダブルなのかそうでないのかは
読み手によるとしか答えようがないなあ
98デフォルトの名無しさん
2013/10/22(火) 08:40:05.16
技術の高さに頼らなくても読めないと駄目だろ
99デフォルトの名無しさん
2013/10/22(火) 09:15:49.31
その言語の典型的な書き方、イディオムは、読めて当然と考えていいんじゃないか?
それをはずれた書き方は読むのをストップさせるリーダブルじゃないコードだろ。
イディオムを覚えていない初心者はこの議論の範疇外だよ。
100デフォルトの名無しさん
2013/10/22(火) 21:39:53.89
クラス名や関数名、主要変数名に気を使って、ぱっと見ておおまかな処理の流れさえ分かれば、細かい処理はわかりづらくてもコメント打っておけば良いと思っている

公開する範囲にもよると思うが
101デフォルトの名無しさん
2013/10/22(火) 22:21:20.05
>>97
mapやfilterはものすごく勉強しないと理解できない物?
違うよね。

ちょっと知ればいい程度のものなら、勉強すれば終わりでしょ?
そんなものまで、知らないから読めないという人のために
使うかどうか迷うの?

ほんの数分の勉強で、これから先ずっと快適になるんだよ。
比べるまでもないことだよね。
102デフォルトの名無しさん
2013/10/22(火) 22:57:17.67
>93
>その場合それは専門用語ではない。
>誰かが勝手に作った用語だろう?

手元にあるK&R第2版日本語訳にはこう書いてある。

【付録A(ANSI規格)】
A5 オブジェクトと左辺値
オブジェクトは名前付きのメモリ領域であり、左辺値(lvalue)はオブジェクトを参照する式である。
103デフォルトの名無しさん
2013/10/22(火) 23:00:30.37
K&Rをバイブルとする技術者には御馴染み>そのオブジェクト

>>93は頑張って勉強しなきゃな。
104デフォルトの名無しさん
2013/10/22(火) 23:07:12.47
K&Rは、もはや参考書でしかないよ。
まずは規格票を読まなきゃ。
105デフォルトの名無しさん
2013/10/22(火) 23:09:51.44
>104

「付録A」はその規格について述べてる訳ですが?
106デフォルトの名無しさん
2013/10/22(火) 23:18:58.21
解説であって規格票そのものではないし、しかもC99じゃなくてC89のだし。
107デフォルトの名無しさん
2013/10/22(火) 23:21:56.88
俺らの世代以上の人なら、K&Rの例の「オブジェクト」について、
少なくとも何度か話題に上がったことは当たり前にあるだろうね。
108デフォルトの名無しさん
2013/10/22(火) 23:30:35.80
>106
まともなプログラマなら>102の内容はc99でも通用する記述だと分かるだろ
109デフォルトの名無しさん
2013/10/23(水) 00:04:30.54
そもそもコードは「キーワードと文法しか知らない」コンパイラに分かるように頭から読んでいけば分かるように書いてある訳で、
どんな糞コードであっても、コンパイルが通るなら言語規格を熟知してる奴には読めるはずである。
すなわち「規格を熟知している奴に読めれば良い」という条件では糞コードを除外できない。
110デフォルトの名無しさん
2013/10/23(水) 09:14:14.51
>>103
K&Rが勝手に作った用語。
111デフォルトの名無しさん
2013/10/23(水) 09:58:56.67
CはそもそもK&RのRのほうが勝手に作った言語だけどなw
112デフォルトの名無しさん
2013/10/23(水) 10:02:26.18
実に見事なニワカホイホイだった
113デフォルトの名無しさん
2013/10/23(水) 10:42:04.43
小学生の口喧嘩みたいだ。
114デフォルトの名無しさん
2013/10/23(水) 13:55:37.88
結局規格票で確認した奴はいなかった、というオチだろ?
115デフォルトの名無しさん
2013/10/23(水) 21:15:42.29
純粋なgetter,setterじゃないのにget~とかset~とかは使わない方がいい?
例えば,なんかのファイルのパスを返すような関数があったとして,
getHogePath()とかいう関数名はあり?
もちろんhogeっていうメンバ変数はないとして
116デフォルトの名無しさん
2013/10/23(水) 22:31:00.52
>>115
Javaの話として解釈する
ぱっと見て意味はわかるし良いと思う
所属しているクラス名がHogeなら、考え直した方がいいかも
117デフォルトの名無しさん
2013/10/23(水) 22:34:24.51
動的型付け言語の場合。
クラスがHogeであっても、getHogeってした方がいいよ。

なぜなら、getだけじゃ何からのgetか分からないから。
近くでnewしていれば簡単だが、関数の外から
渡されてきたらあちこちのコードを読まないとわからない。

しかも一つ見つけたら、それで正しいとは限らない。
もしかしたら見つけたのとは別のクラスも渡しているかもしれない。
118デフォルトの名無しさん
2013/10/23(水) 22:52:48.88
ISO/IEC 9899:201x Programming languages - C
http://www.open-std.org/JTC1/SC22/WG14/www/docs/n1570.pdf 24ページ目辺り

3.15
object
region of data storage in the execution environment, the contents of which can represent values
119デフォルトの名無しさん
2013/10/23(水) 22:54:38.49
「リーダブルコード」的には、getHogeはオススメされていない。
・属性値を得るだけの軽い処理とまぎらわしい
・明確じゃない(ほかの動詞を使うべき)
120デフォルトの名無しさん
2013/10/23(水) 22:58:55.35
内部処理を意識させないために
getでいいのでは?

内部処理がどうなっているか不明なのだから
軽いかどうかなんてわかり用がないし
変わることだってだろう?

そこに何かの想定をしてはいけないだけの話。
121デフォルトの名無しさん
2013/10/23(水) 23:02:09.66
>>120が英語が出来ないだけの話
リーダブルコードの意味をもう一度考えたほうがいい
122デフォルトの名無しさん
2013/10/23(水) 23:09:46.14
Foo.getHoge(); と書くと「FooがHogeをgetする」になってしまう罠。

仮にこれを「FooからHogeをgetする」と読むのならば、
if( Foo.isHoge() ) を 「もしFooがHogeなら」と読めなくなる。
123デフォルトの名無しさん
2013/10/23(水) 23:16:32.20
そのロジックはこじつけすぎ
慣習には従うべき
124122
2013/10/23(水) 23:19:31.79
間違えてUCCで書いてもうた…orz
でもまぁ標準ライブラリでもよく考えるとおかしなのがあるから、あまり気にせずとも良い気も。
125デフォルトの名無しさん
2013/10/23(水) 23:20:41.94
>>115
定数オーダーの処理ならget,setって言っていいイメージでいます。
126デフォルトの名無しさん
2013/10/23(水) 23:31:43.97
話が逸れるけど関数名だけに拘るのではなく、戻り値や引数の型その他を含むシグネチャ全体に気を使った方が良いかと。
特にC/C++なんかだとconstの有無はネーミングと同じ位気を使って欲しい。
うまく使えば読みやすくなるし。
127デフォルトの名無しさん
2013/10/23(水) 23:31:45.03
そのHogePathの出どころによるよね
DBから探してくるならfindHogePathとかsearchForHogePath
コンポーネントをいくつか組み合わせて作るならcomposeHogePath
どこかに設定してあるのをちゃちゃっと取ってくるだけならgetHogePath
処理の中身がわかる名前がいいと思うよ
128デフォルトの名無しさん
2013/10/24(木) 01:34:22.78
>>122
> Foo.getHoge(); と書くと「FooがHogeをgetする」になってしまう罠。

つまりgetは一切使うなってこと?

いや違うな。Fooをcreateしてしまう場合は、create Fooだろう?
Foo.createだったら、Fooが作成してしまうになってしまう。

いやいやcreateではなく、newだからnew Fooであってるのか。
Foo.newはだめだな。

でもこれはnewだけの話だろう?

Array.join(', ')とかどうなるんだ?配列が','でjoinする?
配列をjoinするんじゃないのか?

おかしいな。

とりえず俺としての結論は、
Foo.isHogeがたまたまそう読めるからといって、だからなに?
他は違う読み方をすればいいだけじゃない。
ってことだな。
129デフォルトの名無しさん
2013/10/24(木) 01:49:19.21
>>128
RubyではFoo.newなんだが(;^ω^)
130デフォルトの名無しさん
2013/10/24(木) 03:46:48.68
>>129
だから>>122はおかしいってことでしょ
131デフォルトの名無しさん
2013/10/24(木) 07:03:23.93
>>129
それは一文字でも短くタイプするとかいう変な宗教だろう
リーダブルとは真逆
132デフォルトの名無しさん
2013/10/24(木) 09:16:09.11
Foo.new と new Foo の違いは、前者がメタオブジェクト(Classのインスタンス)の
インスタンスメソッドの呼び出しであるのに対し、後者がnewという前置演算子による
演算子式である、という意味の違いが構文の違いになっているに過ぎず、
リーダビリティとは全く何の関係もない。

それを「一文字でも短くタイプするとかいう変な宗教」とか考える奴の脳味噌が変。
133デフォルトの名無しさん
2013/10/24(木) 09:45:45.73
言いたい事をほぼ>>132が言ってくれたから話が早いw
134デフォルトの名無しさん
2013/10/24(木) 10:17:04.85
>>131
一文字でも短くタイプするとかいう変な宗教とは、
Foo()
と書くリーダブブルとは真逆な某言語のことだろw
135デフォルトの名無しさん
2013/10/24(木) 10:18:18.30
>>134
俺 Python スレとシャワートイレ板で有名コテやってるかあんまり怒らせないほうがいいよ
136デフォルトの名無しさん
2013/10/24(木) 10:56:44.27
>>134
これ一番分かりやすいな
137デフォルトの名無しさん
2013/10/24(木) 12:52:43.82
その言語において、コンストラクタが普通の関数と同じものなら、それで問題ない。

プログラミング言語は、計算のための意味論を持った、形式言語である、という前提を外した
議論からは、何も生まれないよ。
138デフォルトの名無しさん
2013/10/24(木) 21:30:48.46
>>134
Perlは Foo だけでいけるよ。
139デフォルトの名無しさん
2013/10/24(木) 21:33:14.24
>>134
なんでリーダブルとは間逆なの?

極端に短く書いたらリーダブルじゃなくなるけど、
適度に短いのはリーダブルだよね?
140デフォルトの名無しさん
2013/10/24(木) 21:41:37.23
>>134みたいな馬鹿に賛同する奴は
本当に馬鹿なんだろうなって
心の底から思うよ。
141デフォルトの名無しさん
2013/10/24(木) 21:52:44.97
というより、ちょっと前から一人おかしい子が紛れ込んでる希ガスw
知ったようなことを言いたいんだ、ということだけ分かる。
142デフォルトの名無しさん
2013/10/24(木) 22:02:24.23
こんな感じで分かり易いコード書けるよー、的な話題になると、
気の利いたコード書けない低脳が、そんなの関数化するから関係無いと言い出し、
その結果、関数名とか変数名とか、あとメソッド呼び出しでの括弧省略とか、
143デフォルトの名無しさん
2013/10/24(木) 22:05:39.81
あぁ、お前が読んでないことが2行目でわかったよw
さっさと自分のスレに帰って、
そいつに泣かされてこい。
144デフォルトの名無しさん
2013/10/24(木) 22:08:26.25
自分のスレとか言い出したら
病気ですよ
145デフォルトの名無しさん
2013/10/24(木) 22:11:41.26
>>144
146デフォルトの名無しさん
2013/10/24(木) 22:12:24.79
あ、馬鹿にしたことに気づいてないのかw
147デフォルトの名無しさん
2013/10/24(木) 22:25:41.04
自分のスレって何だ?
148デフォルトの名無しさん
2013/10/24(木) 22:30:08.34
三人称単数ならgetsだろ藁()
小学生かお前ら核爆()
149デフォルトの名無しさん
2013/10/24(木) 22:40:56.38
>148
メンバからの呼び出しの場合
150デフォルトの名無しさん
2013/10/24(木) 23:07:37.25
>>139
new Foo や Foo.new は「適度に短い」からリーダブルだよ
なぜなら、new というキーワードによって、単なるメソッド呼び出しと
コンストラクタ呼び出しを一目で見分けられる、
つまりコードリーディングを配慮した言語設計だと言える

それに対して、Foo() は「極端に短い」からアンリーダブルだね
なぜなら、前後の文脈を確認しなければ、それがメソッド呼び出しなのか
コンストラクタ呼び出しなのかが区別できない
つまりコードリーディングを無視した
「一文字でも短くタイプするとかいう変な宗教(>>131)」に従った言語設計だと言える

たとえば、f() というコードは一見するとメソッド(または関数)呼び出しに見える
しかし、その前の文脈に f = Foo があれば、f() の意味はコンストラクタ呼び出しになる
もしも、これが new f または f.new であれば迷うこと無くコンストラクタであると判断できる
151デフォルトの名無しさん
2013/10/24(木) 23:09:12.24
> それに対して、Foo() は「極端に短い」からアンリーダブルだね

なんで? Foo()という関数は読みづらいか?
152デフォルトの名無しさん
2013/10/24(木) 23:10:31.80
ていうか、何でコンストラクタと普通の関数を区別する必要があるの?
馬鹿なの?
153デフォルトの名無しさん
2013/10/24(木) 23:11:09.04
メソッドとかコンストラクタと言ってる時点で
わかってないやつじゃないか。

このスレで言う、リーダブルとは
技術の低いやつに合わせることではないって
話と同じことだな。
154デフォルトの名無しさん
2013/10/24(木) 23:11:54.80
newFoo = Fooって書けばよくね???
155デフォルトの名無しさん
2013/10/24(木) 23:18:11.87
アホがアホのフリをする必要は無いぞ。
156デフォルトの名無しさん
2013/10/24(木) 23:31:48.54
そもそもオブジェクト指向とかゴミだろ藁()
OCaml最高!!
157デフォルトの名無しさん
2013/10/24(木) 23:37:35.84
Objective Caml ........
158デフォルトの名無しさん
2013/10/24(木) 23:38:57.24
第一級のモジュールができて
完全にオワコンになったOCamlのO
159デフォルトの名無しさん
2013/10/24(木) 23:40:51.03
一時のブームに流されたばかりに.....
160デフォルトの名無しさん
2013/10/24(木) 23:41:59.24
おまえら、ここは言語の勝負するスレじゃないぞ
161デフォルトの名無しさん
2013/10/24(木) 23:47:53.68
if !flag vs. unless flag 派のたたかいはまだですか
162デフォルトの名無しさん
2013/10/24(木) 23:50:39.18
論理的にはどちらか一方あればいいけど、
読むことを考えれば、両方できる方がいい。
163デフォルトの名無しさん
2013/10/24(木) 23:51:21.06
のってやろう
俺は!を見逃すという凡ミスでハマったゴミクソ野郎なので
unless派だ
164デフォルトの名無しさん
2013/10/24(木) 23:52:16.44
実装は同じになるけど、英語の意味は違うよ
だから両方ある方がいい
165デフォルトの名無しさん
2013/10/25(金) 01:24:29.19
if not でいいじゃん
166デフォルトの名無しさん
2013/10/25(金) 10:07:22.11
条件式は明示的に比較演算子を記述すること
167デフォルトの名無しさん
2013/10/25(金) 10:22:07.23
俺みたいな雑魚が until と unless を間違えるから、どちらかを別の単語にすべきだ。
168デフォルトの名無しさん
2013/10/25(金) 11:01:11.16
if修飾子が好き。
条件の文字をxで置き換えて書くと

next if xxxxxx
next if xxxxxxxxxxxx
next if xxx

と揃っていて美しい。一瞬でこの一群の目的が分かる。
旧来の方法だと、

if (xxxxxx) next
if (xxxxxxxxxxxx) next
if (xxx) next

こうなって、この一群が同一の目的を持ってることがスグには分からない。
169デフォルトの名無しさん
2013/10/25(金) 11:35:26.92
>>168
すみません。このnextっていうのは何のことですか?
170デフォルトの名無しさん
2013/10/25(金) 11:45:26.35
>>163
そう言うやつはそのうち unless !flag と書いてはまるので、俺は unless いらない派
171デフォルトの名無しさん
2013/10/25(金) 11:49:51.98
>>169
C で言うところの continue じゃね?
perl とかが next だったような気がする。
172デフォルトの名無しさん
2013/10/25(金) 11:56:20.11
>>168
同じ目的ならor条件にしろ
173デフォルトの名無しさん
2013/10/25(金) 12:31:03.71
一人だけ周回遅れな発言してるなぁ…
174デフォルトの名無しさん
2013/10/25(金) 20:13:24.30
条件によりオプショナルなら前置
null対策などで仕方なく条件を付けるのなら後置

みたいに書いたりしないか
175デフォルトの名無しさん
2013/10/25(金) 23:00:46.24
>>168
こうすりゃいいやん

if (xxxxxx)      next
if (xxxxxxxxxxxx)  next
if (xxx)         next
176デフォルトの名無しさん
2013/10/25(金) 23:24:53.78
変数宣言でそれやってるやついるな。
177デフォルトの名無しさん
2013/10/26(土) 00:49:23.99
変なタイプミスした行をあぶりだすのに、それがいいときもある。
状況しだい。
178デフォルトの名無しさん
2013/10/26(土) 12:52:26.30
getterでretunr文の位置合わせるのはやりすぎ?
179デフォルトの名無しさん
2013/10/26(土) 12:59:11.00
そういうタイプミスをみつけやすくしたいという意味?
180デフォルトの名無しさん
2013/10/26(土) 16:11:57.24
int getSpamSpamSpam() {return spam;}
int getHam() {return ham;}
int getEggEggEgg() {return egg;}

int getSpamSpamSpam() {return spam;}
int getHam() {return ham;}
int getEggEggEgg() {return egg;}

下のほうが見やすい気がするけど,同僚からは不評
181デフォルトの名無しさん
2013/10/26(土) 16:15:01.79
スペース纏められてたw
182デフォルトの名無しさん
2013/10/26(土) 16:17:35.98
int getSpamSpamSpam(){return spam;}
int getHam() {return ham;}
int getEggEggEgg() {return egg;}

int getSpamSpamSpam() {return spam;}
int getHam()        {return ham;}
int getEggEggEgg()     {return egg;}

こんな感じか?
183デフォルトの名無しさん
2013/10/26(土) 16:25:30.69
ふつうの等幅フォントのエディタで書いてコピペしてくれた方が、
navi2chでは見やすいんだが
184デフォルトの名無しさん
2013/10/26(土) 21:25:49.66
名前と括弧の間にスペースを入れて整形するのは変かな?
185デフォルトの名無しさん
2013/10/26(土) 22:35:48.73
186デフォルトの名無しさん
2013/10/26(土) 23:00:18.20
変かどうかっていうのは、オープンソース、
それも有名で多くの人が参加しているようなものの
コードをみればいいだけ。

こういうのは考えるのではなく、調べて答えを見つけようぜ。
187デフォルトの名無しさん
2013/10/26(土) 23:03:48.33

イテレータならものによっては改行とスペース入れてそろえる
188デフォルトの名無しさん
2013/12/03(火) 11:00:09.00
>>182
もっと名前の長い関数を追加することになったら面倒だろ
189デフォルトの名無しさん
2013/12/04(水) 01:09:35.65
関数の中身を見比べる必要がある時点でおかしいだろと思った
190デフォルトの名無しさん
2013/12/05(木) 07:45:11.65
達人プログラマでも同じようなインデントしてたし
>>182はそこまで変ではないのでは?
191デフォルトの名無しさん
2013/12/06(金) 01:25:03.50
見た目云々より、エディタの矩形選択とかを活かせるメリットの方が大きい気が。
192デフォルトの名無しさん
2013/12/29(日) 23:04:49.03
クラスの中のある関数をつかうために
あらかじめいくつかの要素をsetしておかないといけないという設計はよくない?
setしないで関数を呼び出したときには例外を出す感じ

コンストラクタにいれてしまったほうがいいんだろうか?
193デフォルトの名無しさん
2013/12/29(日) 23:06:02.09
>>192
うん。
何か気に入らないの?
194デフォルトの名無しさん
2013/12/29(日) 23:59:47.76
>>193
コンストラクタの引数に不正な値をいれたときの処理が気になる
コンストラクタの中で例外だすのってありだっけ?
そうするとインスタンス生成してから使うところをtryで囲まないといけないし
195デフォルトの名無しさん
2013/12/30(月) 00:03:01.47
>>194
ありだよ。

「tryで囲まないといけない」ってのも疑わしいが、それがほんとだとしても
「setしないで関数を呼び出したときには例外を出す」ってしたときと何が違うんだ?
196デフォルトの名無しさん
2013/12/30(月) 00:20:47.15
try {
____a = A()
____a.set(something)
____a.do_something()
}

a = A()
try {
____a.set(something)
}
a.do_something()
の違いだと思ってる
コンストラクタで例外がでるとそのクラスのインスタンスを使うところ
すべてtryで囲まないといけなくない?
197デフォルトの名無しさん
2013/12/30(月) 00:21:24.74
a = Noen
try{
____a = A()
}
a.do_something()
にしろってこと?
198デフォルトの名無しさん
2013/12/30(月) 01:20:49.83
>>196-197
それでいいんじゃね?

ごく狭い範囲をtryで囲むみたいなレアケースの見た目(いずれにしても残念)を
なんでそんなに気にしてるのか知らんけど。
199デフォルトの名無しさん
2013/12/30(月) 02:04:19.44
FactoryMethodパターンもいいかも。

これだったら、値を解析して正しい値だったらクラスを生成して返し、
不正だったらnullか、ヌルオブジェクトパターンでダミーのオブジェクトを返してやるとか色々出来るから。

A create(int youso)
{
if(yousoが正常) return new A(youso);
else return null;
}

class A
{
int _a;
A(int youso) { _a = youso; }
}
200デフォルトの名無しさん
2013/12/30(月) 09:03:57.73
>>198
コンストラクタに例外がある場合の書き方がよくわからなかった

>>199
こういう方法もあるのか
参考になります
201デフォルトの名無しさん
2013/12/30(月) 11:04:11.99
デザパタの目的はいくつかあるだろうが、
その中で「カタログ化」だの「パターンに名前をつけて共有」だの、
さもそれこそがおいしいという論調には疑問だね。

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


204デフォルトの名無しさん
2014/11/15(土) 06:53:16.50ID:6Z/ZPh8x
>>190
変更コストがつらくなってこない?
読みやすさでは>>182も好きなんだけど
205デフォルトの名無しさん
2014/11/15(土) 14:58:16.01ID:/lNofN3M
>>204
変更コストって言っても
getterでかつ今までの関数名より長いときにしか起こらないし,そこまで気にしなくていいのでは?
1分もかからないっしょ
206デフォルトの名無しさん
2014/11/15(土) 16:17:34.44ID:lm0Ap3/W
変更コストよりも
変更したい箇所以外に、並列されてるだけで関係ない行まで修正が発生するのは気持ち悪いと感じる
1行の修正のはずなのにdiffとると何行も出たり まあオプションで消せるけど
207デフォルトの名無しさん
2014/11/16(日) 07:07:37.48ID:fuIgZytk
それでタイポして余計なバグが増えて…
ってなったから>>182みたいに揃えるのは止めたなぁ
見栄えだけなら揃えるのが好きだけど
208デフォルトの名無しさん
2014/11/16(日) 08:15:35.42ID:fuIgZytk
見栄え→読みやすさ
209デフォルトの名無しさん
2014/11/16(日) 08:30:50.35ID:EKSPBw73
returnの位置を揃えるのとタイポは本質的には関係ないじゃね?
210デフォルトの名無しさん
2014/11/17(月) 10:22:10.98ID:vQHrlZj+
alignみたいなやつで気軽にガンガン揃えられるような環境ができればいいのだろうか
211デフォルトの名無しさん
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);
}
212デフォルトの名無しさん
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());
214デフォルトの名無しさん
2014/11/19(水) 12:53:45.74ID:GN47sEav
>>212
なるほど、代入が1命令で済むなら参考演算子の方が見やすいですよね。
ちなみに複数行にわたる時はどうします?

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

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

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

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

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

my $value = {
 key1 => 'value1',
 key2 => 'value2',
 key3 => 'value3',
}->{$key} || 'other';
217デフォルトの名無しさん
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をつけるのは煩わしく思いますが。
219デフォルトの名無しさん
2014/11/20(木) 00:55:42.04ID:8SWsMjHc
それより条件式の比較演算子の省略と条件式内での関数呼び出しをやめてほしい
220デフォルトの名無しさん
2014/11/20(木) 11:12:42.88ID:nwROesTX
>>219
それは十分シンプルで十分意味がわかるならば問題ないよ。

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

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

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

ではなく

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

こういうこと?
224デフォルトの名無しさん
2014/11/20(木) 18:35:58.57ID:d0Ca/Au6
比較演算子を省略しないとこうか
result = func();
if (result == true) { }

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

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

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

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

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

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

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

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

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

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

一般的な仕組み、例えばsyslog当たりを使えば
分かりやすくなるよね。
252片山博文MZ次期CEO ◆T6xkBnTXz7B0
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は完全に個人的な経験からくる偏見だな。ごめんね。
254デフォルトの名無しさん
2014/11/24(月) 00:10:37.50ID:LP7Sk3Ho
プロとか言い訳すんなやw

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

リーダブルの真逆てコードの意図が伝わってこないものを言うんじゃない?
270デフォルトの名無しさん
2014/11/24(月) 01:06:14.43ID:cBWQwcU/
どうでもいいけど、syslogでデバッグって相当頭悪いか、ぬるい開発だな
271デフォルトの名無しさん
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
272デフォルトの名無しさん
2014/11/24(月) 01:11:55.52ID:LP7Sk3Ho
既に世の中にあるものを使わずに(知らずに)
少ない知識でもやれるぜって考えで
オレオレで実装するのも、リーダブルにならない原因の一つだよね。
273デフォルトの名無しさん
2014/11/24(月) 06:48:20.80ID:owm7UG/9
なぜ、人はアンリーダブルを求めるのでしょうか?
人は生きて、死ぬだけの存在でありながら、
存在するということに意味を持たせ、生と死をより複雑なものにしようとしました。

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

デバッグプリント関係は、『CODE COMPLETE』 第八章防御的プログラミングがお勧め。
276デフォルトの名無しさん
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
>× 書き方を統一しようとする
>○ わかりやすいように書く

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

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

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

忘れてない

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

もちろん

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

何か言い返せよw
282デフォルトの名無しさん
2014/11/24(月) 08:03:05.74ID:NWUcXEp0
>>279
で?と言われてもな。

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

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

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

いや、AとBの両方わかりやすくても、一つの製品にAとBが混在してたら駄目だろ
284デフォルトの名無しさん
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
君のコードは分かりにくい。はい。論破。

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

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

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

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

すまんが、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を用意したのに使ってないというのは本当に最悪

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

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

だからsyslogだろ?

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

サーバーソフトだけじゃね?
クライアントソフトの例を 10個ぐらいあげてみて
295デフォルトの名無しさん
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決め打ちって何かあるの?
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で残したりしねーよ?

そういう残してあるコードが
じゃまだってのが、話の始まりだろ?
300デフォルトの名無しさん
2014/11/24(月) 12:01:55.48ID:tFEPR/wR
>>298
ああ、理解した
デバッグエイドとログを完全に別の概念として使い分けるということか
プリプロセッサ命令のある言語だと確かにそれがスマートだな、なるほど
301デフォルトの名無しさん
2014/11/24(月) 12:05:06.98ID:/Xnwup+Z
>>299
> 開発時のみで使うものだったら
> ifdefで残したりしねーよ?

え゛?
302デフォルトの名無しさん
2014/11/24(月) 12:55:47.70ID:NWUcXEp0
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がネストしないようにしたいと思ってるけどね
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で切り替わる部分が複数に成った場合でも、定義を一カ所にまとめておける。
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+Z
>>313
func の内容が数行ならいいけど、もっと増えると同じ内容を両方に書かないといけなくなる
func の型とか引数が変更された時に片方の変更を忘れる

とかあるので、俺はやらない
317デフォルトの名無しさん
2014/11/25(火) 01:15:46.45ID:45kyml8T
>>316
> func の内容が数行ならいいけど、もっと増えると同じ内容を両方に書かないといけなくなる
> func の型とか引数が変更された時に片方の変更を忘れる

だからこそ>>313のように書くんでしょ?

これなら変更が一箇所にまとまる。

もしこれを、funcを使う場所ごとにに
ifで加工としたら、funcを100箇所使っていたら、
100箇所、同じ変更を繰り返さないといけないよね?
318デフォルトの名無しさん
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 で必要とする情報や、逆に変更した情報等のやり取りを引数でやる必要もあるので、結構面倒に思うんだけど
322デフォルトの名無しさん
2014/11/25(火) 07:46:51.85ID:53f+YSIW
確かOpenSSLも各プラットフォーム毎に
#ifdefの嵐でで手が付けられなくなったらしいけど、
こういうのはTemplate Methodパターンみたいなものを使えばいいんだよ。

デバッグ用の関数、またはクラスと
リリース用の関数、またはクラスを作って
それを使うコードはどちらを使っているか意識する必要がないようにする

これぐらい基本だと思うんだが、OpenSSLを見る限り
世の中のレベルってこの程度のものなのかもしれんな。
323デフォルトの名無しさん
2014/11/29(土) 12:47:04.96ID:u8/hKXWz
>>322
こう?関数fにdebug用とrelease用をラップさせんの?

f_debug() { }
f_release() { }
f() { f_debug(); }
324デフォルトの名無しさん
2014/11/29(土) 14:50:29.22ID:quQRjBUx
デバッグ用出力の話なら
>>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
336デフォルトの名無しさん
2014/12/12(金) 23:24:59.05ID:OvrU0/Qj
>>335
> グローバルにすればそういう系のコードが排除出来てすっきりするんで。

ごめん、マジで言ってることがわからん
337デフォルトの名無しさん
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;
}
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:9Ma9oPly
>>339
> だからグローバル使えばどうすっきりするのかと

グローバルを使えば、メモリ確保が失敗することはない。
つまり、すべてのメモリ確保エラーを
書かないで済む。
347デフォルトの名無しさん
2014/12/12(金) 23:58:05.91ID:SUQ8ZHc4
>>343-344
ごめん、マジで伝わらん
348デフォルトの名無しさん
2014/12/12(金) 23:59:06.81ID:bKiv2VYA
やり取りの内容がまだ理解できるレベルではないが
奥がふかいんですねえ
やっぱ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
354デフォルトの名無しさん
2014/12/13(土) 10:22:39.34ID:xVemfz4a
と思ったら終わってたのね、話
355デフォルトの名無しさん
2014/12/13(土) 10:25:53.22ID:/4slIr06
>>353
え??

そもそも ID:Znidw3Lc なん?
356デフォルトの名無しさん
2014/12/13(土) 10:31:24.66ID:xVemfz4a
>>355
ちがうよ
ログ見ながら書いてみただけ
357デフォルトの名無しさん
2014/12/13(土) 10:36:24.43ID:JDqKcE2X
十年ROMれ
358デフォルトの名無しさん
2014/12/13(土) 10:40:39.82ID:xVemfz4a
あぅぅ
359名無しさん@そうだ選挙に行こう
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 とかで見るとか
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
367デフォルトの名無しさん
2014/12/19(金) 23:44:37.90ID:cAPBq6kb
なかなか難しいところだ脳。
やっぱコード書く前にしっかり設計やってからやるべきなのかね。
趣味だけども
368デフォルトの名無しさん
2014/12/19(金) 23:57:59.54ID:wb+cst2b
>>366
正論だから反論はできないよ
無限の時間と労力かけてでもやれと言う主張だから、役に立たないけどな w
369デフォルトの名無しさん
2014/12/20(土) 01:22:27.35ID:+b2U+9C3
このスレの忘年会みたいな軽いノリで、リーダブルじゃない現場コードの晒し合いとか愚痴晒し合いとかしませんか
言語問わずなんでもありで

丁度上司のunreadableコードと戦っててもうね
出所バレない感じに整形したりしてるんですがもうね
370デフォルトの名無しさん
2014/12/20(土) 01:41:00.69ID:acQ5HpBR
再帰関数使いたいけど無名関数じゃ再帰できないようだからしぶしぶprivateメソッド化して細切れになる現象
371デフォルトの名無しさん
2014/12/20(土) 05:18:20.39ID:dWuhsWfV
>>364
ワンストップ・サービス(窓口)のFacadeはどうなる?

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

>>367
Eclipseのリファクタリングの説明を読むといい
372デフォルトの名無しさん
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:F1BtQojg
>>368
> 無限の時間と労力かけてでもやれと言う主張だから、役に立たないけどな w

なんで無限?w
あなたが仕事すると無限の時間がかかるって話?w
376デフォルトの名無しさん
2014/12/20(土) 12:12:29.43ID:cUhMXe+F
>>375
> 無限の時間と労力かけてでも
> 無限の時間と労力かかるけど

区別できないアホは絡んで来るなよ
377デフォルトの名無しさん
2014/12/20(土) 12:16:04.49ID:F1BtQojg
>>371
> ワンストップ・サービス(窓口)の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
380デフォルトの名無しさん
2014/12/20(土) 13:02:04.48ID:lS6KGt9L
>>377
ようは暗黙にBの事前条件がAの事後条件となるのがダメということかね。
>>364の「汎用的」がどういうものを指しているのかいまいち意味がつかめなかったが、
条件を明確にするなら汎用/専用関係なくていいんじゃね?
381デフォルトの名無しさん
2014/12/20(土) 13:09:20.32ID:z0Uvrlhl
>>396
java で何でかんでも定数定義して(カウンタ変数とか!)
フォーマッタでぐちゃぐちゃになったソースは見たことある
382デフォルトの名無しさん
2014/12/20(土) 13:22:29.06ID:cUhMXe+F
だから正論に反論なんてできないよ
「適切なやり方やればいい」
間違ったことは言ってないからな
でも、そんなことは小学生でも言えるわ 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
>>384
そんな時間じゃできません
と言われたらどう答えるんだ?
386デフォルトの名無しさん
2014/12/20(土) 23:25:50.20ID:F1BtQojg
>>385
誰が誰の立場でできませんっていうんだよ?
わけわからんわ。

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

それに技術力を上げれば時間内にできることも多くなるぞ。
何も努力しないでコピペばかりするから技術力も上がらなくなる。
387デフォルトの名無しさん
2014/12/21(日) 00:56:33.95ID:XZ/0moqW
>>385
上司「何言ってるんだ土日があるだろ。ただしそれはお前の能力不足が原因だから残業代は出ないからな。」
388デフォルトの名無しさん
2014/12/21(日) 11:05:47.64ID:ikKWfd9P
>>386
> 誰が誰の立場でできませんっていうんだよ?

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

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

>>387
先月すでに土日も使うことにあなたの指示で計画変更されてますが、お忘れでしょうか? ...
389デフォルトの名無しさん
2014/12/21(日) 13:01:56.36ID:XZ/0moqW
>>388
上司「俺は土日をつかえなんて指示はしていない。そんな計画を承認したはずもない。
ただお前が業務時間内に間に合わないなら土日や深夜や自宅時間も使わざる負えないだろうということだ。そんなこともわからんのか。」
390デフォルトの名無しさん
2014/12/21(日) 14:38:18.36ID:dx70AcKS
>>388
> 指示を受けた人がその指示を実行する責任を負う立場でだよ。

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

「お前このバグ直せる?」って聞かれた時
出来ますって答えるだろ?
391デフォルトの名無しさん
2014/12/21(日) 14:40:57.90ID:dx70AcKS
あ、もしかして俺なら(上級者なら)時間内にできる仕事を
どれだけ時間があっても出来ないって言いたい人なのかな?
俺にはいくら時間があっても仕事できないよって。
392デフォルトの名無しさん
2014/12/21(日) 14:50:49.21ID:dx70AcKS
まあ、ここいらでリーダブルコーディングの話に戻すか。

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

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

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

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

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

あ、だから無限の時間って話になるのかw
393デフォルトの名無しさん
2014/12/21(日) 15:48:14.53ID:wuWkedhz
>>391-392
話の流れも読めてないバカ乙
394デフォルトの名無しさん
2014/12/22(月) 21:28:40.57ID:ndw8Yqnw
流れが読めないのはリーダブルでないのの典型
395デフォルトの名無しさん
2014/12/22(月) 22:36:05.51ID:bXw2G98F
と責任転嫁w
396デフォルトの名無しさん
2014/12/27(土) 23:32:28.76ID:OlYxJx97
自作のソフト、ネタ尽きてきたからコードの簡略化してたら5時間くらいたってた
397デフォルトの名無しさん
2015/10/14(水) 23:40:08.29ID:DmhFYPJM
クリエイティブじゃないやつはリファクタリングして仕事した気になってる勘違いが多い
398デフォルトの名無しさん
2015/10/15(木) 01:26:25.23ID:h4rpxLqO
ぎくっ
399デフォルトの名無しさん
2015/10/15(木) 12:52:24.82ID:fomBTPP1
はい
400デフォルトの名無しさん
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^
401デフォルトの名無しさん
2016/11/11(金) 16:02:24.59ID:dP+cWDA6
>>58
>道具が使えるだけの奴は三流。
>技術・知識も使いこなせて二流。
>人も使いこなせてこそ一流。

医療系の管理者です。
今更ですが金言だと思いました。
その立場にならんとわからないですね。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況



lud20250211162224
このスレへの固定リンク: http://5chb.net/r/tech/1381421181/
ヒント:5chスレのurlに http://xxxx.5chb.net/xxxx のようにbを入れるだけでここでスレ保存、閲覧できます。

TOPへ TOPへ  

このエントリをはてなブックマークに追加現在登録者数177 ブックマークへ


全掲示板一覧 この掲示板へ 人気スレ | Youtube 動画 >50 >100 >200 >300 >500 >1000枚 新着画像

 ↓「リーダブルコーディング技術スレYouTube動画>1本 ->画像>1枚 」を見た人も見ています:
【技術】スプレーでウイルスを90日間寄せ付けない新コーディング技術「MAP-1」が開発される [暇人倶楽部★]
録音・レコーディング総合スレ
三菱「MRJはもうおしまいや……これこらボンバルディア買収するわ」なおボンバルからは技術盗用で訴えられている模様
王のバッティング技術はスゴいか?3
【E-sys】BMWコーディングスレ【PSdZdata】2台目
【IT】IT人材不足はウソ、技術者シェアリングで解決できる
【技術】「自分に合う靴」AIが提案 靴と足の3Dデータをマッチング
最高の国ランキングで日本が2位 世界で最も教養があり技術的にも発達した国
【採掘系】「環境配慮型」フラッキング技術、温暖化防止にも期待 研究
エルデンリング見る限りフロムソフトウェアの方がモノリスより遥かに技術力は上だよな
【サッカー】<杉山茂樹>Jリーグの競技レベルを上げるには?プレッシングvs技術
【資格】検定試験の合格難易度格付けランキング【情報処理技術者/日商簿記/英検/TOEIC】
学会で歓声 プロジェクションマッピングの技術を手術に 三鷹光器・パナソニック・京大病院で開発
ただの動画再生にもグラボ必須の時代到来 ブラウザ映像を4Kアップスケーリングする新技術が強烈
北朝鮮、米ファイザーをハッキング😎💻 ワクチン技術狙い 韓国報道-BBC
Valve、ハイエンドVRをスマホや低スペックPCで動くようにする技術「アイトラッキング」を共通規格化
【IT】日本のIT業界は「文系技術者」の巣窟、早くリスキリングしないと用済みだぞ [田杉山脈★]
【宇宙技術】Virgin Orbitがボーイング747からのLauncherOneロケット空中投下テストに成功[07/12]
スバル【次期フォレスター THSⅡ】トヨタ技術協力のボクサー ストロングハイブリッド搭載の可能性
国家資格の難易度格付けランキングを作ってみたんだけど、これで合ってるかな?ちなみに俺は基本情報技術者(FE)を持ってるよ?
【鳥】ソングバードは親から歌を学んでいた キンカチョウの幼鳥の脳を調査 沖縄科学技術大院大のグループ [oops★]
【ボクシング】京口王者から見た武居由樹選手と江川優生選手のボクシング技術はどうなのか? [砂漠のマスカレード★]
川村文乃のロッククライミングの技術がもはやワロタレベルでは無い件 初挑戦で高さ15メートルの角度可変式の壁を登りきる快挙!
【野党ヒアリング】「悪質なデマ」学術会議元会長、“千人計画への協力”を否定 学術会議と中国科学技術協会の協力覚書の存在は認める  [すらいむ★]
【深海】賞金8億円 海底探査ロボット技術を競う国際コンテストに挑戦 超広域高速海底マッピング/東京大や海洋研究開発機構などのチーム
【音楽】ローリング・ストーンズ、新ドラマー、スティーブ・ジョーダンとのレコーディングを計画中 [湛然★]
伝統派空手の組手技術を語るスレ
トランジスタ技術のスレ 4
特別区技術系スレ(;´Д`)13
au by KDDI 新技術スレ Part173
福島第一原発事故 技術的考察スレ59
電気・電子技術者の、雑談スレ 2
現代技術で作る最強のレシプロ戦闘機を考えるスレ
カメラ・写真撮影技術について語るスレ
技術的な議論や次世代モデルへの展望を語るスレ
競走馬&元競走馬 調教・騎乗技術スレッド
安倍晋三@基本情報技術者試験合格者アンチスレ
【技術系専用】2016年度地方公務員入庁スレ2
【コテ禁】サーブ技術スレ 11th【サービス】
[RPA]PC自動化技術総合スレ[効率化] Part.5
[RPA]PC自動化技術総合スレ[効率化] Part.4
「技術情報」EeePC701 900ユーザースレ 02/21スレ
【技術】Samsung、割れない有機ELディスプレイを開発
令和6年度 第二種電気主任技術者試験に合格した僕を褒めるスレッド
彼女より運転技術が無い俺におまえらがアドバイスをして下さるスレ
【技術】砂糖40%減でも甘さは同じ、ネスレが画期的な新技術を開発
【映画】没後64年のジェームズ・ディーン、最新技術で新作映画に登場か
海外メディア「Halo開発元は内部崩壊状態。職場は有毒でMSの技術は時代遅れ」
【技術】「空中ディスプレー」が脚光 SF映画の世界現実に [すらいむ★]
【スマホ】ディスプレイ上で指紋認証は幻の技術に?Android陣営も顔認証に関心
富士通 「ニュルブルクリンクの安全対策は俺に任せろ AI技術を活用して支援する」
中国が米国の技術を盗んでる? ふざけるな!「事実無根の濡れ衣だ」=中国メディア
「技術を教えてほしい」トウ小平の要請で韓国は日本の技術を中国に伝えた―米メディア
【経済】人手不足はバブル期並みも生産性低迷 「働き方改革」「技術革新」促す 
【技術】NHKとシャープ、丸めて収納できる重量たった100gの30型4K有機ELディスプレイ
【技術】SF映画に出てくるような“空中に操作画面を表示させる”ディスプレイシステム登場(画像あり)
【朝日新聞】コインチェックの27歳創業社長、FBで技術者を募集する投稿を度々掲載していた
トヨタの「オカルトっぽい新技術」にクルマ好き困惑 ボディに“アルミテープ”を貼ると走りが変わる?
【国際】ドイツ政府専用機でトラブル相次ぐ 今度は外相が足止め 「技術大国ドイツの名を汚す」との批判も
Bluetooth+Wi-Fi! クアルコムの無線オーディオ技術「XPAN」の革新性で音楽再生が変わる? [すらいむ★]
嫌儲週末のITエンジニアスレ 仕事の愚痴、転職・独立事情、稼げる技術、新卒へのアドバイス、色々話してこうや
ジャップ「日本の技術は世界一!手先が器用!」ジェット機の製造はおろか小型飛行機の運転さえも出来ないゴミ技術(笑)
【自民】技術売国、タックスヘイブン総合スレ1~東レが韓国サムソンにのべ9000億円【パナマ文書】
韓国現代自動車の技術職559人が研修で日本訪問へ「トヨタの生産ノウハウを学ぶ」―韓国メディア[4/6] [すりみ★]
【F-22】日本への技術供与を検討する米国に韓国メディアが注目 韓国ネット「韓国に技術提供したら数日後には金正恩の机の上に」[08/25]
20:56:55 up 52 days, 21:55, 1 user, load average: 8.52, 8.29, 8.07

in 1.3317680358887 sec @1.3317680358887@0b7 on 060909