トップページ⇒tech
567コメント189KB

良いコードを書くためのノウハウを蓄積するスレ

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
良いコードを書きたいです。でも、書けないです。
良いコードを読めばよいと聞きますが、どれがよいコードなのか分かりません。
長くないけど、良いコードと悪いコードを比較して、わかり易く教えてください。
デザインパターン適用するといいと聞きますが、どれだけいいのか分かりません。
異常処理書くと汚くなってしまいます。
例外処理はtry{}catch(Exception e){}としてしまいます。
言語や環境、職場によって良いとされる書き方は変わります。
例えば、携帯Javaは容量を少なくするコードが良くなります。
スピードを徹底的に重視すれば、オブジェクト指向は邪魔なだけです。
関数型言語では、再帰呼び出しを使うのが上等です。
コードリーディングとか、達人プログラマーとか、
本買って読むといいらしいけど、お金ないし、
買いに行くのめんどくさいし、ウェブで見たいです。
そういうサイトつくりたいけど、頭悪くて作れません。
てことで、まとめWiki作って、勝手に書き込んで欲しいです。
トヨタ式的なものがソフトウェア産業でできてないと言うし悔しいです。
てことで、良いプログラムを書くためのやり方、良いソースの書き方を議論して、
最強のソフトウェア開発方法をまとめてください。
00021001NGNG
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
00031NGNG
とりあえず、wiki立てたいので、いいWikiと、いいサイトと、いい名前、教えてください。
0004一星 ◆Cppn/.YI3. NGNG
教えてほしいだけなら質問スレで質問してくれよ。
0005デフォルトの名無しさんNGNG
打鍵百回おのずから通づる。打つべし打つべし。
00061NGNG
教えて欲しいだけじゃなくて、まとめたいと思っています。
書き方が悪かったですかね?
一人で考えたことではなくて、いろいろな人が考えたことを、
まとめたものがないので、作りたいということなのですが。
作ったので、使ってくれって宣伝するのも嫌だし、、、。
もしそういったサイトがあったのなら、削除依頼出してきます。
00071NGNG
綺麗なソースを書くノウハウを書いてあるサイト
言語ごとに教えてください。
C,C++,Java,VB,Perl,Ruby,Scheme,
あんまし、無いと思うのだけど。

とりあえず、ググったら、こんな掲示板があったので、情報まとめてみます。
http://jibun.atmarkit.co.jp/scenter/bbs/viewtopic.php?mode=viewtopic&topic=10614&forum=21&start=0
0008デフォルトの名無しさんNGNG
キーボードに向かう前にチンコをいじって心を落ち着かせるべし。
0009デフォルトの名無しさんNGNG
【すれ立てるまでもない質問はここで 第62刷】
http://pc5.2ch.net/test/read.cgi/tech/1100963189/
0010デフォルトの名無しさんNGNG
コーディング規約はこのへんがまとまってるんじゃないか?

http://www.objectclub.jp/community/codingstandard/
0011デフォルトの名無しさんNGNG
>>10
iine
00121NGNG
http://www.hondarer-soft.com/cx/pukiwiki/pukiwiki.php?Link%2FProgram#content_1_17

ここもまとまってました。
0013デフォルトの名無しさんNGNG
この↓本では力不足ですか?

センス・オブ・プログラミング!―抽象的に考えること・データ構造を理解すること
http://www.amazon.co.jp/exec/obidos/ASIN/4774121738/qid=1102247391/sr=1-1/ref=sr_1_10_1/249-2545910-7109969
0014デフォルトの名無しさんNGNG
バグが無いのはもちろんのこと、
堅牢性、保守性、拡張性、可読性、etc.
を備えたものが良いコード。
見栄えは個人の好みもあるから、あまりうるさく言うな。
0015デフォルトの名無しさんNGNG
とりあえず>>1の「良いコード」の定義を教えてくれ
0016デフォルトの名無しさんNGNG
>>15
それを考えていきたい。
0017デフォルトの名無しさんNGNG
>>1
なんかたたき台にするサンプルコードあげろよ。
短いのでもいいからさ。
具体的なコードがあった方が話が早い。
0018デフォルトの名無しさんNGNG
実際には、悪いコードを書く奴を排除するノウハウの方が重要なのだが。
0019デフォルトの名無しさんNGNG
>>18
例えば13あたりがその対象じゃないか?
URLが
http://www.amazon.co.jp/exec/obidos/ASIN/4774121738/
までで十分だから。
0020デフォルトの名無しさんNGNG
18がうまいこと言った。
00211NGNG
たたき台サンプルコード
1 a(1,1);
2 a (1,1);
3 a( 1,1 );
4 a ( 1,1 );
5 a(1,1) ;
6 a (1,1) ;
7 a( 1,1 ) ;
8 a ( 1,1 ) ;
9 a(1, 1);
a a (1, 1);
b a( 1, 1 );
c a ( 1, 1 );
d a(1, 1) ;
e a (1, 1) ;
f a( 1, 1 ) ;
g a ( 1, 1 ) ;

コード規約、どれが一番好まれるのか?
人によってさまざまだけど、
1はスペースは入れないってことで分かる。
それ以外のスペースを入れるときってのは、
いろいろ人によって違うので合わせようにも合わせずらい。
for文はこうだとか条件によってかわると、もう全部あわせるのは不可能
00221NGNG
たたき台サンプルコード
1 a(1,1);
2 a (1,1);
3 a( 1,1 );
4 a ( 1,1 );
5 a(1,1) ;
6 a (1,1) ;
7 a( 1,1 ) ;
8 a ( 1,1 ) ;
9 a(1, 1);
a a (1, 1);
b a( 1, 1 );
c a ( 1, 1 );
d a(1, 1) ;
e a (1, 1) ;
f a( 1, 1 ) ;
g a ( 1, 1 ) ;

コード規約、どれが一番好まれるのか?
人によってさまざまだけど、
1はスペースは入れないってことで分かる。
それ以外のスペースを入れるときってのは、
いろいろ人によって違うので合わせようにも合わせずらい。
for文はこうだとか条件によってかわると、もう全部あわせるのは不可能
00231NGNG
うわ、失敗

>>18
恐ろしいけど、2chだからそれを話し合うのは面白い
でもそんなノウハウ、排除される側はたまらん

>>15
◆良いコードの定義
あたえられた条件にあっているコード
◆条件
バグの有無、堅牢性、保守性、拡張性、可読性、高速性、開発の高速性、コメントの有無

といったところですか。全部を兼ねそろえるのは無理な場合もある。
サンプルコードにはバグがあってもいいし、高速に動かなくても良いから、可読性が重視される。
開発速度が優先された場合は、スペース入れないほうが速いけど、可読性は落ちる。
自分中心に考えれば、自分が好きで使っているコーディング規約に基づいて書かれていて自分が書くよりも優れたコード。
定義とか言われると難しいな
00241NGNG
◆条件って書いたのは、条件を考えるにあたっての項目だな。
00251NGNG
Wiki立てました。構造的に問題あるので構造自体も好きに変えてください。

http://f55.aaa.livedoor.jp/~goodcode/index.php
0026デフォルトの名無しさんNGNG
>>21
おれがスペースを入れるのは
1. カンマ','のあと
2. if while forのかっこの左右
3. 2項演算子の左右
0027デフォルトの名無しさんNGNG
>>25
がんばってますね。応援age
00281NGNG
>>25
応援どうもです。
なんでもいいんでwikiに書き込んでください
0029デフォルトの名無しさんNGNG
おいしいラーメンの作り方を書いてもいいですか?
00301NGNG
>>29
それは、、、
訂正
いい方向性に向かうように、好きに書き込んでください。
0031デフォルトの名無しさんNGNG
FrontPageの電車男云々ははっきり言ってない方がいい。
必要なのはWikiの管理人がそこに書かれたテキストに発生する著作権をどうするのかというポリシー。
ここら辺あさってどうしたいのかを明記しとけ。
http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&oe=UTF-8&q=Wiki+%E8%91%97%E4%BD%9C%E6%A8%A9
0032デフォルトの名無しさんNGNG
良いコードを書くためのノウハウその1。
括弧の位置とかインデントとかそんなレベルにこだわらないこと。
0033デフォルトの名無しさんNGNG

ほれ。
http://himatsubu.fc2web.com/22/fir/ かなりシュールな心理テストでオモロイ。

0034デフォルトの名無しさんNGNG
>>33
Q3 あげまんという言葉は、いやらしい事だと思っていた。
(実は今もそう思っていた)

YES

NO

※「あげまん」とは、男をあげる(出世させる)という意味です。
〔1990 年(平成 2)発表の映画「あげまん」(監督・脚本伊丹十三)によって流行した〕



あげまんってあげまんこの略だよな?マジデマジデ
0035デフォルトの名無しさんNGNG
動くコードが書けない僕でも、良いコードは書けますか
00361NGNG
頭悪いので、TexのWikiからのコピペを修正したものを張りました。
Wikiそのままのコピペで本をだすことはしないと約束します。
0037デフォルトの名無しさんNGNG
スペースかっこ、著作権、Wikiとか
話がどんどん本題からずれていくのがおもしろい。
0038デフォルトの名無しさんNGNG
インデントはタブがいいの?
それともスペース?
00391NGNG
Wiki書き換えてくれた人がいた。
ありがとうございます。

>>37
まとめる手法としてWikiを使い不特定多数の人から書き込んで欲しいと考えてレスを立てた。
そのためには、著作権の問題も考えとかないといけないってことだと指摘されたので直したってところです。
俺はボトムアップな思考しかできないから、そうなってしまうのかもしれん。

00401NGNG
>>38
俺も教えて欲しい。

インデントは入れるほうがよい。
インデントは同じソース内で統一されているほうがよい。
統一できない場合、コミニュティ、ライブラリ、ソース、関数、処理内で統一されるとよい。
規模が大きくなればなるほど、統一が難しくなるが、いったん統一されると、変更するのは難しい。
インデントは2文字4文字8文字がよく使われる。
タブ幅のデフォルトは8文字である。
タブ幅はアプリケーションによって設定できるものとできないものがある。
タブ幅の設定も2文字4文字8文字がよく使われる。
タブ文字は使わずにスペースのみにする方法もある。
HTMLで記述する場合はタブ幅を指定できない。8文字に固定される。
タブを使うメリット
-タブ1文字で複数文字のインデントをつけることができる。
-容量を食わなくてすむ。
-タブのみでインデントされたソースは、環境を返るだけでインデント幅を変えられる。
スペースを使うメリット
-アプリケーションに左右されずに、元のイメージを再現できる。

あとは、コーディング規約による。
前提とするコーディング規約によって、
開発環境や自動整形ツールの機能も変わってくるのが現状ではないだろうか。

VC++だったりEclipseだったりすると、タブ幅は4文字、インデント4文字がいいのだと思う。
JBuilder、GNU Emacsとかの場合、タブ幅は8文字、インデントは2文字がいいのだと思う。
0041デフォルトの名無しさんNGNG
>>22
どうでもいいけど、何で f の次が g になってるの?
10に訂正してくれ。

俺は、
for(i; i<10; i++)
{
printf("%d", i);
}
こんな感じかな。
printf()の前は、タブスペース空けてる。
ってか、VC++が勝手にやってくれるからだけどね。
004241NGNG
うわっ。
半角スペース連続投稿で消された・・・・・
逝ってくる。
0043デフォルトの名無しさんNGNG
消されたわけではないが。
0044デフォルトの名無しさんNGNG
a(ONE, ONE);
0045デフォルトの名無しさんNGNG
>>1
哲学的になりますが、
そもそも「情報」って何だろう?
「情報技術」って何だろう?
といった問題を日頃から深く考えるのも大事だと思います。
より良いソースコードが書けることと、
情報という概念について自分なりの哲学を持っていることって
かなり密接な関係があると個人的に思っているので。
さすがに、言いすぎかもしれませんが。

ただ、少なくとも言えることは、
より良いコードを書くための断片的な知識をひたすら覚えていくだけでは、
絶対にプログラミングは上達しないと思いますよー。
数学の定理や公式や解法をいくら暗記したところで
数学が出来るようにはならないのと同じです。
004645NGNG
ただ否定するだけだとさすがにアレなので、
コーディング技術を上達させるための有効な手段の一つを紹介します。
というのは、正しいHTMLを書く練習をすること。
自分で何かしらWebサイトを管理している人は、
Another HTML-lint(ttp://openlab.ring.gr.jp/k16/htmllint/htmllint.html)
ダサページ(ttp://web-channel.com/tips/webdesign/MIZ/031031.html)
などを参考にしながら、また時にはWeb制作板のW3C厨に叩かれながら
自分のサイトを改善していくことで、
自然と、情報を扱うセンスが磨かれることと思います。
もっとも、Webページを作る習慣のない人にとっては
どうでも良い話になってしまうかもしれませんが。

#余談ですが、Javadocが吐くHTMLが文法メチャクチャで汚かったのを見て
#幻滅したことがあります。
#優秀なSEであることと、優秀なHTMLが書けることはまた別ですねー
0047デフォルトの名無しさんNGNG
時間だよ。とにかく時間。
時間さえあれば並みのプログラマでもマシなものが書ける。
時間が無ければ凄腕プログラマでもHACKせざるを得ない。
余裕が無いが短すぎもしない期間で寄り道せずに最適解を導けるような知恵袋はあってもいいかもな。

スペースの位置とかインデントとか、どうでも良い問題にこだわる1は一番このスレにふさわしくないと思う。
そんなものは同じ関数内ですら統一されている必要なんか無い。
その程度で読みづらいと感じるようなやつはこの業界から早々に去れ。
0048デフォルトの名無しさんNGNG
>>46
そんなのW3C勧告読めばいいだけの話じゃん。
良いコードを書く能力というよりかCで未定義じゃないコードを書く能力に近いというか・・。
最低限レベル?
004945NGNG
>>48
確かにW3Cの仕様を読めば、文法的に正しいHTMLを書けるようには
なれると思います。
ただし、重要なのは文法が正しいことではなく、
その表現が妥当かどうか(分かりやすいかどうか)、ということです。

例えば、Webページのタイトルにあたる記述は
「大きな文字を使ったパラグラフ」として表現するのではなく、
(例: <font size="+5">○○のほーむぺーじ</font>)
「見出し」として表現する、といったことです。
(例: <h1>○○のほーむぺーじ</h1>)

スレ違いなレスでごめんなさい
0050デフォルトの名無しさんNGNG
結局は文脈を読み取れる国語力が必要って事?
0051デフォルトの名無しさんNGNG
いまどきあんな時代遅れのHTMLを意味に合わせて使うなんてナンセンスだよ。
UAが正しく理解できればそれで十分。
俺は文章の論理構造はXMLで書いて、XSLTで変換してる。
変換した先がどうなってようが(それでも一応validだけど)知ったこっちゃ無い。
0052デフォルトの名無しさんNGNG
>>45
自分なりの哲学なんて邪魔なだけだ。
まずは自分を捨てるところから始めろ。
0053デフォルトの名無しさんNGNG
Eclipseのコードフォーマッタって便利なんだけど他人のソースでうっかりCtrl+Shift+FしちゃうとCVSが悲惨なことになるんだよなぁ。
コード横幅120文字に設定してるのが悪いのか・・・デフォルト80だしなぁ・・・。
自分を捨てることは必要かもしれん。
でも最近の高解像度ディスプレイで80文字は無いよなぁ・・・。
0054デフォルトの名無しさんNGNG
Pythonコーティングスタイルガイド

ttp://www-acc.kek.jp/WWW-ACC-exp/KEKB/Control/Activity/Python/doc-j/pep-0007-J.html
ttp://oldriver.org/python/pep-0008j.html
0055デフォルトの名無しさんNGNG
どうせ書くならwikiに書き込めよ。このチキン野郎
0056デフォルトの名無しさんNGNG
>>40
>HTMLで記述する場合はタブ幅を指定できない。8文字に固定される。

<pre>では、タブは使わないのが推奨されてなかった?
0057デフォルトの名無しさんNGNG
興味アル方メールください

業務内容
サーバ・アプリケーションの設計・開発・運用・保守管理などの業務に取り組んでいただきます。
資 格
学歴不問25〜40歳位迄、下記項目中2項目以上の経験者が望ましい。


Java開発経験者(Tomcat等のJakarta Projectを利用した開発)
DB開発運用経験者(Oracle,PL/SQL,Pro*C,MySQL,PostgreSQLを利用した大規模DBの運用・開発経験者)
Linuxサーバの構築・運用経験者(bind,sendmail,qmail,ネットワーク一般、セキュリティ設定等)
システム開発プロジェクトマネージャー経験者


勤務地
東京都渋谷区
0058デフォルトの名無しさんNGNG
ここで募集しても糞しか集まらないよ
00591NGNG
>>54
情報サンキューです。
Wikiに反映しときます。
>>55
Wiki重かったりするし書き方分からないのかもしれないし情報いただけるだけで助かります。
てか、55がWikiに書き込んで欲しかった。
00601NGNG
>>40
そうですね。IEだと文字のサイズ変えても固定ですしね。

>>47
条件しだいで、良いコードの定義は変わると。
時間がない場合は、インデントにこだわらないほうが良いし、
保守する場合、diff取ることを考えると、インデントを変えるのはいけないことだろうし。
でも、テストケースが完璧にそろっているならば、インデント変えても大丈夫なはずですし。
でその条件を与える項目の一つとして、インデントやスペースがあると思うのですが。
書き方は基本的なことだし、初心者でも分かりやすいことだから先にまとめとこうと思ってるんです。

俺の批判よりコーディング規約以外の一番重要はものをどう考えているか教えてください。

インデントうんぬんで文句言う奴がいたら、自動整形機能使って渡せば議論しなくてすむし。
00611NGNG
Javaアプレットで自前アルゴリズムで3D描画するプログラム
http://homepage1.nifty.com/open-prog/
http://homepage1.nifty.com/open-prog/java/index.html
ここのコードは綺麗でよいと思ったなぁ。
0062デフォルトの名無しさんNGNG
>>60
Python はインデント変えると動かなくなるんだよ
0063デフォルトの名無しさんNGNG
>>61
おれもプログラミングを始めたころに読んだけど、読みやすかった。
0064デフォルトの名無しさんNGNG
>>47さんに賛成です。

software designに連載されていた。
コードデザイン最前線(http://homepage2.nifty.com/yamazaki/)
を読んでみて下さい。

0065デフォルトの名無しさんNGNG
http://pc5.2ch.net/test/read.cgi/tech/1044457085/
0066デフォルトの名無しさんNGNG
>良いコードを書くためのノウハウ

 公開されているソースコードを読むとよいと、何度か聞いたことがあります。
どのソフトのソースを読むかについては、
・自分のパソコンで動かすことが出来て
・興味のある分野で
・定評のあるソフト
がよいかも。
言語好きなら、Rubyのとか。
ゲーム好きなら、DOOMのとか。

サンプルプログラムの類からは学べない、
プログラムを破綻無く書くためのノウハウがつまっていると感じました。
いくつか読んで、一般的に言えそうなのは、
(注:C言語の場合)
・関数は、思っていたよりも、短いものばかり
・マクロを巧みに用いて、抽象度を高めている(そのぶん、最初は挙動を追いにくい場合も)
ことなど。なんか、ソフトの動作の複雑さに比して、ソースはあっけない
くらい、あっさりとしていることが多いです。

コーディング規約のようなものは、読むソフトごとに様々で、
統一さえされていればよいのではと思いました。
0067デフォルトの名無しさんNGNG
 達人のソースコード読んだあと、ふと、自分の書いた
コードに目をやると、なんでこんなにごちゃごちゃしてるんやろ、と思う。

たぶん、良いコードを書く「ノウハウ」のようなお手軽な
ものはなくて(良い小説を書くノウハウがないのと同じように)、
ひたすら書き続けるなかで、10年ぐらいかけて、身に付ける
もんじゃなかろうか。

デザインパターンにしても、例外処理にしても、いざ書こうとすると、
なかなかうまく書けなかったりするし。

がんばろ。
0068デフォルトの名無しさんNGNG
 とはいっても、良いとはいかずとも、バグを見つけ出し
やすいコードを書くノウハウはあると思います。

C言語の場合、使わない人もいますが、assert()が重宝します。
いろいろな場所で、暗黙の仮定をassertしておくと、
一部の関数の仕様変更などで、誤って生じた境界条件での
ロジックの乱れを、掬い出してくれます。
コードが自らバグを表出してくれる感じがよいです。

C言語が使えるところなら、どこでも使えるというのもよいです。
0069デフォルトの名無しさんNGNG
Effective C++ とか読むといいとおもう
今更だけどEffectiv C も書いてほしいなあ…
0070デフォルトの名無しさんNGNG
Effective〜っていうプログラミング指南書は全然役に立たない俗本。
0071デフォルトの名無しさんNGNG
>>70
Effectiveってつく本を何冊読んだのか知りたい。
0072デフォルトの名無しさんNGNG
>>70
少なくともEffective C++は読んだんだろうな?
0073デフォルトの名無しさんNGNG
「関数内関数」使っちゃったw
int func () {
 struct local {
  static int func() { return 0; }
 };
 return local::func();
}

コードレビューの時にどんなツッコミが来るか、ドキドキだwwうはwwおkwww
0074デフォルトの名無しさんNGNG
>>72
当然でしょ。
Effectiveのつく代表的な著作じゃない。
0075デフォルトの名無しさんNGNG
>>74
それを「全然役に立たない」と断じる根拠を知りたい。
0076デフォルトの名無しさんNGNG
>>75
全然役に立たないというのは言いすぎだったかもしれないけれど、プログラミング
してきて、ある程度の経験値を持っている人なら、書いてある内容に同感する部分
もあるだろうけれど、読んでいて、「やっぱり、そうだよねー」っていう感じで
世間話をしている感覚。
当然、(Mayersに対して)「う〜ん、そこまでしなくても…」と思うこともあれば、「あ、それはいいね」と思うこともある。
でも、まぁ、大体は、自分のスタイルに従うからあくまで世間話だね。
0077デフォルトの名無しさんNGNG
>>76
まぁ、エキスパートの人にはそうかもしれないが、CからC++に
移行してきて文法に振り回されてる人には、お勧めできるガイド
ラインだと思うんだけどなぁ。要は対象読者による、でしょ。

対象読者が誰であれ、お勧めできない本は他にいっぱいある気がする…。
ちょっと話ずれてスマソ
0078デフォルトの名無しさんNGNG
>>76
対称読者を間違えてる。
本来経験から得る知識を金払うだけで得れるんだからすばらしいじゃないか
0079デフォルトの名無しさんNGNG
>>77
そのあたりのことは全部見越して、>>70の発言なんじゃないか。
ようは、なんの脈絡もなく、「おれはすごい」って自慢できるきっかけを見付けたから
それに食いついただけでしょ。
0080デフォルトの名無しさんNGNG
できるだけコード量が少なくなるようにして、
メソッドの数をできるだけ少なくして
クラスはできるだけ作らないようにして
シンプル命でリファクタリングしつづけるだけ。

とにかく素早く頭働かすことだな。
時間かかるように見えて、リファクタリングすることが結局、一番早い。
そのうえで、これ以上早くするとなると、素頭の、完成形までのイメージをスムースに描ける
ストーリ構築力というか、国語力みたいなものが問われるな。これは才能の部分が大きいかもしれん。
もちろん、鍛えることは可能だと思うけども。
0081デフォルトの名無しさんNGNG
結局、メンタルの健康が一番大切なのかもしれん
己を知る
体を動かす
寝る
いいもの喰う

それでいいじゃん
0082マイク ◆yrBrqfF1Ew NGNG
まあ2chに入り浸るようなのじゃいくらノウハウを蓄積したところで
変わりはしないんだがな。
0083デフォルトの名無しさんNGNG
>>66
思っていたよりもってゆーか、関数は長くても一画面に収まる程度が望ましいんだけどね。
大半は数行から十数行程度で。
短い関数=良いコードといっても過言ではないくらい重要だね。
現実的には手を抜いてしまいがちだけど。
C++だとprivateな関数増やすだけでヘッダの書き換えが必要になるから、なかなか厳しい。

自分で作ったメソッド名を他人に変更してもらうと分かりやすいコードが出来上がる。
独りよがりになりがちだからね。

Javaだけど俺がメンテしててこりゃ駄目だと思ったコードは
・メソッドが長い、数百行ある。
・メソッド名が正しくない、やってることと名前が全然違う。
・入力専用のはずのパラメータを平気で書き換えている。(結果自爆したり呼び出し元で惨劇)
・クラスは継承しない。
・メソッド、フィールドは全てstatic。
・ローカル変数は全部関数冒頭で宣言する。
・変数はいろいろな意味に使いまわす。
・抽象化がされておらず、似たような処理がいろいろな位置に散在して、異なる方法で実装されている。
・意味の無いコメントが目立つ。(例: boolean succeeded = false; // 成功したか)

これを反面教師にして、逆のコードを書けばちっとはマシになるだろ。
0084デフォルトの名無しさんNGNG
関数とメソッドってどう違うの
クラスのメンバ関数=メソッドでOK?
0085デフォルトの名無しさんNGNG
>>79
ひねくれているなぁ。
0086デフォルトの名無しさんNGNG
>>83
> 思っていたよりもってゆーか、関数は長くても一画面に収まる程度が望ましいんだけどね。
ここで言う一画面とはどの程度を指すんですか?
Unixターミナルのように80x24=1画面を基準とする?それともSXGAでEclipse標準フォントを使った
場合の約120x50を基準とする?
0087デフォルトの名無しさんNGNG
別に、メソッドは短くする意味がなければ長いままのほうがいいよ。
なんでもかんでも短ければいいっていうもんじゃない。メソッド増えるのキモいし。
長いメソッドのときは、まとまった処理ごとに適切なコメント入れればいいと思うね。
メソッドを定義したのと同じ表現力が得られる。
0088デフォルトの名無しさんNGNG
>>87
そのコメントをメソッド名にして切り出すべきだと思うんだけどね
0089デフォルトの名無しさんNGNG
>まとまった処理ごとに適切なコメント入れればいいと思う

もはや説明が必要な時点でNGだろw
0090デフォルトの名無しさんNGNG
一つのメソッドは30秒以内に理解できるものでないといけない
0091デフォルトの名無しさんNGNG
>>90
読む奴が無能ではどうしようも無い
0092デフォルトの名無しさんNGNG
>>88

他で使いまわしたくなったりオーバライドが要るときになったらそうする
(シンプルにしてれば簡単なはずだ)

一つのメソッドからしか呼ばれないメソッドってアフォでしょ。定義する価値なし。
0093デフォルトの名無しさんNGNG
>一つのメソッドからしか呼ばれないメソッド

長いメソッドをそんな風にしか分割できない時点でNGだろw
0094デフォルトの名無しさんNGNG
>>92
構造化プログラミングを勉強しなおせ。もしくはCOBOLでも使ってろ。
0095デフォルトの名無しさんNGNG
メソッドを無理やり短くするほうがいかんと思うけどね
短くなって複雑になるくらいなら長いままにしておいたほうがマシ
いい方法が見つかった時に短くする。
0096デフォルトの名無しさんNGNG
複数の条件判定の上で処理する場合、出来るだけネストを深くしないように
ループの場合はcontinue、ifやswitchの場合はその部分を関数に切り出して
returnさせるようにしてるんですが、こういうのってどうなんでしょ?自分では
読みやすい(コメントも付けてるし)良いコードだと思ってるんですが、読みにくかったり
するんでしょうか?

for (SmplCls hoge in arg) {
    /* expr1がfalseの場合をふるい落とす */
    if (!hoge.expr1)
        continue;

    /* expr2の文字列をチェック */
    if (!(hoge.expr2 == "hogestr")
        continue;

    /* expr3が限界値を超えていればふるい落とす */
    if (limit < hoge.expr3)
        continue;

    /* 実処理 */
    /* ... */
}

どうせならループの場合も関数に切り出したほうがいいかとも思うんですが、結局
エラー・例外処理が絡んできて値を返し、呼び出し元で分岐させなければならなく
なるのでそこまではやってません。
0097デフォルトの名無しさんNGNG
短くして複雑になるのは短くするやつが低脳なだけだろ
0098デフォルトの名無しさんNGNG
条件を適当に付け加えたので括弧を入れ忘れました
-    if (!(hoge.expr2 == "hogestr")
+    if (!(hoge.expr2 == "hogestr"))
0099デフォルトの名無しさんNGNG
>>96
脊髄反射でレス
コメントが必要だと思ったらその時点で駄目なコードだと思え。
0100デフォルトの名無しさんNGNG
>>99
そりゃ言いすぎだ。趣味でやってるなら許すが。
0101デフォルトの名無しさんNGNG
>>99
そういう通念をヘタに浸透させると、ダメなコードでもコメント入れない奴が
量産されるから、公の場では言わないように。
■ このスレッドは過去ログ倉庫に格納されています