OOコード養成ギブスのコメント欄の和訳

OOコード養成ギブス - rantsという記事より、あまりにも原理主義的っぽいので賛否があるだろうなぁと思いつつ、元記事のコメント欄を読んで、途中まで和訳してみた。

パッと見では、論点はぶコメとあんまり変わんないですね。

31 comments...

Binstock on Software: Perfecting OO's Small Classes and Short Methodsのコメント欄より。

Anonimous said...

http://paulgraham.com/noop.html の§3を思い出した:

オブジェクト指向プログラミングは仕事に見えるモノを増やす。連帳用紙時代を思えば、1ページに5〜10行のコードしか書かず、その上に20行の仰々しい形式のコメントを残すようなプログラマーのタイプもいた。オブジェクト指向プログラミングはそんな奴らをクラックする感じだ:全てのscaffolding(足場)を君のソースコードの思い通りに盛り込むことができる。ちょうど、Lispハッカーがシンボルをリストにプッシュするだけでクラスやメソッドが出来るようなものだ。つまり、君がどれだけ仕事をしてるかを他のメンバーや君自身に納得させる、良いツールだ。

そんなやり方の1000行プロジェクトは、400行でもっと使いやすいやり方で簡単に書き直せるはず。制約が少ないオブジェクト指向手法(例えばelseを使ったり、メソッド内でループを使ったり)で。Pythonなら150行で書けるだろうし、Lispなら80〜100行で書ける。あれ?プロジェクト全体が1〜2画面に収まるんじゃね?もちろん、難しいことは何もなしで。

一見もっともだけど実は根拠が薄い、匿名さんのご意見。

akuhn said...

グレート・エクササイズ!うちのChallenge #1 of our programming II lectureを思い出した:
http://www.iam.unibe.ch/~akuhn/p2/2008/03/p2-challenge-1/

「Challenge #1 of our programming II lecture」とは、if無し、1メソッド1行で指定されたinterface(キュー)を実装しろという課題。スイスのベルン大学、応用数学研究所のソフトウェア設計グループの博士課程の人。

Tom said...

練習にはいいね。制約が良い(少なくとも以前に比べれば)オブジェクト指向の実践を採用に役立つのがわかる。

9.の「setter, getterを使うな」には全く同意できない。俺は常に使え派。nullに対するエラー処理とかの、バリデーション用コードを1箇所にまとめるのは常識だろ。

IOC?みたいなのを使うと、getterを使ったバリデーションと同様に、SpringXMLが正しいか、必要なものを全部インジェクトしているかの正当性チェックしてくれる。

あと、getter無し(で、属性はprivateと仮定)なら、継承クラスでgetter機能をどうやってオーバライドする?"public"って単語を書き忘れてるんじゃない?9.は「publicなgetter,setterを使うな」じゃなく?それなら、命名規約を変えなきゃいけないかな?;-)

IOC〜の一文がわからない。IOCってフレームワーク?Tomさんは最近子供が生まれたそうです。

Daniel Lucraft said...

ちょっと待て。メソッド内で1レベルのインデントしか使えないなら、if文は使えないんじゃ。2レベルってことじゃなく?

Daniel Lucraft said...

全体的にはいけてるけど。

フォローを忘れないが、そもそもお前がちょっと落ち着けという感じのダニエルさんの連投はロンドンから。

ted stockwell said...

多分、初心者には良いルールじゃないかな。それか、関係ない類のコードが詰まった1000行メソッドを書くようなダメなコードを書くような奴には。でも良いコーダとっては、そんな制約を闇雲に採用すると、せいぜい普段通りのコードになる程度、ほとんどは普段ほど良いコードにはならないかと。

良いコードは凝集と疎結合だ(この記事には良いコードの定義はないけど)。凝集と疎結合でコードが書けたと仮定すると、読みやすいだろうけど、挙げた制約に幾つか違反する(しかも、良いコードはそれらの制約に良く引っかかるし、コーダは自由裁量が好きだし、良いコードだという証拠なしで?)。そんなコードを書き換えるなんて、良さが失われるというか、良くなることはない。

初心者を良いコーダに育てたいなら、単純にルールを与えるんじゃなく、コードを良くするための原則を教えたり、日常的なコードレビューの方が上達するんじゃないかな。

「凝集と疎結合」でよかったっけ?用語的に。

Anonymous said...

いいと思う。俺はOOPで頭がいっぱいで、コードを上達するアイデアを探してたけど、すごく参考になった。
ありがとう。

Anonymous said...

何の冗談?:D
お前がその制約で100000行で書いたなら、普通は2000行もあれば十分。

美しいほどに対照的な匿名コメント。

Anonumous said...

思いついたけど。
インスタンス変数を2個以上使うな」

class Point3D {
    int x,y,z;
}

o.O

o.Oは顔?

Dan said...

zipコード(郵便番号)をintegerで管理する理由は?zipコードを計算に使う?zipコードをオブジェクトとしてカプセル化するのは同意するけど、zipコードはStringであるべきだし、ISOの国コードのプロパティであるべき。国によって形式が違うから、バリデーションも変えなきゃいけないし。
と言ってみるテスト。

コードは数字ではない派で、ごもっとも。日本人なら郵便番号はStringで管理するだろね。ダンコーガイ... just sayin'.

Anonymous said...

わかってない奴がいるな。売り物のコード全てにこれらのルールを厳格に適用するべきなんて誰も言ってない。コードの構造を見直して、現実に使うコードを書くときにちゃんとしたオブジェクト指向癖をつけるための、練習だろ。

Anonymous said...

売り物のコード全てにこれらのルールを厳格に適用するべきなんて誰も言ってない。

俺から見れば、最後の段落でそう言ってるように読めるけどな。
擬似コードで10万行のプロジェクトなんて見たことない…

「誰も言ってないだろ」系の断ち切りコメントと、いやそう読める系のコメントの応酬。

続きは

あとで書く。かも。