2ちゃんねる ■掲示板に戻る■ 全部 1- 最新50    

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

関数の長さ 上級者10行後、中級者100行前後

1 :仕様書無しさん:2014/10/12(日) 04:11:10.31 .net
初心者、数百行〜数千行

(コメント行、空行、括弧だけの行除く)

これ、だいたいあってる

112 :仕様書無しさん:2014/11/19(水) 00:42:01.03 .net
医療プログラマーが超高難易度の免許制に / フリーソフトやオープンソースの無作為配布も全面禁止
http://fox.2ch.net/test/read.cgi/poverty/1416286592/

113 :仕様書無しさん:2014/11/19(水) 06:55:13.05 .net
>>110
その手があったかありがとう

不必要にAPI側知ることになっちゃうから、現実だとその辺はトレードオフなのかな

確かに、そもそも既存のクラスオープンできたりダックタイピングな言語ならスムーズにできますね

114 :仕様書無しさん:2014/11/19(水) 06:57:17.97 .net
>>111
それだと、ラップしたクラスの中で結局getter使わないといけなくない?

115 :仕様書無しさん:2014/11/19(水) 07:22:18.36 .net
>>113
仲介クラスを作って、そこに仕事をさせるというやり方もある。エクササイズ
から外れるが。その辺はいろいろネットで調べればいろんな流派のやり方が出
てくる。

116 :仕様書無しさん:2014/11/19(水) 14:04:06.56 .net
他者の作ったライブラリやフレームワークにまでエクササイズの考え方を強制することは出来んからな
難しい問題だ

117 :仕様書無しさん:2014/11/19(水) 14:29:06.76 .net
エクササイズの意味もわからないバカばかり

118 :仕様書無しさん:2014/11/19(水) 14:36:01.63 .net
2chは上級者のフリをした初級者ばかり

119 :仕様書無しさん:2014/11/19(水) 18:08:17.53 .net
他人の作った粉々のメソッド見る気にならん

120 :仕様書無しさん:2014/11/20(木) 09:25:35.81 .net
>>118
じゃあお手本見せて

121 :仕様書無しさん:2014/11/22(土) 13:44:45.24 .net
こういうスレがあったんやな。関数=メソッドの長さはクラス構成と密接に関わるしな。

http://kanae.2ch.net/test/read.cgi/prog/1351405185/l50

122 :仕様書無しさん:2014/11/24(月) 19:16:46.70 .net
Rubyには一関数5行って規約があったりもする

123 :仕様書無しさん:2014/11/24(月) 19:42:57.54 .net
mjd?

124 :仕様書無しさん:2014/11/25(火) 00:36:29.35 .net
とか言ってどこの規約かわすれた...
けど、一番一般的だろうスタイルチェッカーのrubocopのデフォルトは10行ですます

125 :仕様書無しさん:2015/01/15(木) 20:51:38.44 ID:yuXeALz9M
tes

126 :仕様書無しさん:2015/04/03(金) 06:56:01.67 .net
>>39
いやまて、だめだろそれは

127 :仕様書無しさん:2015/04/03(金) 12:32:52.09 .net
なんちゃって上級者は関数は短い方がいいなどといい、switchで済むものもなんでもかんでも別オブジェクトにしてしまったり、脳みそに欠陥がある

128 :仕様書無しさん:2015/04/03(金) 12:39:22.00 .net
「オブジェクトにすると分岐がなくなります」←は?

…って思ってる人なんか?

129 :仕様書無しさん:2015/04/04(土) 23:07:35.40 .net
>>127
長くてもいいのだけど

何やってるのかバカでもわかるくらいに
簡単にして
難しい内部の挙動は外部モジュールに
押し込めて欲しい

130 :仕様書無しさん:2015/04/05(日) 00:18:57.28 .net
>>122
> Rubyには一関数5行って規約があったりもする

自分のこと頭がいいと思ってる馬鹿は
そういう規約つくるよね。

131 :仕様書無しさん:2015/04/05(日) 00:25:42.17 .net
行数じゃなくて、複雑度、
具体的に言えば、ifやループなんかの
数を制限した方がいいだろうな。
ツールを使わないと数えるのが面倒になるけど。

132 :仕様書無しさん:2015/04/05(日) 10:02:03.77 .net
改行しなければいいやん

133 :仕様書無しさん:2015/04/23(木) 00:43:58.09 .net
どんどん分割して短くしていくっていうのはプログラミングの理想ではあるけど、クラスやメソッドの名前付けが下手な人がやるとすごい残念なことになる
まあ俺のことだけど\(^o^)/

というかエクササイズ何度かトライしてみたけど毎回パッケージ名どうすりゃいいんだろってとこで詰まる
閉鎖性共通の原則とか意識するとどんどんネストが深くなったりするし

134 :仕様書無しさん:2015/04/25(土) 12:24:40.95 .net
ひとつ気づいたことがある。

長い関数を小さな関数に分ける時、
同じファイル(クラス)で分けるのは
だいたいNGである。

135 :仕様書無しさん:2015/04/25(土) 14:24:46.35 .net
関数が長いという理由で、手続きを関数化するのは悪手
c#ならregionとかで囲む

136 :仕様書無しさん:2015/04/25(土) 21:01:42.21 .net
関数って長いと、ローカル変数が増えるから嫌なんだよね
関数全体で有効なローカル変数ってせいぜい2つが限界
多すぎると、俺の頭では処理できない

137 :仕様書無しさん:2015/04/26(日) 00:24:44.71 .net
{}でスコープ定義すりゃいいだけじゃん

138 :仕様書無しさん:2015/04/26(日) 00:27:58.49 .net
>>1
デバッグしろと言われてCのソースを見てるけど、
内容が1行だけの関数ばかり沢山ある。

ほんとに見るのが大変なソースなんだ

これは上級者に見せかけたヘタレのソースだと言いたい!

139 :仕様書無しさん:2015/04/26(日) 09:08:33.31 .net
処理の単位を考慮せずやみくもに関数ばかり増やすのはgoto使ってるのと変わんないもんな

140 :仕様書無しさん:2015/04/26(日) 09:26:39.12 .net
保守する経験があればわかるんだけど、行数が短いのは楽
関数が長くても読めるが、楽かどうかだな

たとえばこの掲示板の300のスレッドなんか平気で、苦にならない、
俺は新着レスの表示、
掲示板に戻る、全部、前100、次100、最新50のところで
全部をクリックして最初から読む。
活字中毒というほどではないが、活字はすきだ

ただ、保守するときの場合だ、関数の短いのが疲れない、
そこが大事だな。

バグを出さない書き方あるという。それは、五時に帰ることだと言う人がいた
へとへとでは、いいコードにならないよ

141 :仕様書無しさん:2015/04/26(日) 10:19:45.95 .net
>>137
関数全体のスコープって前提

142 :仕様書無しさん:2015/04/26(日) 10:24:56.26 .net
行数とかより、関数型的か否かが気になる

143 :仕様書無しさん:2015/04/26(日) 10:41:18.81 .net
>>136
中括弧の使い方勉強しろ

144 :仕様書無しさん:2015/04/26(日) 11:54:08.96 .net
新入社員が先輩社員に何か嬉しそうに話してる構図

「先輩、すごい機能を発見しましたよ! ほら{}の間に変数定義すると・・・」
「あ・・・ああ、すごいな(こいつも成長したな)」

145 :仕様書無しさん:2015/04/26(日) 12:16:14.70 .net
ああそう言うことか

146 :仕様書無しさん:2015/04/26(日) 12:17:47.78 .net
どういうこと?
自作自演してないで説明してよ

147 :仕様書無しさん:2015/04/26(日) 13:37:58.43 .net
この流れでわからんとかどんだけ頭悪いんだ

148 :仕様書無しさん:2015/04/26(日) 14:16:57.43 .net
わかるかわからんかじゃなくて、
説明しろってこと。

説明できないことが
答えになっちゃってるじゃんw
誰もわからない。

149 :仕様書無しさん:2015/04/26(日) 14:43:22.23 .net
あらあら、心に闇を抱えているようですね

150 :仕様書無しさん:2015/04/26(日) 15:04:11.74 .net
{}でスコープ指定できない言語もあるんじゃない?

151 :仕様書無しさん:2015/04/26(日) 15:07:07.88 .net
>>149
それ何が目的のレスなん?

152 :仕様書無しさん:2015/05/01(金) 13:51:04.48 .net
>>148
c言語はローカル変数の宣言は
計算処理の前にないとエラーになるんだよ

でも前後を中括弧でくくると
そこで新しいローカルがはじまるから
まるで途中でローカル変数を
定義できてるように見えるわけだ

中括弧は関数や制御文の区切りという
意味ではなくて
もうすこし汎用的な機能があるってこったね

153 :仕様書無しさん:2015/05/01(金) 22:38:45.90 .net
>>152>>144を具現化してくれました!

154 :仕様書無しさん:2015/05/03(日) 12:45:15.65 .net
>>153
バカにしやがって(´Д`)

155 :仕様書無しさん:2015/05/05(火) 04:39:45.23 .net
ここの人はみんな、保守系底辺派遣PGなのかなぁw?
頑張って綺麗なコード書いて!

156 :仕様書無しさん:2015/05/19(火) 00:02:36.32 .net
>>155
うるせえ死ね

157 :仕様書無しさん:2015/08/26(水) 07:07:28.57 .net
>>133
実践するうちにネーミング力=要求分析能力という事がわかってきた。

158 :仕様書無しさん:2015/08/26(水) 07:43:04.13 .net
構造化言語、オブジェクト指向言語と、コンピュータ言語の進歩って、
要するに「ネーミング技術」なんだと思っている。

アセンブラ時代の切れ目の無い長大なフローチャートを機能分割して、一機能に「名前」を付ける。
そうすれば、今度はそれを1個のCPU命令かのように扱えて、上位で扱わないといけない命令数が少なくなる。

そして、構造化言語で関数が大量に増えてくると、ある程度の関連性の有る単位でグループ化して
それを最小単位として「名前」を付けることで、それを最小の命令として上位で扱う命令数が少なくなる。

要するに、同時に扱わないといけないことを少なくするシンプルにする技術なんだな。

159 :仕様書無しさん:2015/10/14(水) 23:35:53.89 .net
なんでこのスレ上がってきたんだろう

160 :仕様書無しさん:2015/11/21(土) 22:07:35.44 .net
>>103
これでelseの代わりになる
if (a)
foo;
if (!a)
bar;

161 :仕様書無しさん:2015/12/06(日) 18:52:10.28 .net
>>159
DDDが流行っているからな。

162 :仕様書無しさん:2016/02/11(木) 20:51:24.80 .net
age

163 :仕様書無しさん:2016/02/12(金) 23:06:22.56 .net
状態遷移管理するコントローラーとか
どうしてもめっちゃ長くなる…

164 :仕様書無しさん:2016/02/13(土) 15:24:01.43 .net
状態遷移表とコントローラが一緒くたにハードコーディングしてるんじゃ無い?
小規模ならそれでも良いけど、ある程度以上にデカくなったらバラした方がいい。
それでもまだデカイ時は、大分類小分類とか多段ステートにして、小規模を維持する工夫をすれば良いよ。

165 :仕様書無しさん:2016/02/14(日) 22:06:31.53 .net
>>163
は?画面遷移じゃなくて、アプリケーションの状態の管理をコントローラーがやってんの?

166 :仕様書無しさん:2016/02/14(日) 23:05:44.23 .net
>>165
画面遷移です。状態ってのは画面のこと

バラして状態遷移のトリガーになるイベントと遷移元と遷移先とかMapに詰め込んで外だししてみたこともあったけど
めっちゃくちゃ見通し悪くなった…

結局Backコマンドとか、普通じゃない画面遷移とか、画面間のパラメータの受け渡しとかややこしくなるから
結局べた書きがいいという結論に達してべた書きしてる

みんなどうやって管理してんの…

167 :仕様書無しさん:2016/03/02(水) 08:28:16.26 .net
>>166
webアプリなら、そもそも複雑な状態遷移を管理しないようにしてるよ。

168 :仕様書無しさん:2016/04/03(日) 12:02:44.58 .net
4月から3年目のペーペーだけど、「単一責務(Single Responsibility)」守ってれば30行以内に収まるだろ?

10行:非常に良い
20行:良い
30行:普通
40行:ちょっと長いけど、まぁ許容範囲
50〜60行:やむを得ない事情があるなら仕方ないけど、極力分割を考えるべき
70〜90行:よほど退っ引きならない事情(数十個のswitch-caseが必要など)があるなら仕方ないけど、それ以外の理由では不可。
そもそも、大量のswitch-caseが必要になるときは、
アルゴリズムよりもデータ構造に問題がある場合が多い。
クラス設計をもう一度見直すべき。

100行以上:如何なる理由があろうと不可。
絶対に1メソッド内で複数の処理をしているはず(単一責務を守ってない)。
こんなん書いて許されるのは1年目だけ。

169 :仕様書無しさん:2016/04/03(日) 13:55:10.43 .net
Javaや.NETのクラスライブラリって1年目のぺーぺーが書いてるんだろうな
100行以上のメソッドあるし

170 :仕様書無しさん:2016/04/03(日) 19:56:19.58 .net
Haskellのソースコードは1メソッドあたり物凄く短いと思った
少ししか見てないけど

171 :仕様書無しさん:2016/04/03(日) 20:33:14.93 .net
>>169
PG自体が技術者のぺーぺーだろ

172 :仕様書無しさん:2016/04/03(日) 22:34:52.91 .net
メソッドの行数が増えることに気をとられて無駄に分割する奴もまたぺーぺーである

173 :仕様書無しさん:2016/04/03(日) 23:01:04.44 .net
意識高い系 vs ペーペー

174 :仕様書無しさん:2016/04/09(土) 20:42:13.40 .net
アクセサ禁止で要素ひとつになるまでクラスにするって不可能じゃない?

175 :仕様書無しさん:2016/04/10(日) 18:19:07.54 .net
>>174
根本的に馬鹿

176 :仕様書無しさん:2016/04/18(月) 02:39:19.17 .net
>>169
> Javaや.NETのクラスライブラリって1年目のぺーぺーが書いてるんだろうな
> 100行以上のメソッドあるし
例えばどれ?

http://hg.openjdk.java.net/jdk9/jdk9/jdk/file/96c21f6ea9f2/src

177 :仕様書無しさん:2016/04/18(月) 18:07:55.51 .net
>>84
今日読んだ
オブジェクト指向をきちんとつかいたいあなたへ
って本に同じ話が出てた。有名なんやな

178 :仕様書無しさん:2016/04/18(月) 18:09:50.59 .net
更に言うと実務ではルール通りいかないことも多々あるが、練習くらいはルールを意識して書けと書いてた

179 :仕様書無しさん:2016/04/18(月) 23:38:56.02 .net
練習してない事を実践でいきなりやるのは無理だから練習中からルール通りいかない事を意識しとくべきだな

180 :仕様書無しさん:2016/05/28(土) 18:41:47.83 .net
有志がオブジェクト指向エクササイズ講習会やってたりするんで首都圏の人で興味があれば行ってみれば?

181 :仕様書無しさん:2016/05/29(日) 08:47:34.06 .net
ってか、メンバー変数2つまでって無理じゃね?
Personクラスに
string _name;
int _age;
bool _isMale;
ってすることすら許されないんだろ?

182 :仕様書無しさん:2016/05/29(日) 11:39:06.05 .net
所詮は理想論なんだよね
意識高い系はチームでは和を乱す問題児でしかない
ワンマンのプロジェクトなら好きにしていいけどね
ポリモーフィズムよりスイッチ
オブジェクトより手続き
プライベートよりパブリック
それが社会の出した答えだよ
郷に入りては郷に従えってことさ
給与や昇進にも影響するから気を付けないとね

183 :仕様書無しさん:2016/05/30(月) 00:29:39.77 .net
>>181
isMaleって書いちゃうセンスが既に禁止事項な件・・・
その勢いだと、isFemale、isTransgenderとかも作るのか?

184 :仕様書無しさん:2016/05/30(月) 10:37:09.26 .net
え・・・
trueなら男
falseなら女でしょ
stringで持つわけ?

185 :仕様書無しさん:2016/05/30(月) 12:28:16.20 .net
enumでもてよ

186 :仕様書無しさん:2016/05/30(月) 13:24:46.31 .net
>>183
enumにしたところでメンバー変数2つ以上なんだよなあ

187 :仕様書無しさん:2016/05/30(月) 16:05:32.94 .net
>>184
昨今、trueでもfalseでもないのがいるだろ…

188 :仕様書無しさん:2016/05/30(月) 22:51:34.30 .net
性別をboolにするとかセンス無いというか
常識知らないというか、知識ないというか。

ISO 5218に従えばいいだけだろ
自分で考えるなや

ISO 5218とは、言語に依存しない1桁のコードによるヒトの性別の表記に関する国際規格。
https://ja.wikipedia.org/wiki/ISO_5218

189 :仕様書無しさん:2016/05/30(月) 22:54:47.90 .net
>>188
性別ごときなんでもいいよw

190 :仕様書無しさん:2016/05/31(火) 00:56:19.07 .net
エンティティ系クラスでインスタンス変数を3以下にするのは難しいと思う。

後、性別はGenderクラスを作るかな。Male, Femal, Lesbian, Gay, Bisexual, Transgender

191 :仕様書無しさん:2016/05/31(火) 02:28:31.09 .net
そのISOってどれくらい知られてるの?

192 :仕様書無しさん:2016/05/31(火) 07:37:29.05 .net
lgbtは男女に分類されるべきでlgbtという性別はないのではないか問題

193 :仕様書無しさん:2016/08/22(月) 22:55:52.17 .net
いいかげん、引数をすべてstringにして、会話のようにできないのかい?
もう引数、戻り値、いちいち書くのめんどくせぇ

194 :仕様書無しさん:2016/08/23(火) 01:49:03.97 .net
やればいいじゃん

195 :仕様書無しさん:2016/08/23(火) 06:56:03.79 .net
その結果、COBOLの完成です。

196 :仕様書無しさん:2017/06/10(土) 01:17:26.23 .net
殺しなさい

197 :仕様書無しさん:2017/07/05(水) 23:01:32.29 .net
Haskell使えば関数なんて数行

198 :仕様書無しさん:2017/07/06(木) 06:08:56.81 .net
じゃあ、Haskellで標準添付のライブラリーに含まれる
全関数のソースの行数の平均を示してくれ
「数行」っていうくらいだから10を超えることはないはずだよね?
もちろん、それを求める関数も数行で書けるよね?

199 :仕様書無しさん:2017/07/06(木) 12:31:21.34 .net
何使っても普通に書けば平均10行以下になりますが

200 :仕様書無しさん:2017/07/06(木) 12:38:59.10 .net
じゃあ言語は何でもいいし
標準添付のライブラリーがいやならgithubとかのでもいいから
そこそこまとまったコード中の関数の平均行数出してみせてよ

201 :仕様書無しさん:2017/07/06(木) 12:47:15.68 .net
>>200
てかマジに出来ないと思ってるの?
2ちゃんに入り浸りすぎて変なクセついてんじゃねお前?

202 :仕様書無しさん:2017/07/06(木) 17:14:29.43 .net
だから熱い想いは分かったから統計的なデータはよ

203 :仕様書無しさん:2017/07/06(木) 17:15:09.07 .net
論より証拠

204 :仕様書無しさん:2017/07/06(木) 20:44:03.85 .net
>>202
お前「自分は低スキルです」っていう意地のはりかたしてるけど分かってる自分で?

205 :仕様書無しさん:2017/07/06(木) 21:31:07.77 .net
集計結果マダー?
つーか行動力も読解力もゼロのお前は邪魔だからどっか行ってくれ
Haskellerの回答を待つ

206 :仕様書無しさん:2017/07/06(木) 21:39:48.35 .net
>>205
意地はってやる事が待つだけってもしかしてお前真面目系クズってやつだろ?

207 :仕様書無しさん:2017/07/06(木) 22:13:30.32 .net
Smalltalkで調べた
前の方にPharoのがあるけど改めてSqueakで

| A B |
A := Class allSubInstances size. "総クラス数 => 2114 "
B := CompiledMethod allInstances collect: [:m | m getSource lineCount].
B size. "総メソッド数=> 46826 "
B / A asFloat. "クラスあたりの平均メソッド数=> 22.14947965941343 "
B average asFloat. "メソッドあたりの平均行数=> 8.04666211079315 "

ぎり10行は切ってる(ただしコメントも含む)

208 :仕様書無しさん:2017/07/07(金) 09:35:57.07 .net
そもそも関数書けない奴いる
関数化一切せずにただただ書きなぐってコピペ
どう学習したらこんなんになんだよ・・・
一つのSQL条件修正で200ヶ所超え

209 :仕様書無しさん:2017/07/07(金) 19:13:49.24 .net
オブジェクトの中で何やっても構わんよ

210 :仕様書無しさん:2017/07/08(土) 10:05:06.49 .net
>>208
いるいるw
既存のコードは触らない!って変な哲学もっている人いるね
触らない代わりに、コピペ後に改造する
いつもそれだから、コピペがそこら中に散乱・・・

211 :仕様書無しさん:2017/12/29(金) 20:01:04.33 .net
誰でも簡単にパソコン1台で稼げる方法など
参考までに、
⇒ 『宮本のゴウリエセレレ』 というブログで見ることができるらしいです。

グーグル検索⇒『宮本のゴウリエセレレ』

YMGMFERUXQ

212 :仕様書無しさん:2018/05/22(火) 14:55:23.24 .net
とても簡単な自宅で稼げる方法
参考までに書いておきます
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』

PTGAG

総レス数 213
43 KB
新着レスの表示

掲示板に戻る 全部 前100 次100 最新50
read.cgi ver.24052200