5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

1関数何行? 1クラス何行?

1 :仕様書無しさん:2012/10/28(日) 15:19:45.84
※ただしプロジェクト全体の行数は1万行を超えるものに限る


2 :仕様書無しさん:2012/10/28(日) 15:46:48.52
行じゃねぇよ
その関数なりクラスなりが責任を負う範囲のコードを書け

3 :仕様書無しさん:2012/10/28(日) 16:30:04.74
>>2
責任を負う範囲のコードを書いたら
だいたい何行程度になる?

4 :仕様書無しさん:2012/10/28(日) 17:30:20.82
だいたい26行だな

5 :仕様書無しさん:2012/10/29(月) 01:17:01.26
A4に印刷した場合、それなりに読める程度にフォント小さくした時のMAXの行数以内。
コメント(5〜20) + ステップ(10〜20) ≒ 35 行

6 :仕様書無しさん:2012/10/29(月) 22:02:48.34
30行以内が基本

7 :仕様書無しさん:2012/10/31(水) 02:55:45.03
>>3
んなもん場合によるとしか言えないだろアホなの?

8 :仕様書無しさん:2012/10/31(水) 08:33:20.57
条件分岐が多数あるものだと、ステップ数は増える。
それらを一ブロックと考えると20〜50ステップ程度だろう

9 :仕様書無しさん:2012/10/31(水) 22:15:05.34
>>7
場合によるというのであれば、
○○の場合は、どれくらいって
言い方をすればいいと思いますが?

なんでそんなに喧嘩腰なの?


10 :仕様書無しさん:2012/10/31(水) 22:22:07.02
>>8
条件分岐の中を別ステップ数として考えるの?
それ、普通ありえないし、別にしたらダメでしょ。

関数になっていれば単体テストできるけど、
ifで分岐されてるだけじゃ単体テスト出来ないから
複雑度がifの数だけ倍増していく。

変数のスコープもifの中から外が読み書きできるから
処理を小さくまとめることができていない。

11 :仕様書無しさん:2012/11/01(木) 23:38:58.34
>>1
その1万行を俺が書き直したら3千行になる。

12 :仕様書無しさん:2012/11/02(金) 01:42:22.71
行数より複雑さで考えろよ…

13 :仕様書無しさん:2012/11/02(金) 08:35:24.14
行数と複雑さは密接な関係にある。

14 :仕様書無しさん:2012/11/02(金) 16:59:38.68
行数で生産性を測る

15 :仕様書無しさん:2012/11/05(月) 02:01:36.95
俺は出来るだけ40行以内を目指す(1画面に収まる範囲)

実際は
10行未満40%
10行以上20行未満50%
20行以上10%
という感じ

16 :仕様書無しさん:2012/11/05(月) 10:30:53.04
私が使っている言語では、1関数=2行 くらいが最頻。
最も長くて、1関数=5行。しかしこうなることはあまりない。
そして5行にもなる場合は、推敲の余地がある場合が多い。

17 :仕様書無しさん:2012/11/05(月) 18:10:52.26
CCを使うと1関数数万行はざら

18 :仕様書無しさん:2012/11/05(月) 20:33:46.27
>>16
>私が使っている言語では、1関数=2行 くらいが最頻。
1関数=2行じゃ何も書けないだろw

19 :仕様書無しさん:2012/11/11(日) 08:32:36.05
>>16
マクロかよw

20 :仕様書無しさん:2012/11/11(日) 11:00:34.78
function hoge(){
}
これだけで2行

21 :仕様書無しさん:2012/11/12(月) 23:57:59.88
>>18 >>19
細かいことは口止めされているが勿論マクロではない

>>20
そういう数え方なら、
1関数=2〜3行くらいが最頻
最も長くて、1関数=6行

22 :仕様書無しさん:2012/11/14(水) 15:05:06.80
function hoge(int a,int b){ return a + b;}
これで1行

23 :仕様書無しさん:2012/11/14(水) 23:36:02.38
>>22
それで?

24 :仕様書無しさん:2012/11/14(水) 23:55:07.09
ショートサーキットしまくりで10行くらい。

25 :仕様書無しさん:2012/11/15(木) 14:22:51.31
物理的な行数でなく論理的な行数で知りたいよね >>24

26 :仕様書無しさん:2012/11/15(木) 21:57:04.58
int f(x) { int a; while(a = ++x++) { x /= 2; } return a; }

27 :仕様書無しさん:2012/11/15(木) 22:13:13.21
2行とか3行って、そこらのメソッドやらプロパティラップして返してるだけなの?

28 :仕様書無しさん:2012/11/15(木) 23:15:38.00
論理ステップ = ; と } の数

29 :仕様書無しさん:2012/11/16(金) 23:31:24.34
>>27
勿論やってる内容はどれもふつう一つの関数でやることだと思う
意味を成さない断片の行数を数えているんじゃない

30 :仕様書無しさん:2012/11/16(金) 23:40:09.11
>>28
その数え方なら1関数=1論理ステップがほとんどなのだが
あまりみんなの参考にはならんかな

31 :仕様書無しさん:2012/11/17(土) 17:37:25.50
関数合成は1ステップと数えないと、
1ステップで幾らでも書ける言語が出てくるぞ

32 :仕様書無しさん:2012/11/17(土) 19:10:33.07
>>28

def foo(x:Int,y:Int) = (1 to x) filter (_ % y == 0) mkString ","

0ステップですか?
今時"ステップ"て… そんなの数えても意味がない

33 :仕様書無しさん:2012/11/17(土) 21:51:18.93
じゃあ意味があるのは何?

34 :仕様書無しさん:2012/11/17(土) 22:50:29.97
>>32
>今時"ステップ"て… そんなの数えても意味がない
じゃあ何で数えるのって話。語数ではどうだ?

35 :仕様書無しさん:2012/11/17(土) 23:18:47.44
これはダメあれはダメといったら
じゃあ何ならいいのかってことを聞き返されるのは分かりきったことなんだから
最初からセットで言ってくれよと
いつもの客先打ち合わせやDRみたいだ

36 :仕様書無しさん:2012/11/17(土) 23:24:14.25
なにいってんだ?
ダメというのは問題があるということ。
セットで言えないのはそれに変わるいい理由が見つかってないからだ。

何も言わなかったら、ダメということも伝えられない。
いいと判断されてしまう。良くないのだから問題があるということを
言わないといけない。

ダメといって代案を提示しないのは、
いい方法を一緒に考えましょうっていう意味だ。
お前こそ、いちいち聞き返さないで
ダメといわれたら代案を自分から提案しろよ。

37 :仕様書無しさん:2012/11/17(土) 23:28:58.85
まあ1関数だのクラスだの何行ってのも、よっぽどダラダラ書かない限り意味ないわな
C#にはpartial classなんてのもあるし

38 :仕様書無しさん:2012/11/17(土) 23:46:54.62
いまだにステップ数で生産性があるヤツか判断するやついるよな。
よく考えてできるだけ同じような処理がないように設計しても無駄骨。

39 :仕様書無しさん:2012/11/18(日) 00:57:54.97
関数の行数に関しては視認性の問題だからな。
それこそ昔の解像度の低いディスプレイでの開発ならともかく、今時の
大きいディスプレイやデュアルディスプレイ環境なんかだと違ってくる
もんでしょ。 1画面で見通せる位が丁度いいってのが発端のはずだし。

40 :仕様書無しさん:2012/11/18(日) 20:28:51.67
よくわからないときはとりあえず「42」と答えておけ
わかる奴はわかる、とくにグーグルのエンジニアならよくわかるだろう

41 :仕様書無しさん:2012/11/18(日) 21:42:02.11
雑学博士とかクイズマニアなら
わかるだろうね

42 :仕様書無しさん:2012/11/20(火) 01:54:43.04
大抵は1メソッドが20行越えるようなら、機能分割も考えるって感じじゃね
詰め込みすぎたら処理追う再に覚える量が増えるから、
ある程度まとまった処理には名前をつけて頭から押し出すためにメソッド化する感じ

しかしまぁ未だにステップ数求めてくる低レベル企業の多いこと
お偉いさんは何かしら数字がないと管理ができないと思ってるからな
行数と仕事量は比例しねーとか考えてすらいない
自分の「数値を集計する仕事」さえできてれば、あとはどうでもいいって考えの老害が少なくない

43 :仕様書無しさん:2012/11/20(火) 10:50:38.42
>>42
国語辞書を見ても、本来、1関数(1メソッド)2行くらいが理想。
しかしプログラミング言語の事情から現実にはそれが20行になっている
ということではなかろうか

44 :仕様書無しさん:2012/11/20(火) 11:29:40.83
>>42
大手企業様(笑)は開発前からステップ数がわかっていないと気が済まないのだよww

45 :仕様書無しさん:2012/11/20(火) 20:05:05.50
2行のメソッドズラズラ書かれても、却ってわけ分かんなくならない?

46 :仕様書無しさん:2012/11/20(火) 21:34:35.65
1クラス何行(というか何メソッド)?の方の答えが見えんが
だれか言ってみて

47 :仕様書無しさん:2012/11/20(火) 22:28:40.06
>>43
主目的が1関数しか見ないならそうだろうね

48 :仕様書無しさん:2012/11/21(水) 10:42:52.79
>>45
>2行のメソッドズラズラ書かれても
同じことができるなら20行ズラズラよりいいよね
>>46
1関数何行の方はアプリに依存しないが1クラス何メソッドの方はアプリ依存
だから一概には言えんのじゃないか

49 :仕様書無しさん:2012/11/21(水) 23:14:43.65
2行10個が20行1個ですむなら20行1個のほうがいいし、
40行1個よりは20行2個の方がいいです

50 :仕様書無しさん:2012/11/22(木) 20:25:57.42
Javaとかのウンコ言語では20行になる処理が
他の言語では2行になったりするし
どの言語の話なのかすら決めずに議論しても意味ないわ

51 :仕様書無しさん:2012/11/23(金) 01:16:10.35
ウンコといえば、50cmの一本糞を放りだしたことがある。

52 :仕様書無しさん:2012/11/23(金) 06:25:02.52
>>50
2行が20行になるといっても、mainとかimportとかIDEが
自動生成してくれる部分や{}だけの行を含んでるでしょ?
実際にタイプしないといけない文字数で言わないとw

53 :仕様書無しさん:2012/11/23(金) 09:46:18.31
メソッド全部2行で済ますなんてムリだろ
クラス1個newするだけで1行だぜ
どんなプログラム作ってんのか見せてほしいわ

54 :仕様書無しさん:2012/11/23(金) 10:47:05.53
>>53
可能。

出力 = 便利な関数1(関数2(関数3(入力)))

こんな形に持ってくれば、メソッド2行でも複雑なことが出来る。
まあ関数数個が限界で、こんな密度ばかりのコードだったら読みづらいから
数行に分けるのが普通だけどね。

55 :仕様書無しさん:2012/11/23(金) 23:23:59.69
>>53
>どんなプログラム作ってんのか見せてほしいわ
オレも見たい
>>54
> 出力 = 便利な関数1(関数2(関数3(入力)))
これはかなり無理してるから続かんよね。
無理せずいつも2行になるなんていうのが可能かという話なんだが

56 :仕様書無しさん:2012/11/24(土) 08:19:54.54
関数呼び出しの階層が深いのを厭わない人なら一つ一つの関数は短くなるし
そうでなければ長くなってしまう

57 :仕様書無しさん:2012/11/25(日) 21:47:26.27
>>56
人に依るというんじゃなくて、ふつう
その呼び出し階層は何段くらいが心地よい?
一つ一つの関数はどのくらいの長さが心地よい?

58 :仕様書無しさん:2012/12/01(土) 11:59:26.76
一読性を考えると80桁x20行以内

59 :仕様書無しさん:2012/12/02(日) 08:45:30.67
今北産業基準で頼む。

60 : 忍法帖【Lv=7,xxxP】(1+0:5) :2012/12/03(月) 00:34:56.98
10〜30くらい。大抵20ちょい。
コルーチンとかになると200くらい行くこともある。

61 :仕様書無しさん:2013/03/21(木) 17:37:39.25
>>54
Lispってこんな漢字だっけ?

62 :仕様書無しさん:2013/03/23(土) 13:47:52.51
ライブラリを作る、そして、

変数1=ライブラリ関数1(引数1, 引数2, ・・・);
変数2=ライブラリ関数2(変数1, 引数3, ・・・);
     ・
     ・
     ・
変数x=ライブラリ関数x(変数3, 引数4, ・・・);

return ライブラリ関数(変数2, 変数x, 引数5, ・・・);

こんな感じになるようにしてる

63 :仕様書無しさん:2013/03/23(土) 17:24:06.16
同意。

アセンブラ書きの人は、インデントが綺麗だし
Cコードも簡潔で美しいよね。

繰り返しを悪のように言う人がいるけど
俺はそうは思わないね。

64 :仕様書無しさん:2013/03/23(土) 17:35:26.71
処理が明らかに複数メソッドで重複してなければ、多少長くなってもよい。
可読性を語るなら、ネスト数のほうが議論が盛り上がるな。

65 :仕様書無しさん:2013/03/23(土) 18:14:42.26
漏れもハスケルとかでプログラム作りたい

66 :仕様書無しさん:2013/03/27(水) 16:24:12.40
渡された詳細設計書の通りに実装すると1関数700行超える
ちゃんと関数分けした詳細設計は客が読めないそうだ

67 :仕様書無しさん:2013/03/31(日) 10:43:41.54
詳細設計のドキュメントなんて、パブリックなところだけでいいんじゃねえの

68 :仕様書無しさん:2013/04/01(月) 02:51:29.99
設計書どおりにってのは論理的な部分であって、
内部実装を設計書に依存させてしまったら非効率的なコードばっかになるで

そもそもコーディングがプログラム設計なわけだし、考えて実装しないとだめだろう
設計書と同じ構造にする縦割りお仕事脳だとこの先どんどんつらくなってくぞ

69 :仕様書無しさん:2013/04/11(木) 11:18:05.70
客が素人にも関わらず自分にも理解できる詳細設計よこせって言ってるんでしょ
そういう環境なら「詳細設計のとおり」に実装しないと面倒なことになるのは概ね見当がつく
素人相手にコーディングレビューとか

70 :仕様書無しさん:2013/04/21(日) 15:21:49.66
行数で判断するのは間違ってるけど、1メソッドは20行くらいを目安としてる
それを超える場合は複雑な機能を持ってることが多いので、考え直したほうがいい場合も少なくない
ただし、ボーダーの行数を超えるのがNGだとは思ってない
単純な機能として名前が付けれるメソッドで、分岐や繰り返しが殆どないようなら、
多少長いメソッドであっても、それは妥当なものだと思う

クラスは行数で考えるものではないけど、メソッドやクラスコメント含めて1000行超えちゃうようなら少し考える
行数が多いと全体の見通しも悪くなるし、テストコードが多くなるからあまり大きなクラスは作りたくない
コミットがコンクリフトする可能性も上がるし

分けるかどうかの目安としては、プライベートメソッドの量で考える
プライベートメソッドが多数あるなら、機能を抽出した細かいクラスが作れると思う
判定と分岐を一つのクラスにいっぱいもたせると、そのクラスのテストがだるいことになるから

71 :仕様書無しさん:2013/04/22(月) 19:45:11.52
C#のフォームでラムダ式ばっか使ってると、コンストラクタがやたら長くなる

72 :仕様書無しさん:2013/08/17(土) NY:AN:NY.AN
設計書に定義された関数以外は作成禁止
関数分けもダメ
ダラダラと似たような処理が数百行から数千行
上司とPMはステップ数で満足
顧客は設計書どおりで満足

73 :仕様書無しさん:2013/08/21(水) NY:AN:NY.AN
保守で死ぬ系の典型だなw

74 :仕様書無しさん:2013/08/22(木) NY:AN:NY.AN
http://rfi.a.la9.jp/hn203/kb/kb-main3.html
 
 http://homepage2.nifty.com/e-d-a/hn203/ansec/animal.html

75 :仕様書無しさん:2013/08/23(金) NY:AN:NY.AN
最初は設計書通りに書くので、1関数50行超、1クラス10関数超とかになる。
で、プログラマテストするにあたって、
「これ、よみずらいな」ってなって、関数分けや、クラス分けが始まる。

だから、1関数がものすごく長かったり、1クラスに趣旨の違う関数が詰め込まれてたりすのは、
単純にリファクタリングがされてないだけ。
つまり、リファクタリングしてる時間がなかっただけ。

設計書の段階で関数やクラス分けが十分になされることを期待するのは馬鹿げているし、
設計書ってそういうことをするために書くものではないでしょう?

悪いのは大抵、無茶な納期を組んじゃった上流の人たちだよ。

76 :仕様書無しさん:2013/08/23(金) NY:AN:NY.AN
鬼のように全関数がぶち込まれた1クラスを分割終了。
これから動作テスト。

サンプルプログラムだから文句を言える立場じゃないけど、
こういう作り方はちょっと困るな…

77 :仕様書無しさん:2013/08/24(土) NY:AN:NY.AN
クラス設計書なんて作るだけ無駄
ほしい情報はそういうものではなく、外部的な動作仕様
それ以降の実装作業に注力したい

だがしかし、未経験歓迎ドナドナ業者多数すぎて、実装能力皆無の偽物マが腐るほど居る業界
実装者依存にできない仕組みも同時に出来てて、スキルがある技術者は白け、
スキルの無い技術者は伸びる環境がない(そもそも技術を身につけようという意思がない)

78 :仕様書無しさん:2013/11/10(日) 06:09:39.07
関数は基本的に2~3行
7行超える辺りから臭い
このスレを見て、初心者の時は関数内に空行とかよく入れてたの思い出したわ
なつかしい

79 :仕様書無しさん:2013/11/10(日) 11:08:18.35
保守性が大切だな。つまり読みやすさ
最初はプロトタイプのやつつくる。コード書いてうごけばOK

つぎにこれを見やすくする。
インテンドを深くしないようにとか、深いと見難いから。
for文の中を外に出すとかやる。
見直しは、コードを読むに集中力がいるというのを減らしておく。

行数が多いと終わりまでを追うに疲れる。
for文中が百行続くというのはいけない

しかし納期が迫ってくると、やっつけ

80 :仕様書無しさん:2013/11/10(日) 11:16:53.69
階層が浅いと保守性がいいわけ、読むに疲れないというやつ。
関数->関数->関数->関数で4こ下の変数を直すんじゃなくて
関数->関数の2こ下の変数を直すほうが追うに楽
関数が細切れになっていると読むに疲れる。

81 :仕様書無しさん:2013/11/11(月) 02:18:06.70
メソッドを関数と呼び奴は無能

82 :仕様書無しさん:2013/11/12(火) 00:50:46.31
呼び奴

↑無能の証拠w

83 :仕様書無しさん:2013/11/14(木) 12:37:06.06
フォントサイズにもよるけど、ディスプレイyサイズの半分以下

エディタ最大化すればスクロール無しでスッキリ 読みやすい

84 :仕様書無しさん:2013/11/14(木) 21:17:44.53
抜き出す必要が無いとわけないから数百行とかザラ

85 :仕様書無しさん:2013/11/15(金) 04:56:26.37
オブジェクト指向言語では1〜3行のメンバ関数を大量に作る
ExtractMethodは1番基本的なリファクタリング
2桁行になるのはgotoやswitchを使うのを躊躇わない初級者

86 :仕様書無しさん:2013/11/17(日) 12:13:07.94
そしてそれを突き詰めると関数型言語になる

87 :仕様書無しさん:2014/04/05(土) 23:21:31.56
オブジェクトの仕様に紐付かない関数的なメソッドはとりあえずstaticな実装にしておく
再利用したい場所が他にもできたら、ユーティリティメソッドとして別クラスに定義し直す

88 :仕様書無しさん:2014/04/26(土) 21:29:18.11
とりあえずリファクタリング

89 :仕様書無しさん:2016/05/31(火) 01:15:42.65
age

19 KB
新着レスの表示

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50
名前: E-mail (省略可) :


read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)