リーダブルコードとは
・読みやすさ、理解しやすさを追及したコードのことです
・読みやすいということはメンテナンス性も高いということです。
・理解しやすいコードはコードレビューも楽になります。
・理解しやすいコードはバグも少なくなります。
・短いほうが優れていることが多いですが、必ずしも短いほうがいいとは限りません。
俺ルール
・書き方の勝負であり、言語の勝負をしないでください。
・標準、非標準に限らずライブラリを使いましょう。
・なければ自分で関数を作りましょう。関数はなるべく汎用的に。
こういうコードを読みやすくするにはどうすればいいでしょうか?
というようなことを語るスレ。需要ありますかね?
探検
リーダブルコーディング技術スレ
■ このスレッドは過去ログ倉庫に格納されています
2013/10/11(金) 01:06:21.56
2013/10/11(金) 01:12:14.22
コスト感も癖にテストテスト叫ぶガキはまずリーダブルなコード書けてから言えといいたい
2013/10/11(金) 01:19:10.70
最近、メインのコードから汎用的なコードを関数化していって
汎用的なコードはまあテストするが、
そうするとメインのコードが凄くシンプルになって、
それをテストするって意味あるのか?って思えてきた。
むしろテストしにくいコードをテストしなくて済むように
複雑なものを極力追いだすというか。そんな感じ。
汎用的なコードはまあテストするが、
そうするとメインのコードが凄くシンプルになって、
それをテストするって意味あるのか?って思えてきた。
むしろテストしにくいコードをテストしなくて済むように
複雑なものを極力追いだすというか。そんな感じ。
2013/10/11(金) 01:23:06.16
テストコード自体にもリーダブルさは必要だからなぁ。
リーダブルなコードを書けない人間がテストコードを書いても
ごみの集まりにしかならない。
テストのメンテナンスが大変になるだけ。
リーダブルなコードを書けない人間がテストコードを書いても
ごみの集まりにしかならない。
テストのメンテナンスが大変になるだけ。
2013/10/11(金) 06:39:08.19
6デフォルトの名無しさん
2013/10/11(金) 07:49:34.67 >>2
リーダブルなレス頼む
リーダブルなレス頼む
2013/10/11(金) 09:03:24.36
>>5
荒らしは無視ですね。
荒らしは無視ですね。
2013/10/11(金) 09:06:22.36
テストが面倒だから、テストしやすいコードを書くと簡潔になるな。
同じテストを繰り返したくないから、DRYの原則を守るようになってたり。
同じテストを繰り返したくないから、DRYの原則を守るようになってたり。
2013/10/11(金) 10:02:12.71
>>7
pure Prolog は書き手が書いたことだけが真であって、
読み手との間で誤解の生じる余地がありません。
組込述語(ライブラリ)が無いのですから、個別的であり、
書き手と読み手の間の抽象能力の差から生じる不理解が
生じません。
pure Prolog は書き手が書いたことだけが真であって、
読み手との間で誤解の生じる余地がありません。
組込述語(ライブラリ)が無いのですから、個別的であり、
書き手と読み手の間の抽象能力の差から生じる不理解が
生じません。
2013/10/11(金) 18:11:45.56
このスレッドは天才チンパンジー「アイちゃん」が
言語訓練のために立てたものです。
アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。
京都大学霊長類研究所
言語訓練のために立てたものです。
アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。
京都大学霊長類研究所
2013/10/11(金) 22:46:36.79
>>9
問題はそれがリーダブルかどうかです。
試しにライブラリも関数も使わずにMySQLに接続して
select文を発行するコードを書いてみてくれませんか?
リーダブルコードというのは
実用的でなければなりません。
問題はそれがリーダブルかどうかです。
試しにライブラリも関数も使わずにMySQLに接続して
select文を発行するコードを書いてみてくれませんか?
リーダブルコードというのは
実用的でなければなりません。
2013/10/12(土) 01:48:35.10
例えばPerlでは要素が重複しないリストを返す関数はないわけ。
言語仕様だけで実装すればこんなふうになるけど、
my %count;
@array = grep( !$count{$_}++, @array ) ;
見ての通り明らかに、リーダブルではない。
List::MoreUtilsという有名なライブラリには
これをやってくれる関数がある
@array = uniq @array;
こっちの方が明らかにリーダブル。
実際の開発において、ライブラリを使わずに実装するなんてことは
腐った現場以外ありえない話なので、
リーダブルが目的の現実的な開発ではList::MoreUtilsのuniqを
使うという選択が一番正解なわけだよ。
言語仕様だけで実装すればこんなふうになるけど、
my %count;
@array = grep( !$count{$_}++, @array ) ;
見ての通り明らかに、リーダブルではない。
List::MoreUtilsという有名なライブラリには
これをやってくれる関数がある
@array = uniq @array;
こっちの方が明らかにリーダブル。
実際の開発において、ライブラリを使わずに実装するなんてことは
腐った現場以外ありえない話なので、
リーダブルが目的の現実的な開発ではList::MoreUtilsのuniqを
使うという選択が一番正解なわけだよ。
2013/10/12(土) 06:07:07.54
>>11
pure Prologではなく普通のPrologですが、
http://nojiriko.asia/prolog/fukakusa_no_shoushou_1_1.html
のようなコードを念頭に置いています。
あなたが意識されているのは読みやすさではなく実用性ではありませんか。
さすがにPrologからMySQLへのインターフェイスはないと思いますが、あれば、
mysql :: かやうに(_かやうに),
のように質問することになるのでしょう。
pure Prologではなく普通のPrologですが、
http://nojiriko.asia/prolog/fukakusa_no_shoushou_1_1.html
のようなコードを念頭に置いています。
あなたが意識されているのは読みやすさではなく実用性ではありませんか。
さすがにPrologからMySQLへのインターフェイスはないと思いますが、あれば、
mysql :: かやうに(_かやうに),
のように質問することになるのでしょう。
2013/10/12(土) 12:17:28.70
>>13
だから実用性を考えないリーダブルに意味は無いんだって。
読んだってたかが知れてる量だとリーダブルにする意味は無いだろ。
何百、何千行にもなるような実用レベルのコードを
読みやすく構築するのがリーダブルの目標
実用レベルではMySQLを使うのは当たり前の話で
それをライブラリを使わないで書いてもリーダブルといったのはお前じゃんか。
こちとら何百、何千行もあるコードを数行に収めることを目標にしてるんだ。
だから当然ライブラリを使うし、ライブラリを作る他ないだろ。
リーダブルはあくまで実用性を念頭に置いて考えなさい。
サンプル程度の短いコードの話なんて要らないのよ。
だから実用性を考えないリーダブルに意味は無いんだって。
読んだってたかが知れてる量だとリーダブルにする意味は無いだろ。
何百、何千行にもなるような実用レベルのコードを
読みやすく構築するのがリーダブルの目標
実用レベルではMySQLを使うのは当たり前の話で
それをライブラリを使わないで書いてもリーダブルといったのはお前じゃんか。
こちとら何百、何千行もあるコードを数行に収めることを目標にしてるんだ。
だから当然ライブラリを使うし、ライブラリを作る他ないだろ。
リーダブルはあくまで実用性を念頭に置いて考えなさい。
サンプル程度の短いコードの話なんて要らないのよ。
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 ....」の代わりに「もし .... ならば .... さもなくば ....」が利用できる
横レスする
もしもそのリンク先コードがリーダブルであると主張するならば、
同サイトの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 ....」の代わりに「もし .... ならば .... さもなくば ....」が利用できる
2013/10/12(土) 23:03:49.36
クイックソートのコードがリーダブルかなんてどうでもよくね?
qsort()
これが一番リーダブルだ。
そう難しいロジックは関数に隠蔽してしまう。
qsort()
これが一番リーダブルだ。
そう難しいロジックは関数に隠蔽してしまう。
2013/10/13(日) 00:05:54.29
18デフォルトの名無しさん
2013/10/13(日) 01:12:47.51 なんのプログラムかわからんだろ
頭悪すぎ
頭悪すぎ
2013/10/13(日) 01:29:36.94
まったくだw
もし>>17みたいなのがあったら、それは一つの関数で
何でもやってるリーダブルではないコードになってるだろうな。
リーダブルってのはバランス感覚が重要。
何を関数にして、何を関数にしないか。その見極めが重要。
優れた技術者は関数を汎用的なものにして
一度作ればメンテナンスを不要なレベルにする。
アプリのライフサイクルにおいて、修正が必要な箇所を極力減らす。
それがリーダブルなコードになる。
ソート関数なんてアプリの機能が変わったとしても、
一度作ればメンテナンする必要は殆ど無い。
だから関数にする。これがバランス感覚というもの。
>>17みたいなのは、結局program()の中をメンテナンスする
必要があるわけでなにも解決していない。
もし>>17みたいなのがあったら、それは一つの関数で
何でもやってるリーダブルではないコードになってるだろうな。
リーダブルってのはバランス感覚が重要。
何を関数にして、何を関数にしないか。その見極めが重要。
優れた技術者は関数を汎用的なものにして
一度作ればメンテナンスを不要なレベルにする。
アプリのライフサイクルにおいて、修正が必要な箇所を極力減らす。
それがリーダブルなコードになる。
ソート関数なんてアプリの機能が変わったとしても、
一度作ればメンテナンする必要は殆ど無い。
だから関数にする。これがバランス感覚というもの。
>>17みたいなのは、結局program()の中をメンテナンスする
必要があるわけでなにも解決していない。
20デフォルトの名無しさん
2013/10/13(日) 01:46:35.37 それが真実とすると、整数のソート関数を作った後、文字列のソートをしたくなる。
そんな時、テンプレートが使えると理想的。
結果、C++のような変態言語が実は理想なのか?ってなってしまう。
そんな時、テンプレートが使えると理想的。
結果、C++のような変態言語が実は理想なのか?ってなってしまう。
2013/10/13(日) 01:57:31.48
22デフォルトの名無しさん
2013/10/13(日) 02:00:22.08 void*はリーダブルコードなのか?とか新たな疑問がわいてくる。
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()まであと少しだが、十分リーダブル。
2013/10/13(日) 02:13:43.33
>>24
重要な事なんだがねぇ。
関数の名前、関数の引数。関数の使い方。
これらがリーダブルコードの大きなカギ。
いかにメンテナンスが必要なコードを
シンプルにかつ柔軟にかけるようにするかを
提供するライブラリの構築は極めて重要な作業。
重要な事なんだがねぇ。
関数の名前、関数の引数。関数の使い方。
これらがリーダブルコードの大きなカギ。
いかにメンテナンスが必要なコードを
シンプルにかつ柔軟にかけるようにするかを
提供するライブラリの構築は極めて重要な作業。
27デフォルトの名無しさん
2013/10/13(日) 02:17:20.26 コメントを適切につけましょう。
関数名を適切につけましょう。
当たり前の事をきちんとやりましょう。
以上でスレ終わり。
関数名を適切につけましょう。
当たり前の事をきちんとやりましょう。
以上でスレ終わり。
2013/10/13(日) 02:18:16.83
そういう勘所わかんねえガキがすぐ喚き立てるからな。はてなダイアリーwとかツイッターwでな。滅びろガキ共
2013/10/13(日) 02:18:48.07
2013/10/13(日) 02:18:53.68
まず、コードってのは二種類に分かれる。
アプリの仕様の変化によって
メンテナンスが必要なコードと
そうでないコード。
メンテナンスが必要でないコードの例として
フレームワークやライブラリがある。
アプリってのは何千行、何万行ものコードから
なりたっている。そのうちメンテナンスが必要なコードを
極力減らすのがリーダブルコードの重要な点。
メンテナンスが必要ないコードは汎用的であり一度覚えればよく、
中身を見る必要はないか一度だけ見れば良い。
見る必要がないコードが多ければ、コードレビューも楽になる。
見なくて良いコードを増やして、
見なくてはいけないコードを減らしていくのが
大規模アプリをリーダブルにするコツ。
アプリの仕様の変化によって
メンテナンスが必要なコードと
そうでないコード。
メンテナンスが必要でないコードの例として
フレームワークやライブラリがある。
アプリってのは何千行、何万行ものコードから
なりたっている。そのうちメンテナンスが必要なコードを
極力減らすのがリーダブルコードの重要な点。
メンテナンスが必要ないコードは汎用的であり一度覚えればよく、
中身を見る必要はないか一度だけ見れば良い。
見る必要がないコードが多ければ、コードレビューも楽になる。
見なくて良いコードを増やして、
見なくてはいけないコードを減らしていくのが
大規模アプリをリーダブルにするコツ。
2013/10/13(日) 06:56:46.33
32デフォルトの名無しさん
2013/10/13(日) 06:57:20.07 ピコーン!
関数に分ければ読む必要ないからリーダブル!
program()
関数に分ければ読む必要ないからリーダブル!
program()
33デフォルトの名無しさん
2013/10/13(日) 07:04:09.04 ソートが必要な場合、sort()に切り分ける。
関数名をわかりやすくsortにしておく。
ここ重要。
中身は知る必要なし。
一目で何をやってるかわかるリーダブルの完成。
関数名をわかりやすくsortにしておく。
ここ重要。
中身は知る必要なし。
一目で何をやってるかわかるリーダブルの完成。
2013/10/13(日) 10:56:43.53
引数なし戻り値なしの関数の占める割合を見ればわかる
2013/10/13(日) 12:19:10.65
2013/10/13(日) 20:37:38.01
んなもんただのgotoだからな
2013/10/13(日) 20:43:52.86
>>15
Haskell風コードの方が当然リーダブルのように思うが、違うのか?
Haskell風コードの方が当然リーダブルのように思うが、違うのか?
38デフォルトの名無しさん
2013/10/14(月) 06:27:13.58 >>36
いや、gosubだ
いや、gosubだ
2013/10/14(月) 09:03:38.99
インスタンス変数を直接触る関数は自分で書いてて分かりづらいなって思ったからやめた
2013/10/15(火) 12:33:52.56
思ったよりおもしろい
41デフォルトの名無しさん
2013/10/15(火) 23:12:00.01 関数にすると処理があちこちに飛んで見難くなる。
だから関数を使うな。
というとんでもない意見があるが、
100%間違っているというわけでもない。
それは関数=サブルーチンになっている場合。
コードが長いからという理由だけでその一部分を関数
(という名のサブルーチン)にした所でコードは読みやすくはならない。
なぜなら、関数の中まで読まないと何をやっているかわからないから。
ではなくて、関数というのは中を読まなくてもわかるようにするべき。
標準ライブラリの関数とか通常の開発で中を読むことはまずない。
中を読まなくていいということは、その分読む量が減るということ。
サブルーチンにした場合、その中を読まなくていいということはまずないので、
結局、あちこちに飛んで見難くなるだけ。
正しい関数の作り方を知らないからこうなる。
だから関数を使うな。
というとんでもない意見があるが、
100%間違っているというわけでもない。
それは関数=サブルーチンになっている場合。
コードが長いからという理由だけでその一部分を関数
(という名のサブルーチン)にした所でコードは読みやすくはならない。
なぜなら、関数の中まで読まないと何をやっているかわからないから。
ではなくて、関数というのは中を読まなくてもわかるようにするべき。
標準ライブラリの関数とか通常の開発で中を読むことはまずない。
中を読まなくていいということは、その分読む量が減るということ。
サブルーチンにした場合、その中を読まなくていいということはまずないので、
結局、あちこちに飛んで見難くなるだけ。
正しい関数の作り方を知らないからこうなる。
2013/10/15(火) 23:52:26.09
1箇所からしか呼ばれないものは関数化しない、という方針は、そんなに間違ってもいないが、
絶対でもないぞ。
極端な話、初見では少々読みづらいコードになったとしても、上位レイヤと下位レイヤに
分けて実装しないと、あとあと全体の構造がメンテ不能になったりすることもある。
絶対でもないぞ。
極端な話、初見では少々読みづらいコードになったとしても、上位レイヤと下位レイヤに
分けて実装しないと、あとあと全体の構造がメンテ不能になったりすることもある。
43デフォルトの名無しさん
2013/10/16(水) 00:03:18.00 >>42
レイヤ分けも「中を読まなくていいようにする」行為の一つだよ。
正しいレイヤ分けをしていれば、引数と戻り値のみがわかっていれば
そのレイヤで何を行うのかわかってるので、中のコードを読む必要がなくなる。
関数にするときは、中を読まなくていいように
なっているかどうかを意識しよう。
中を読まないといけない状態では
リーダブルにはならないことが多い。
レイヤ分けも「中を読まなくていいようにする」行為の一つだよ。
正しいレイヤ分けをしていれば、引数と戻り値のみがわかっていれば
そのレイヤで何を行うのかわかってるので、中のコードを読む必要がなくなる。
関数にするときは、中を読まなくていいように
なっているかどうかを意識しよう。
中を読まないといけない状態では
リーダブルにはならないことが多い。
2013/10/16(水) 00:06:21.74
標準ライブラリ関数のソースは読まないけど、ドキュメントは読まないと使えないよね
>>41のいう"正しい関数の作り方"をすれば、それすらも必要ないの?
それとも、コメント書いとけっていうことを、わざわざ長文にして書いたの?
>>41のいう"正しい関数の作り方"をすれば、それすらも必要ないの?
それとも、コメント書いとけっていうことを、わざわざ長文にして書いたの?
45デフォルトの名無しさん
2013/10/16(水) 00:14:56.17 >>44
ドキュメント≒コメントな。
同じようにコメントがあったとしても、
コードを毎回のように読まなくてはいけないものと
コードを(初回レビュー以外)読まなくても大丈夫なもの
二通り有るだろ?
コードを読まなくても大丈夫なものは、
標準ライブラリの関数などのように、
それ自体の役目が小さくサブルーチン(処理のまとまり)ではなく
しっかりと関数になっているもの。
サブルーチン(処理のまとまり)なんかだとコメントが有ったとしても
結局コードを読まないと、具体的なことは何もわからない。
どんな時だって、コメントがあれば問題解決するわけじゃないんだよ。
関数の中を毎度毎度読んでるようなら、
それは関数ではなくサブルーチンになっているということさ。
そういうのを減らせと言ってる。
ドキュメント≒コメントな。
同じようにコメントがあったとしても、
コードを毎回のように読まなくてはいけないものと
コードを(初回レビュー以外)読まなくても大丈夫なもの
二通り有るだろ?
コードを読まなくても大丈夫なものは、
標準ライブラリの関数などのように、
それ自体の役目が小さくサブルーチン(処理のまとまり)ではなく
しっかりと関数になっているもの。
サブルーチン(処理のまとまり)なんかだとコメントが有ったとしても
結局コードを読まないと、具体的なことは何もわからない。
どんな時だって、コメントがあれば問題解決するわけじゃないんだよ。
関数の中を毎度毎度読んでるようなら、
それは関数ではなくサブルーチンになっているということさ。
そういうのを減らせと言ってる。
2013/10/16(水) 00:31:54.47
47デフォルトの名無しさん
2013/10/16(水) 00:42:34.63 >>46
読まないといけないコードを減らして
読まなくても良いコードに置き換えろということ。
読まなくても良いコードの割合が増えれば
それだけコードレビューの時間も減る。
コメントでカバーとかそういう発想をそもそもしていない。
コメントがなくてもコードでわかるのであれば、コメントすら不要。
コメントを書きたくなる時点で、コードがリーダブルでないという証拠でしかない。
読まないといけないコードを減らして
読まなくても良いコードに置き換えろということ。
読まなくても良いコードの割合が増えれば
それだけコードレビューの時間も減る。
コメントでカバーとかそういう発想をそもそもしていない。
コメントがなくてもコードでわかるのであれば、コメントすら不要。
コメントを書きたくなる時点で、コードがリーダブルでないという証拠でしかない。
48デフォルトの名無しさん
2013/10/16(水) 01:35:36.55 つまりは なでしこで書かれたプログラムが
一番リーダブルなんじゃね?
一番リーダブルなんじゃね?
2013/10/16(水) 01:40:12.87
噛み合ってないスレ
2013/10/16(水) 02:44:30.45
関数名と言うのは、巧いコードだと処理の概要を物語るコメントとしても機能する。
例えば void BubbleSort( int *p, int n ) という関数が何をするのかは容易に推測できる。
(ただしこんな名前でクィックソートしてるなら糞コードだが。)
一方、下手なコードだと関数名は単なる識別子としてしか機能しない。
内部で何をやっているかは関数内のコードやコメント、ドキュメントを追う必要がある。
例えば void HogeMoge() という関数が何をするのかは中身を見なければまず分からない。
と書いてみる。
例えば void BubbleSort( int *p, int n ) という関数が何をするのかは容易に推測できる。
(ただしこんな名前でクィックソートしてるなら糞コードだが。)
一方、下手なコードだと関数名は単なる識別子としてしか機能しない。
内部で何をやっているかは関数内のコードやコメント、ドキュメントを追う必要がある。
例えば void HogeMoge() という関数が何をするのかは中身を見なければまず分からない。
と書いてみる。
51デフォルトの名無しさん
2013/10/16(水) 06:06:16.25 他人のコードを読む難しさは、”作者が暗黙にイメージしてる図”を推論することの難しさにある。
f(x+d) - f(x) / d
作者自身は「これは微分するためだ」という暗黙のイメージがあるので簡単に理解できる。
一方、他人はコードのみから「これは微分が目的か?」と推論する必要がある。
コードを推論だけで読むには、作者と同等かそれ以上のコードを書けるだけの基礎が必要となる。
これら推論を補助するには、ホワイトボードによる図説が有効である。
イメージ図が有ると無いとではコード理解の難易度が大幅に変わる。
f(x+d) - f(x) / d
作者自身は「これは微分するためだ」という暗黙のイメージがあるので簡単に理解できる。
一方、他人はコードのみから「これは微分が目的か?」と推論する必要がある。
コードを推論だけで読むには、作者と同等かそれ以上のコードを書けるだけの基礎が必要となる。
これら推論を補助するには、ホワイトボードによる図説が有効である。
イメージ図が有ると無いとではコード理解の難易度が大幅に変わる。
2013/10/16(水) 06:55:59.31
5352
2013/10/16(水) 07:00:14.97 ・・・
問題は、アルゴリズムと呼ばれているものの中には、
このような概念化、言語化できない(し難い)ものが
あり、この場合は関数名では解決できない。・・ですね。
問題は、アルゴリズムと呼ばれているものの中には、
このような概念化、言語化できない(し難い)ものが
あり、この場合は関数名では解決できない。・・ですね。
2013/10/16(水) 07:02:42.74
「微分ってなに?」って奴に対してリーダブルにするにはどうすればいいかってことが問題になるな
55デフォルトの名無しさん
2013/10/16(水) 07:17:57.80 ある位置の傾き
2013/10/16(水) 08:07:51.68
>>54
それはそれで「こういう処理を微分と呼びます」でいいんじゃないの
例え新たな用語であろうと、それに対しての厳密かつ具体的な処理が示されて「こういう処理をそう呼ぶんだな」と思えないなら
プログラマとしては、数学以外の分野でもかなり困ることになるぞ
それはそれで「こういう処理を微分と呼びます」でいいんじゃないの
例え新たな用語であろうと、それに対しての厳密かつ具体的な処理が示されて「こういう処理をそう呼ぶんだな」と思えないなら
プログラマとしては、数学以外の分野でもかなり困ることになるぞ
2013/10/16(水) 22:34:46.64
>>54
それは勉強すればいいことなので微分のままでいいよ。
リーダブルというのは知識不足を補うためにあるんじゃない。
会社特有の知識とか、会社やめたら無駄になるようなものは
覚える必要はまずないから、それに関するドキュメントが必要。
でも世間一般の知識は、勉強しろの一言で終わり。
それが技術力ってものだからね。
技術者である以上、自分には技術がないのでわかりません。は恥だと思え。
俺にはわからんから高度な書き方をするな。みたいなことを言ってる奴は
技術力ねぇんだなと思えばいい。自分より技術の低いやつに合わせる必要ない。
足を引っ張ってる奴が悪い。
それは勉強すればいいことなので微分のままでいいよ。
リーダブルというのは知識不足を補うためにあるんじゃない。
会社特有の知識とか、会社やめたら無駄になるようなものは
覚える必要はまずないから、それに関するドキュメントが必要。
でも世間一般の知識は、勉強しろの一言で終わり。
それが技術力ってものだからね。
技術者である以上、自分には技術がないのでわかりません。は恥だと思え。
俺にはわからんから高度な書き方をするな。みたいなことを言ってる奴は
技術力ねぇんだなと思えばいい。自分より技術の低いやつに合わせる必要ない。
足を引っ張ってる奴が悪い。
2013/10/17(木) 00:18:54.98
道具が使えるだけの奴は三流。
技術・知識も使いこなせて二流。
人も使いこなせてこそ一流。
技術・知識も使いこなせて二流。
人も使いこなせてこそ一流。
2013/10/17(木) 00:39:04.12
ここまでオライリーの「リーダブルコード」への言及なし。
この本のいいとこ悪いとこの話題とか、
もっと深い議論があるスレを期待した俺がバカ。
この本のいいとこ悪いとこの話題とか、
もっと深い議論があるスレを期待した俺がバカ。
2013/10/17(木) 00:42:53.68
2013/10/17(木) 08:09:07.43
2013/10/18(金) 01:17:22.17
2013/10/18(金) 07:22:05.29
>>62
人事権があるならやってる。
人事権があるならやってる。
2013/10/19(土) 10:53:36.95
じゃあ、それは人事権がないのが問題ということで。
2013/10/21(月) 18:36:53.86
リーダブル関係ねえ
66デフォルトの名無しさん
2013/10/21(月) 22:02:52.00 そうそう、リーダブルというのは
プロがプロのために読みやすいコードとはという話であって、
馬鹿でもわかるコードのことではない。
関数さえ理解できない馬鹿がいるんだしな。
だからそいうヤツのことを考えるのは
リーダブルとは無関係。
”リーダブルではないが”馬鹿用に仕方なく書いている。
という状態になるだけ。
プロがプロのために読みやすいコードとはという話であって、
馬鹿でもわかるコードのことではない。
関数さえ理解できない馬鹿がいるんだしな。
だからそいうヤツのことを考えるのは
リーダブルとは無関係。
”リーダブルではないが”馬鹿用に仕方なく書いている。
という状態になるだけ。
2013/10/21(月) 23:11:47.66
馬鹿なんて言葉が出てくる時点でどうかと思うけどね。
2013/10/21(月) 23:13:25.52
馬鹿は切って捨てろというのは同意したいところだが、あまり理想が高すぎると誰もついて来なくなる。
そもそも原著からして「シンプルで実践的」を掲げてるわけで。
そもそも原著からして「シンプルで実践的」を掲げてるわけで。
2013/10/21(月) 23:25:30.25
7068
2013/10/21(月) 23:27:32.33 思うにコードを読むのにごく一部の天才しか知らない・理解できないような知識を要したり、
ごく一部の馬鹿の為に特別なルールが設けられているなどの背景についての理解を要するのは
どちらもリーダブルではない罠。
一般的なPGの大多数が、予備知識を一切持たずにすんなり読めるコードこそリーダブルと言うべきではなかろうか。
ごく一部の馬鹿の為に特別なルールが設けられているなどの背景についての理解を要するのは
どちらもリーダブルではない罠。
一般的なPGの大多数が、予備知識を一切持たずにすんなり読めるコードこそリーダブルと言うべきではなかろうか。
71デフォルトの名無しさん
2013/10/22(火) 00:26:07.90 > 思うにコードを読むのにごく一部の天才しか知らない・理解できないような知識を要したり
なんでそんなのを使うと思うんだ?
プログラミング言語が備えている機能を
普通に使ってるだけだぞ?
えとさ、例えばプロの技術者が、自分の使っている道具を
使いこなせてないとしたらどう思うよ?
なんでそんなのを使うと思うんだ?
プログラミング言語が備えている機能を
普通に使ってるだけだぞ?
えとさ、例えばプロの技術者が、自分の使っている道具を
使いこなせてないとしたらどう思うよ?
72デフォルトの名無しさん
2013/10/22(火) 00:27:18.97 > 予備知識を一切持たずにすんなり読めるコード
そんなものはない。
技術職なんだから技術がない人間が
読めるわけ無いだろ。
反対に言えば、技術職なんだから
素人が出来ないことをできるようになれよ。
そんなものはない。
技術職なんだから技術がない人間が
読めるわけ無いだろ。
反対に言えば、技術職なんだから
素人が出来ないことをできるようになれよ。
2013/10/22(火) 00:35:47.94
「PGの大多数が」を省いて我田引水おいしいです
74デフォルトの名無しさん
2013/10/22(火) 00:42:08.45 お前が言うPGの大多数って馬鹿のことだろう?
具体的に言えば、入社一年未満レベル。
違うのか?
本物のプログラマが普通に読めるレベルなら
プログラミング言語の機能はどれを使っても
読めるはずだが。
具体的に言えば、入社一年未満レベル。
違うのか?
本物のプログラマが普通に読めるレベルなら
プログラミング言語の機能はどれを使っても
読めるはずだが。
2013/10/22(火) 00:50:13.69
>71-72
最後に「一般的なPGの大多数が」と書いてるのに、何故そんな解釈するのさ。
言語が備えている機能を普通に使っているコードが読めないレベルが一般的で大多数だとでも?
だとしたら他を見下しすぎ。
あと「予備知識を持たずに」とは書いたけど、「勉強せずに」とは書いてないからね?
例えば余程難解な代物でも無い限り(この条件を見落とさな用に!)、コメントに「〜参照」とでも書いておくだけでも
予備知識を持たずに読めるコードになるでしょ。
最後に「一般的なPGの大多数が」と書いてるのに、何故そんな解釈するのさ。
言語が備えている機能を普通に使っているコードが読めないレベルが一般的で大多数だとでも?
だとしたら他を見下しすぎ。
あと「予備知識を持たずに」とは書いたけど、「勉強せずに」とは書いてないからね?
例えば余程難解な代物でも無い限り(この条件を見落とさな用に!)、コメントに「〜参照」とでも書いておくだけでも
予備知識を持たずに読めるコードになるでしょ。
2013/10/22(火) 00:54:16.90
>74
>本物のプログラマが普通に読めるレベルなら
>プログラミング言語の機能はどれを使っても
>読めるはずだが。
アセンブラでフルスクラッチできるレベルなんでしょうなぁ。
トグルスィッチでミスせず入力しきった真のPGも居ますが。
>本物のプログラマが普通に読めるレベルなら
>プログラミング言語の機能はどれを使っても
>読めるはずだが。
アセンブラでフルスクラッチできるレベルなんでしょうなぁ。
トグルスィッチでミスせず入力しきった真のPGも居ますが。
77デフォルトの名無しさん
2013/10/22(火) 00:54:37.35 一般的なPGの大多数がどの程度のものを指しているのかしらないけど、
例えば、プロジェクトがオープンソースプロジェクトで
多くの人が参加しているとしよう。
その予備知識を一切持たずにすんなり読めるコードに
書き換えましょうと提案して通るレベルならいいよ。
まあ少数の初心者のために書きなおすことはないだろうね。
例えば、プロジェクトがオープンソースプロジェクトで
多くの人が参加しているとしよう。
その予備知識を一切持たずにすんなり読めるコードに
書き換えましょうと提案して通るレベルならいいよ。
まあ少数の初心者のために書きなおすことはないだろうね。
2013/10/22(火) 00:56:14.61
2013/10/22(火) 00:58:27.98
ユニバーサルデザインの考え方だな。
より一般的な、説明が不要な方法で実装したほうが、
結局はみんなが幸せよ。
例えば売掛買掛とかいう概念にしがみついてんのは、
自分の立場を守ろうとする老害よ。
専門性に逃げ込むような輩は先細っていくよ。
より一般的な、説明が不要な方法で実装したほうが、
結局はみんなが幸せよ。
例えば売掛買掛とかいう概念にしがみついてんのは、
自分の立場を守ろうとする老害よ。
専門性に逃げ込むような輩は先細っていくよ。
80デフォルトの名無しさん
2013/10/22(火) 01:01:20.34 おいおい、みんな結局同じことを言ってるぞ。
リーダブルコードというのは、
初心者プログラマでも読めるレベルで書くことじゃない。
プロがプロとして読みやすいコードを書くということだ。
言語の機能には時として使わないほうがいいとされる機能もあるが、
そういうものないのなら、すべて使って良い機能だ。
言語の機能を知らないのは、初心者が頑張って技術をつけろという話であって
初心者のレベルに下げようということではない。
だろ?
リーダブルコードというのは、
初心者プログラマでも読めるレベルで書くことじゃない。
プロがプロとして読みやすいコードを書くということだ。
言語の機能には時として使わないほうがいいとされる機能もあるが、
そういうものないのなら、すべて使って良い機能だ。
言語の機能を知らないのは、初心者が頑張って技術をつけろという話であって
初心者のレベルに下げようということではない。
だろ?
81デフォルトの名無しさん
2013/10/22(火) 01:02:49.59 >>79
> より一般的な、説明が不要な方法で実装したほうが、
より一般的な、説明が不要な方法ってなんだよ?
俺らは技術者だぜ。
技術的な方法で実装するのは問題ない。
わからないのは技術が低いからなだけだろう?
> より一般的な、説明が不要な方法で実装したほうが、
より一般的な、説明が不要な方法ってなんだよ?
俺らは技術者だぜ。
技術的な方法で実装するのは問題ない。
わからないのは技術が低いからなだけだろう?
2013/10/22(火) 01:04:44.66
そもそも「初心者」っていう言葉を使ってるの一人だけっぽいが…。
我田引水っ子が混じってる気がするから気持ちよく話に参加できない。
我田引水っ子が混じってる気がするから気持ちよく話に参加できない。
83デフォルトの名無しさん
2013/10/22(火) 01:05:25.45 どんな技術でも使うことに正当な理由があれば使うし、
使うべきでは無いという正当な理由があれば使わないよ。
ただ「周りがわからないから使わない」は
正当な理由にはなりえないな。妥協した理由だ。
使うべきでは無いという正当な理由があれば使わないよ。
ただ「周りがわからないから使わない」は
正当な理由にはなりえないな。妥協した理由だ。
84デフォルトの名無しさん
2013/10/22(火) 01:08:07.19 >>83
なるほど。正当な理由と
妥協した理由ね。
つまりはリーダブルコードの話をする時
正当な理由のみで語るべきということ。
そこに妥協した理由を持ってきてはいけない。
妥協したいならお前の周りだけ妥協すればいいだけじゃん。
技術のなさを恥じながら妥協しておけよ。
なるほど。正当な理由と
妥協した理由ね。
つまりはリーダブルコードの話をする時
正当な理由のみで語るべきということ。
そこに妥協した理由を持ってきてはいけない。
妥協したいならお前の周りだけ妥協すればいいだけじゃん。
技術のなさを恥じながら妥協しておけよ。
2013/10/22(火) 01:09:50.20
>79
>より一般的な、説明が不要な方法で実装したほうが、結局はみんなが幸せよ。
この「説明が不要」と言うのはうまい表現かもね。
専門知識・用語を駆使して「説明を省く」のとはちょっと違う。
>より一般的な、説明が不要な方法で実装したほうが、結局はみんなが幸せよ。
この「説明が不要」と言うのはうまい表現かもね。
専門知識・用語を駆使して「説明を省く」のとはちょっと違う。
86デフォルトの名無しさん
2013/10/22(火) 01:14:31.112013/10/22(火) 01:16:15.84
88デフォルトの名無しさん
2013/10/22(火) 01:17:05.092013/10/22(火) 01:17:50.73
>>88
頑張って、技術をつけてくださいね;)
頑張って、技術をつけてくださいね;)
90デフォルトの名無しさん
2013/10/22(火) 01:18:19.5491デフォルトの名無しさん
2013/10/22(火) 01:18:59.89 説明を求められて説明できない人って
何のために意見を言ったんだろうかね。
何のために意見を言ったんだろうかね。
2013/10/22(火) 01:25:54.50
>86
>専門知識・用語を使えば簡単なのに、使わないほうがいい例
例えばC++ではないC言語で、「オブジェクト」という単語が出てきたとしよう。
本当にCをよく理解しているならそれが何を意味してるのか分かると思うが、
なまじC++等を知ってるプログラマを混乱させる元になる。
>専門知識・用語を使えば簡単なのに、使わないほうがいい例
例えばC++ではないC言語で、「オブジェクト」という単語が出てきたとしよう。
本当にCをよく理解しているならそれが何を意味してるのか分かると思うが、
なまじC++等を知ってるプログラマを混乱させる元になる。
93デフォルトの名無しさん
2013/10/22(火) 02:12:00.61 > 例えばC++ではないC言語で、「オブジェクト」という単語が出てきたとしよう。
その場合それは専門用語ではない。
誰かが勝手に作った用語だろう?
そういう人こそちゃんと勉強して
正しい専門用語を使えと思うんだが?
その場合それは専門用語ではない。
誰かが勝手に作った用語だろう?
そういう人こそちゃんと勉強して
正しい専門用語を使えと思うんだが?
2013/10/22(火) 02:20:08.94
>>63-65
合ってるだろ、leaderぶる話で
合ってるだろ、leaderぶる話で
2013/10/22(火) 02:32:27.96
ぐんもー☆ぞうをなでなで
96デフォルトの名無しさん
2013/10/22(火) 06:28:57.24 >>88 みんなエスパーだよ?
2013/10/22(火) 07:37:14.92
関数型言語であるような、mapとかfilterとかは、
知らないと読めない典型だけど、いったん知ってしまえば
とても便利だよね
これがリーダブルなのかそうでないのかは
読み手によるとしか答えようがないなあ
知らないと読めない典型だけど、いったん知ってしまえば
とても便利だよね
これがリーダブルなのかそうでないのかは
読み手によるとしか答えようがないなあ
2013/10/22(火) 08:40:05.16
技術の高さに頼らなくても読めないと駄目だろ
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はものすごく勉強しないと理解できない物?
違うよね。
ちょっと知ればいい程度のものなら、勉強すれば終わりでしょ?
そんなものまで、知らないから読めないという人のために
使うかどうか迷うの?
ほんの数分の勉強で、これから先ずっと快適になるんだよ。
比べるまでもないことだよね。
mapやfilterはものすごく勉強しないと理解できない物?
違うよね。
ちょっと知ればいい程度のものなら、勉強すれば終わりでしょ?
そんなものまで、知らないから読めないという人のために
使うかどうか迷うの?
ほんの数分の勉強で、これから先ずっと快適になるんだよ。
比べるまでもないことだよね。
102デフォルトの名無しさん
2013/10/22(火) 22:57:17.67 >93
>その場合それは専門用語ではない。
>誰かが勝手に作った用語だろう?
手元にあるK&R第2版日本語訳にはこう書いてある。
【付録A(ANSI規格)】
A5 オブジェクトと左辺値
オブジェクトは名前付きのメモリ領域であり、左辺値(lvalue)はオブジェクトを参照する式である。
>その場合それは専門用語ではない。
>誰かが勝手に作った用語だろう?
手元にあるK&R第2版日本語訳にはこう書いてある。
【付録A(ANSI規格)】
A5 オブジェクトと左辺値
オブジェクトは名前付きのメモリ領域であり、左辺値(lvalue)はオブジェクトを参照する式である。
103デフォルトの名無しさん
2013/10/22(火) 23:00:30.37104デフォルトの名無しさん
2013/10/22(火) 23:07:12.47 K&Rは、もはや参考書でしかないよ。
まずは規格票を読まなきゃ。
まずは規格票を読まなきゃ。
105デフォルトの名無しさん
2013/10/22(火) 23:09:51.44 >104
「付録A」はその規格について述べてる訳ですが?
「付録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でも通用する記述だと分かるだろ
まともなプログラマなら>102の内容はc99でも通用する記述だと分かるだろ
109デフォルトの名無しさん
2013/10/23(水) 00:04:30.54 そもそもコードは「キーワードと文法しか知らない」コンパイラに分かるように頭から読んでいけば分かるように書いてある訳で、
どんな糞コードであっても、コンパイルが通るなら言語規格を熟知してる奴には読めるはずである。
すなわち「規格を熟知している奴に読めれば良い」という条件では糞コードを除外できない。
どんな糞コードであっても、コンパイルが通るなら言語規格を熟知してる奴には読めるはずである。
すなわち「規格を熟知している奴に読めれば良い」という条件では糞コードを除外できない。
110デフォルトの名無しさん
2013/10/23(水) 09:14:14.51 >>103
K&Rが勝手に作った用語。
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っていうメンバ変数はないとして
例えば,なんかのファイルのパスを返すような関数があったとして,
getHogePath()とかいう関数名はあり?
もちろんhogeっていうメンバ変数はないとして
116デフォルトの名無しさん
2013/10/23(水) 22:31:00.52117デフォルトの名無しさん
2013/10/23(水) 22:34:24.51 動的型付け言語の場合。
クラスがHogeであっても、getHogeってした方がいいよ。
なぜなら、getだけじゃ何からのgetか分からないから。
近くでnewしていれば簡単だが、関数の外から
渡されてきたらあちこちのコードを読まないとわからない。
しかも一つ見つけたら、それで正しいとは限らない。
もしかしたら見つけたのとは別のクラスも渡しているかもしれない。
クラスがHogeであっても、getHogeってした方がいいよ。
なぜなら、getだけじゃ何からのgetか分からないから。
近くでnewしていれば簡単だが、関数の外から
渡されてきたらあちこちのコードを読まないとわからない。
しかも一つ見つけたら、それで正しいとは限らない。
もしかしたら見つけたのとは別のクラスも渡しているかもしれない。
118デフォルトの名無しさん
2013/10/23(水) 22:52:48.88 ISO/IEC 9899:201x Programming languages - C
ttp://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
ttp://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でいいのでは?
内部処理がどうなっているか不明なのだから
軽いかどうかなんてわかり用がないし
変わることだってだろう?
そこに何かの想定をしてはいけないだけの話。
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なら」と読めなくなる。
仮にこれを「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って言っていいイメージでいます。
定数オーダーの処理ならget,setって言っていいイメージでいます。
126デフォルトの名無しさん
2013/10/23(水) 23:31:43.97 話が逸れるけど関数名だけに拘るのではなく、戻り値や引数の型その他を含むシグネチャ全体に気を使った方が良いかと。
特にC/C++なんかだとconstの有無はネーミングと同じ位気を使って欲しい。
うまく使えば読みやすくなるし。
特にC/C++なんかだとconstの有無はネーミングと同じ位気を使って欲しい。
うまく使えば読みやすくなるし。
127デフォルトの名無しさん
2013/10/23(水) 23:31:45.03 そのHogePathの出どころによるよね
DBから探してくるならfindHogePathとかsearchForHogePath
コンポーネントをいくつか組み合わせて作るならcomposeHogePath
どこかに設定してあるのをちゃちゃっと取ってくるだけならgetHogePath
処理の中身がわかる名前がいいと思うよ
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がたまたまそう読めるからといって、だからなに?
他は違う読み方をすればいいだけじゃない。
ってことだな。
> 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なんだが(;^ω^)
RubyではFoo.newなんだが(;^ω^)
130デフォルトの名無しさん
2013/10/24(木) 03:46:48.68131デフォルトの名無しさん
2013/10/24(木) 07:03:23.93132デフォルトの名無しさん
2013/10/24(木) 09:16:09.11 Foo.new と new Foo の違いは、前者がメタオブジェクト(Classのインスタンス)の
インスタンスメソッドの呼び出しであるのに対し、後者がnewという前置演算子による
演算子式である、という意味の違いが構文の違いになっているに過ぎず、
リーダビリティとは全く何の関係もない。
それを「一文字でも短くタイプするとかいう変な宗教」とか考える奴の脳味噌が変。
インスタンスメソッドの呼び出しであるのに対し、後者がnewという前置演算子による
演算子式である、という意味の違いが構文の違いになっているに過ぎず、
リーダビリティとは全く何の関係もない。
それを「一文字でも短くタイプするとかいう変な宗教」とか考える奴の脳味噌が変。
133デフォルトの名無しさん
2013/10/24(木) 09:45:45.73 言いたい事をほぼ>>132が言ってくれたから話が早いw
134デフォルトの名無しさん
2013/10/24(木) 10:17:04.85135デフォルトの名無しさん
2013/10/24(木) 10:18:18.30 >>134
俺 Python スレとシャワートイレ板で有名コテやってるかあんまり怒らせないほうがいいよ
俺 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 だけでいけるよ。
Perlは Foo だけでいけるよ。
139デフォルトの名無しさん
2013/10/24(木) 21:33:14.24140デフォルトの名無しさん
2013/10/24(木) 21:41:37.23141デフォルトの名無しさん
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 であれば迷うこと無くコンストラクタであると判断できる
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()という関数は読みづらいか?
なんで? 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最高!!
OCaml最高!!
157デフォルトの名無しさん
2013/10/24(木) 23:37:35.84 Objective Caml ........
158デフォルトの名無しさん
2013/10/24(木) 23:38:57.24 第一級のモジュールができて
完全にオワコンになったOCamlのO
完全にオワコンになった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派だ
俺は!を見逃すという凡ミスでハマったゴミクソ野郎なので
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
こうなって、この一群が同一の目的を持ってることがスグには分からない。
条件の文字を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っていうのは何のことですか?
すみません。このnextっていうのは何のことですか?
170デフォルトの名無しさん
2013/10/25(金) 11:45:26.35 >>163
そう言うやつはそのうち unless !flag と書いてはまるので、俺は unless いらない派
そう言うやつはそのうち unless !flag と書いてはまるので、俺は unless いらない派
171デフォルトの名無しさん
2013/10/25(金) 11:49:51.98172デフォルトの名無しさん
2013/10/25(金) 11:56:20.11 >>168
同じ目的ならor条件にしろ
同じ目的ならor条件にしろ
173デフォルトの名無しさん
2013/10/25(金) 12:31:03.71 一人だけ周回遅れな発言してるなぁ…
174デフォルトの名無しさん
2013/10/25(金) 20:13:24.30 条件によりオプショナルなら前置
null対策などで仕方なく条件を付けるのなら後置
みたいに書いたりしないか
null対策などで仕方なく条件を付けるのなら後置
みたいに書いたりしないか
175デフォルトの名無しさん
2013/10/25(金) 23:00:46.24 >>168
こうすりゃいいやん
if (xxxxxx) next
if (xxxxxxxxxxxx) next
if (xxx) next
こうすりゃいいやん
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;}
下のほうが見やすい気がするけど,同僚からは不評
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;}
こんな感じか?
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では見やすいんだが
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はそこまで変ではないのでは?
>>182はそこまで変ではないのでは?
191デフォルトの名無しさん
2013/12/06(金) 01:25:03.50 見た目云々より、エディタの矩形選択とかを活かせるメリットの方が大きい気が。
192デフォルトの名無しさん
2013/12/29(日) 23:04:49.03 クラスの中のある関数をつかうために
あらかじめいくつかの要素をsetしておかないといけないという設計はよくない?
setしないで関数を呼び出したときには例外を出す感じ
コンストラクタにいれてしまったほうがいいんだろうか?
あらかじめいくつかの要素をsetしておかないといけないという設計はよくない?
setしないで関数を呼び出したときには例外を出す感じ
コンストラクタにいれてしまったほうがいいんだろうか?
193デフォルトの名無しさん
2013/12/29(日) 23:06:02.09194デフォルトの名無しさん
2013/12/29(日) 23:59:47.76195デフォルトの名無しさん
2013/12/30(月) 00:03:01.47196デフォルトの名無しさん
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で囲まないといけなくない?
____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()
にしろってこと?
try{
____a = A()
}
a.do_something()
にしろってこと?
198デフォルトの名無しさん
2013/12/30(月) 01:20:49.83199デフォルトの名無しさん
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; }
}
これだったら、値を解析して正しい値だったらクラスを生成して返し、
不正だったら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.73201デフォルトの名無しさん
2013/12/30(月) 11:04:11.99 デザパタの目的はいくつかあるだろうが、
その中で「カタログ化」だの「パターンに名前をつけて共有」だの、
さもそれこそがおいしいという論調には疑問だね。
>>199を見ろよ。何がFactoryMethodパターンだ。
ただのファクトリメソッドじゃねーか。
「インスタンス化をサブクラスに任せる」っていう点を押さえて理解できてない。
その中で「カタログ化」だの「パターンに名前をつけて共有」だの、
さもそれこそがおいしいという論調には疑問だね。
>>199を見ろよ。何がFactoryMethodパターンだ。
ただのファクトリメソッドじゃねーか。
「インスタンス化をサブクラスに任せる」っていう点を押さえて理解できてない。
202デフォルトの名無しさん
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
やっぱセクロスするならアイドルっしょ 超有名アイドルグループ所属の美少女が衝撃のAVデビュー
アイドルは裏切らないっ!!
https://www.youtube.com/watch?v=XmP1TRsAe88
204デフォルトの名無しさん
2014/11/15(土) 06:53:16.50ID:6Z/ZPh8x205デフォルトの名無しさん
2014/11/15(土) 14:58:16.01ID:/lNofN3M206デフォルトの名無しさん
2014/11/15(土) 16:17:34.44ID:lm0Ap3/W 変更コストよりも
変更したい箇所以外に、並列されてるだけで関係ない行まで修正が発生するのは気持ち悪いと感じる
1行の修正のはずなのにdiffとると何行も出たり まあオプションで消せるけど
変更したい箇所以外に、並列されてるだけで関係ない行まで修正が発生するのは気持ち悪いと感じる
1行の修正のはずなのにdiffとると何行も出たり まあオプションで消せるけど
207デフォルトの名無しさん
2014/11/16(日) 07:07:37.48ID:fuIgZytk208デフォルトの名無しさん
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);
}
こういうのに対するコーディング規約とかも、会社によってはあるんでしょうか?
(ちなみに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);
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());
hash = ComputeHash(data) if (! data.empty());
214デフォルトの名無しさん
2014/11/19(水) 12:53:45.74ID:GN47sEav >>212
なるほど、代入が1命令で済むなら参考演算子の方が見やすいですよね。
ちなみに複数行にわたる時はどうします?
>> 213
説明不足でした、C言語を想定していました。
ちなみにこの書き方だと、同じ変数に対する代入が二つ連続しているだけのように(ぱっと見)見えませんか?
1行目の代入って無駄じゃね? と一瞬思わせてからの2行目、みたいな。
なるほど、代入が1命令で済むなら参考演算子の方が見やすいですよね。
ちなみに複数行にわたる時はどうします?
>> 213
説明不足でした、C言語を想定していました。
ちなみにこの書き方だと、同じ変数に対する代入が二つ連続しているだけのように(ぱっと見)見えませんか?
1行目の代入って無駄じゃね? と一瞬思わせてからの2行目、みたいな。
215デフォルトの名無しさん
2014/11/19(水) 13:24:54.27ID:xQuvo0yG216デフォルトの名無しさん
2014/11/19(水) 13:29:08.73ID:xQuvo0yG >>214
> ちなみに複数行にわたる時はどうします?
三項演算子でも見やすく書ける。
場合によってはハッシュを使う。
Perlで書くけど、
my $value = {
key1 => 'value1',
key2 => 'value2',
key3 => 'value3',
}->{$key} || 'other';
> ちなみに複数行にわたる時はどうします?
三項演算子でも見やすく書ける。
場合によってはハッシュを使う。
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
>ちなみに複数行にわたる時はどうします?
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をつけるのは煩わしく思いますが。
というスタイルを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文の条件式で関数呼ばれると単にデバッグが面倒なんだよね
これは別の問題か
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) { }
こういうこと?
ではなく
result = func();
if (result) { }
こういうこと?
224デフォルトの名無しさん
2014/11/20(木) 18:35:58.57ID:d0Ca/Au6 比較演算子を省略しないとこうか
result = func();
if (result == true) { }
真偽値だったら省略したくなるな〜俺は
result = func();
if (result == true) { }
真偽値だったら省略したくなるな〜俺は
225デフォルトの名無しさん
2014/11/21(金) 10:27:03.29ID:09t/alwf そうそう
C言語って既定の真偽値型ないし
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) にしないと。
結局真偽値判定は比較演算子使わない方がいいんでない?
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) { }
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) と書くべき。
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:zrTQYxev240デフォルトの名無しさん
2014/11/23(日) 08:46:26.24ID:hspGDGDv そういう人が言う「分かりやすいコード」って
基本的に誤解しやすいコードが多い
基本的に誤解しやすいコードが多い
241デフォルトの名無しさん
2014/11/23(日) 08:59:26.38ID:DxJUdIe1242デフォルトの名無しさん
2014/11/23(日) 09:00:06.86ID:DxJUdIe1243デフォルトの名無しさん
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
わかりやすいコードっていうのは、独自じゃない。
多くが○○スタイルみたいな言い方で呼ばれてる。
もちろんいろんなスタイルがあって、わかりやすいスタイルというのは
一つではないが、わかりやすいという点では共通してる。
わかりやすいのに、バグがでまくるとか矛盾してるってw
246デフォルトの名無しさん
2014/11/23(日) 12:50:11.85ID:Pyfj4pkz C言語で
#ifdef DEBUG
printf(var);
#endif
が1つの関数に頻出するコードは非常に読みにくい
今やらされてる組織内独自のフレームワークのコード
#ifdef DEBUG
printf(var);
#endif
が1つの関数に頻出するコードは非常に読みにくい
今やらされてる組織内独自のフレームワークのコード
247デフォルトの名無しさん
2014/11/23(日) 12:59:40.43ID:K4bM7kRY >>246
プリプロの記法はもうちょっとなんとかならないものか?#if/#ifdef/#endif を一行で書ければいいのだが‥
プリプロの記法はもうちょっとなんとかならないものか?#if/#ifdef/#endif を一行で書ければいいのだが‥
248デフォルトの名無しさん
2014/11/23(日) 13:20:52.44ID:hspGDGDv249デフォルトの名無しさん
2014/11/23(日) 15:02:18.53ID:E8ar0Vq9 こうだろ
DBGP(var);
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当たりを使えば
分かりやすくなるよね。
それ、明らかにわかりにくいコードだよね。
わかりやすいコードとして考えられたのではなく、
単にやっつけ仕事で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
#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:/hENsJtv254デフォルトの名無しさん
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
これを早々に持ち出す姿勢w
258デフォルトの名無しさん
2014/11/24(月) 00:25:05.80ID:ALHBj7yp259デフォルトの名無しさん
2014/11/24(月) 00:25:55.45ID:LP7Sk3Ho プロとか常識とか言い出す奴は
信用してないわw
だってそれ、単なる虎の威を借る狐だもの。
それに、虎ですらないかもしれないしな
俺の信じる、虎さまはこうおっしゃってる。
だから信じなさい。みたいなw
俺が定義するプロはこういうものなんだ。
お前はプロじゃないのか!みたいで
どっかの宗教と同じ。お前は(俺らの)神を信じないのか!
信用してないわ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
○な書き方、△な書き方、どっちがわかりやすい?
の答えに、どちらでもわかりやすい。という答えがあるのは事実
だから複数のコーディング規約が存在するわけで。
書き方を(自分の好きな書き方に)統一すると、気持ちいかも知れないが
わかりやすさの点から見れば、どちらでもいいことが多い。
話しかしてないんけどねw
○な書き方、△な書き方、どっちがわかりやすい?
の答えに、どちらでもわかりやすい。という答えがあるのは事実
だから複数のコーディング規約が存在するわけで。
書き方を(自分の好きな書き方に)統一すると、気持ちいかも知れないが
わかりやすさの点から見れば、どちらでもいいことが多い。
263デフォルトの名無しさん
2014/11/24(月) 00:34:18.09ID:cBWQwcU/264デフォルトの名無しさん
2014/11/24(月) 00:35:36.40ID:LP7Sk3Ho >>263
全部俺が言ったことだなw
全部俺が言ったことだなw
265デフォルトの名無しさん
2014/11/24(月) 00:36:13.26ID:LP7Sk3Ho あ、まとめてくれてありがとよって
いうところかw
いうところかw
266デフォルトの名無しさん
2014/11/24(月) 00:50:24.64ID:VgrvAE4c267デフォルトの名無しさん
2014/11/24(月) 00:59:19.90ID:ALHBj7yp268デフォルトの名無しさん
2014/11/24(月) 01:04:11.30ID:LP7Sk3Ho > 読むぶんには読めるけど書き換えはさせてもらえない
可愛そうだよね。まあ、社内規則だからw
で、ここはリーダブルなのかはどういうことかって話すスレだから
社内規則で変えられないとかはどうでもよくて。
じゃあリーダブルなのはどういうコードかってことで、
意見を集めましょう。
ってもうみんな書いたか? 俺はsyslogって書いた。
デバッグ出力をするために再コンパイルが必要っていうのも
変な話なんだよね。そもそもオプションで指定すればいいと。
デバッグ出力機能を持っている。という所まで仕様。
で、こういう仕様を考える人、そこまで頭が回る人が、いないんだろうね。
可愛そうだよね。まあ、社内規則だから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
デバッグそのものじゃないぞ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』 第八章防御的プログラミングがお勧め。
全員に対して読みやすさを一定量担保するために、コーディング規約を作る。
デバッグプリント関係は、『CODE COMPLETE』 第八章防御的プログラミングがお勧め。
276デフォルトの名無しさん
2014/11/24(月) 07:30:10.66ID:NWUcXEp0 > 読みやすさは主観であり、人により異なる。
つまり、人によっては、Aという書き方が読みやすく、
別の人は、Bと言う書き方、Cと言う書き方が一番読みやすいということ
> 全員に対して読みやすさを一定量担保するために、コーディング規約を作る。
たとえば規約でBという書き方に統一する。
さて、統一することによって、Aという書き方は読みにくということになるのか?
Bという書き方は読みにくいということになるのか?
もちろん違う。なぜなら、
> 読みやすさは主観であり、人により異なる。
と書いてあるように、人によって、AやCが読みやすいということに変わりはないからだ。
つまりなりが良いたいかというと、
AでもBでもCでも読みやすいことには変わりないということ。
統一するのは、読みにくい書き方を無くすのが目的であり、
読みやすい書き方は複数あるということは真実だし、
読みやすい書き方ならどれでもいいことにかわりはないのである。
だからこそAとCは自分のに取っては一番ではないが
それでも読みやすいならばどれでもいいから、その規約に従うのである。
つまり、人によっては、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/281デフォルトの名無しさん
2014/11/24(月) 08:01:29.70ID:NWUcXEp0282デフォルトの名無しさん
2014/11/24(月) 08:03:05.74ID:NWUcXEp0 >>279
で?と言われてもな。
最初から言っているように、
わかりやすいコードを書くことが目的であって
書き方を統一することは目的じゃないんだよって話
言い換えると、わかりやすければ統一する理由はない。
本当の目的を忘れるなって話。
で?と言われてもな。
最初から言っているように、
わかりやすいコードを書くことが目的であって
書き方を統一することは目的じゃないんだよって話
言い換えると、わかりやすければ統一する理由はない。
本当の目的を忘れるなって話。
283デフォルトの名無しさん
2014/11/24(月) 08:06:01.78ID:tFEPR/wR >言い換えると、わかりやすければ統一する理由はない。
いや、AとBの両方わかりやすくても、一つの製品にAとBが混在してたら駄目だろ
いや、AとBの両方わかりやすくても、一つの製品にAとBが混在してたら駄目だろ
284デフォルトの名無しさん
2014/11/24(月) 08:28:02.98ID:tFEPR/wR デバッグ出力でsyslogって発想は無いなぁ
最初に批判されてるが
#ifdef DEBUG
は普通のイディオムだから小さなプログラムなら悪くはないし
もう少し大きな規模になってロギングフレームワークを検討しようというなら
もっと抽象度の高いレベルでちゃんとしたフレームワークを採用するだろ
(C++ならglogとか。言語ごとにあるだろ)
最初に批判されてるが
#ifdef DEBUG
は普通のイディオムだから小さなプログラムなら悪くはないし
もう少し大きな規模になってロギングフレームワークを検討しようというなら
もっと抽象度の高いレベルでちゃんとしたフレームワークを採用するだろ
(C++ならglogとか。言語ごとにあるだろ)
285デフォルトの名無しさん
2014/11/24(月) 08:38:23.76ID:owm7UG/9286デフォルトの名無しさん
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+F386デフォルトの名無しさん
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:ikKWfd9P389デフォルトの名無しさん
2014/12/21(日) 13:01:56.36ID:XZ/0moqW >>388
上司「俺は土日をつかえなんて指示はしていない。そんな計画を承認したはずもない。
ただお前が業務時間内に間に合わないなら土日や深夜や自宅時間も使わざる負えないだろうということだ。そんなこともわからんのか。」
上司「俺は土日をつかえなんて指示はしていない。そんな計画を承認したはずもない。
ただお前が業務時間内に間に合わないなら土日や深夜や自宅時間も使わざる負えないだろうということだ。そんなこともわからんのか。」
390デフォルトの名無しさん
2014/12/21(日) 14:38:18.36ID:dx70AcKS391デフォルトの名無しさん
2014/12/21(日) 14:40:57.90ID:dx70AcKS あ、もしかして俺なら(上級者なら)時間内にできる仕事を
どれだけ時間があっても出来ないって言いたい人なのかな?
俺にはいくら時間があっても仕事できないよって。
どれだけ時間があっても出来ないって言いたい人なのかな?
俺にはいくら時間があっても仕事できないよって。
392デフォルトの名無しさん
2014/12/21(日) 14:50:49.21ID:dx70AcKS まあ、ここいらでリーダブルコーディングの話に戻すか。
仕事が遅い人って見ていると、自分で自分を苦しめてるんだよね。
自分でぐちゃぐちゃなコードを書いて、
正しく動かない、バグが直せないって言ってる。
自分が書いたコードと戦っているわけさw
リーダブル、つまり読みやすいコードを書けるように
自分を鍛えれば、自分が書いたコードと戦うことは少なくなっていく。
でも仕事が遅い人って、自分が書いたコードと戦うことに精一杯。
時間がないを言い訳にしてレベルを上げようとしないから、
戦う敵を量産するだけで、更に時間をなくしてる。
コードは読むものなのだが、どうもレベルが低い人にとっては
解析する物になっているようだ。解析した後その謎を片付けないでそのままにして
さらにコードを追加するから、書けば書くほど謎が深まっていく
だから仕事をするばするほどかかる時間が増えていく。
あ、だから無限の時間って話になるのかw
仕事が遅い人って見ていると、自分で自分を苦しめてるんだよね。
自分でぐちゃぐちゃなコードを書いて、
正しく動かない、バグが直せないって言ってる。
自分が書いたコードと戦っているわけさ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^
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■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 自民・麻生太郎 副総裁 石破政権の1年は「どよーん」 高市政権の発足で「何となく明るくなった」「世の中のことが決まり動いている」 [Hitzeschleier★]
- 東京都「都民の税金1.5兆円が国に奪われている」「全国に分配されている」に地方民ブチギレ [Hitzeschleier★]
- JA全農が「新おこめ券」…来年9月末の有効期限を新設、必要経費のみ上乗せ [蚤の市★]
- 【おこめ券】鈴木憲和農相 小泉前農相の備蓄米放出を“反省”「備蓄の円滑な運営を図ってまいります」 [Hitzeschleier★]
- 【27歳会社員】「自慰行為に使うために」コインランドリーの乾燥機から24歳女性の下着など計11点(時価8万2080円相当)盗んだ疑い [nita★]
- 1人3千円の食品高騰対策、何に使える? あいまいなまま衆院通過 [蚤の市★]
- 【実況】博衣こよりのえちえちダンガンロンパ2🧪★3
- 東京都公式「年間1.5兆円もの都税が都民のために使われず、地方に吸われています😭」 [834922174]
- 麻生太郎が石破政権の1年を酷評「どよーんとして何も動かない感じだったな。それに引き換え高市政権は物事が動いている」 [597533159]
- 箱根そばのうまさは異常
- 【速報】室井佑月、米山隆一との離婚を決意wwwwwwwwwwwwwwwwwwww [802034645]
- 【実況】博衣こよりのえちえちダンガンロンパ2🧪★4
