ふざけた変数名を使う奴
■ このスレッドは過去ログ倉庫に格納されています
>>745
標準関数に合わせてtarget, srcにする >>746
それは正しいのかもしれないが、回答としてはちょっとずれてる。 中途半端に天邪鬼な俺は、
「fooとかbarとか使いたくねえな」
と思ってpooとかparとか使ってる。 そりゃどっちがソースでどっちがターゲットかが構造だけで
明らかになるなら名前なんて余計だけど、いつもいつもやってられん。
命名法はルールだけでいつでも実践できる。 アセンブラだとsrcとdstの順番は言語仕様として決まっているが、
nasmとgasでその並びが真逆だという。 >>748 の使う poo は
実に適切な名前だと思う。 energy = mass * (speed_of_light * speed_of_light)
より
E = mc^2
の方が直感に響くような気がするな メソッド名の頭に全部fuckって付けてまわってたら怒られた・・・ >>751
俺は(今は)pooじゃないぜ。parだけど。 >>745
結局これはなんだったの?
src, targetとかfrom, toみたいに順序が明らかなのに名前つけるのが冗長ってこと? >>755
> bool func〜(string sourceString, string targetString);
こういう形式にしてしまうと、意味を名前に求めることになるから、ほかの構造を考えよう
ってことじゃね?
>>749が反論してるが。 ほかの構造を考えるための工数を出してくれるんなら、いくらでも考えまっせ。 >>757
100円やるから、
bool func〜(string sourceString, string targetString);
の適切な構造ってのをプリーズ。 昔(20年ほど前)、変な後輩の新人君がいた。
ホストのTSSで待機ジョブに「KOKINJI」てジョブIDがあったから
「○○君、このジョブ名は?」って聞いたら
「それは秘密です」
しばらく意味わからんかった。桂小金治のこととは。
一見、真面目そうに見える子だったんで、
「なんでこんなジョブ名にしてるの?規約に従わんの!?」って聞いたら
「命名規約に沿ったら全部同じに見えるから、自分のジョブが目立つようにしたんです!」ってマジレス。
ああ、ただの馬鹿じゃないなと。 Cからプログラム始めたのになんで自分はハンガリアン大好きっ子に育ったんだろう
昔書いたソースをメンテしてる人に申し訳ない
今はpooだけど 「自分のジョブ」を目立たせようとしたのはナゼなんだ? 本番に乗せる前のテストだったんだろ。
なら何でもいいな。自分が判りやすければ。 変数名を考えるのがじゃまくさい
なんとかならんのか >変数名を考えるのがじゃまくさい なんとかならんのか
俺の場合、画面表示だったらDispなんとかになる。その関数はDsip**となる
俺は関数一覧を使うが、そこにDisp**がずらりと並ぶ。そこから目的の関数名をつかむ
でも、作業が進むと関数が増えてくる。
すると、表示クラスが独立させるわけよ。
しかし、相変わらずそのクラスの関数群はDsip**のままだな >>772
典型的な間違ったモジュールの分け方してそうでワロタw
間違った分け方をしている奴は真逆に分ける。
たとえば「○を表示する。」だったら、
○でグループを作るのではなく表示でグループを作る。
なんとかの表示、なんたらの表示、表示、表示、
そして表示を担当するモジュールが出来るwww
真逆だよ真逆。 >>773
そっちのほうが合理的だと思うんだけどダメなのか? >>774
関数が多くなってくる時、関数名を覚えきれない。
で、あの処理する関数名なんだったけーとなる。
命名のしかたは、探しやすい、かだな
ソースの保守がしやすいというのが基準 普通は処理内容じゃなくて処理対象で分けるだろ
それがオブジェクト指向なんだから >>774
最近俺もわかったことなんだけどね。
正反対に実装する奴が多いこと多いこと。
Aに関する表示、Bに関する表示、Cに関する表示、
これらを一つのモジュール(ファイル)にまとめる考え方だと、
今度は
Aに関する入力、Bに関する入力、Cに関する入力、
という風にモジュールにまとめる。他にも処理ごとにまとめたモジュールが出来るだろう。
そうすると、次にDに関する処理が増えた時、表示モジュール、入力モジュール
なんたらモジュールっていう風に、複数のモジュールに処理を追加することになる。
逆に消そうとした時、複数のモジュールから○に関する処理を探しだして消さなきゃいけない。
システム全体に散らばった、○に関する処理をあちこち探すはめになる。
追加削除はあまりしないとしても、デバッグの時に○に関する処理をあちこちと。 Aに関する表示、Bに関する表示、Cに関する表示、
これらを一つのモジュール(ファイル)にまとめる考え方をしていると
でてくるのが、似たような処理はまとめようといういうもの。
一見良さそうに思えるが・・・。
Aに関する表示、Bに関する表示、Cに関する表示、 に
共通する部分をルーチンにまとめる。
「Aに関する表示、Bに関する表示、Cに関する表示」 + 共通ルーチン
本来、AとBとCは全く無関係なのに、処理の内容が似ているからという理由で
共通ルーチンが作られる。そうすると、その共通ルーチンでAの場合だけ
必要な処理が出来た時に破綻する。
何が起きるかというと、共通ルーチンに変なフラグを追加される。
「共通ルーチン」の中に、Aの場合だけ必要な処理、つまりif A thenというコードが追加される。
同様に、Bなら、Cなら。それはもはや共通ルーチンではなくなる。 ただしいモジュールの分け方をしていれば、
処理の、[START] → から → [END] までほぼ一本道。
つまり、Aの処理しか行わない道になるから、
この道を修正しても、BやCに影響ないことは明らかになる。
真逆ののモジュールの分け方をすると
┌───┬───┐
[START] ─┬───┴┬──┴──┬┴───[END]
. └────┴─────┘
この中から正しいAの道はどれかな?みたいなことをするハメになる。
どれが共通の部分で、どれがAのコードかわからないから、
しだいに共通らしき道に「if A then」が増えていき、
すべての処理がごちゃごちゃ混ざりまくる。 >>779,>>781で書いたことをもうちょっと丁寧に書くと、
真逆のモジュールの分け方をしている奴の開発の流れはこう。
1. まず、Aの処理を作る。そのコードの量は適当でいいが500行ぐらいとしよう。
2. 次にBの処理を作る。似ているからAの処理をコピペする。
3. そこで少し力がついた初心者は、コピペするのはよくない、AとBは
似ているからまとめるべきだ。という考えになる。
ここまで来た典型的なコードは
Aの前処理 → 約400行の共通処理 → Aの後処理
Bの前処理 → 約400行の共通処理 → Bの後処理
というようになる。
(この共通処理というのは、AとBの共通の処理であって、汎用関数ではないことに注意ね。)
次に少し似ているCが加わる。だいたい似ているが、共通処理でやる内容が少しだけ違う。
Aの前処理 → 約400行の共通処理 → Aの後処理
Bの前処理 → 約400行の共通処理 → Bの後処理
Cの前処理 → 約400行の共通処理 → Cの後処理
「約400行の共通処理の内訳」
AとBの共通処理 → C専用の処理 → AとBの共通処理
そしてD,Eと増えるたびに
「約400行の共通処理の内訳」
全ての共通処理 → AとBの共通処理 → C専用の処理 → D専用の処理 → 全ての共通処理 → AとBの共通処理 → AとDの共通処理
みたいにカオスになる。
おいEはいったいどの部分が実行されるんだよ? ってなっていく。 さらにコードがの行数が増えていくと関数に分けようと考える。
「 約400行の共通処理」はもはや「4000行のA〜Eの処理が絡みあった処理」になる。
さあ、長くなったから関数に分けようか。
Aの前処理 → 約400行の絡み合った入力処理 → 約400行の絡み合ったメイン処理 → 約400行の絡み合った出力処理 → Aの後処理
Bの前処理 → 約400行の絡み合った入力処理 → 約400行の絡み合ったメイン処理 → 約400行の絡み合った出力処理 → Bの後処理
Cの前処理 → 約400行の絡み合った入力処理 → 約400行の絡み合ったメイン処理 → 約400行の絡み合った出力処理 → Cの後処理
:
そして次に入力、他、出力を別モジュールに分けようとしだす。
Aの前処理 → 入力モジュール → メインモジュール → 出力モジュール → Aの後処理
: (以下同)
そして出来上がるのが、各モジュール(ファイル)に含まれた、if A thenの嵐
広大なシステム全体から、Aに関するコードを探し出さないといけない。
Aに関する処理をあちこちにジャンプして調べることになる。
共通と思われるコードを修正した時、それが本当にB〜Eに影響しないのか?と考えることになる。
これは、実は、コピペしてAの処理だけで終わるコード、よりも悪い結果になっていたりする。
(もちろんコピペはダメ) じゃあ何が正しいんだよ?と言われそうだから
どうするのがいいかも答えよう。
1. まず、Aの処理を作る。そのコードの量は適当でいいが500行ぐらいとしよう。
2. 次にBの処理を作るがここからが違う。
長いと思ったらAの処理のダイエットすること。
AとBの内容が似ているからといって、まとめるのではなく、
Aの中から汎用関数、つまりそれはAやB以外でもまったく別のプロジェクトでも
使えるような汎用関数。一つ一つはとても小さな処理になる。
そうするとAの処理はかなり少なくなる。
Bの処理ではもちろんその汎用関数を使って書くからAと同等に短くなる。
一見似ているように思えるが、汎用関数あるため、その処理にAやB特有の
コードが入る余地はなくなる。
そうやってコードが長くなるたびに、汎用関数に追いやってA処理を短くしつつ
処理を増やしていく。そしてこのAの処理は決してB〜Eと混ざることはない。
Aの処理には入力、メイン、他、出力の処理が一直線に並ぶ。 >「 約400行の共通処理」はもはや「4000行のA〜Eの処理が絡みあった処理」になる。さあ、長くなったから関数に分けようか。
400行の共通処理はありえんだろう。その時点でスパゲッティ。
25行の関数に分けてあるなら理想的。
で、4000行からは、1000行のクラス(関数の集まり)を作っていくわけよ
>そして出来上がるのが、各モジュール(ファイル)に含まれた、if A thenの嵐
お前の言う処理は400ぎょうもある。そうなら、嵐になるといっていい。
お前は、ネストを深くしない、と考えたことないだろ。
ネストが深けりゃ読みにくいのは当然 ネストを深くしないということは、こういうことだな
Disp(){
int a;
for( int i = 0; i< 10; i++){
DispA(&a, i);
for( int ii = 0; ii< a; ii++){
DispB(ii);
}
: (以下
}
} 上のは読みにくいからこのように変える
Disp(){
for( int i = 0; i< 10; i++){
DispSub( i);
}
}
//Disp関数のこども
DispSub(int i)
{
int a;
DispA(&a, i);
for( int ii = 0; ii< a; ii++){
DispB(ii);
}
: (以下
} 関数名や変数名にはくどいぐらい説明的な名前をつけておいた方がいい
書いてる時は冗長だなと思ってもプロジェクトがでかくなると1週間前に書いた部分ですらいまいちピンとこなくなる メソッド定義のところの引数名は辞書引いてすごい長ったらしい名前つけてるけど
中の変数とかはぐちゃぐちゃだな
世間と逆なんかしらん スコープが小さければ短い名前で良い。
スコープが広くなければなるほど長い名前。
もちろん、名前空間やクラスがあれば、その分短くて良い。
って考えると、関数の頭で宣言するやり方は
スコープが広いから、長い名前になりがちで
使う直前に宣言しましょうってなる。 80年代の頃は
変数にakinaとか使うバカがいたなw >>791
> つか、書き出す前にちゃんと設計しろよ…
その発想はウォーターフォール型だぞ。
ウェブアプリとかリリースサイクルが短いソフトとか
頻繁にバージョンが上がっていくタイプだと
最初に設計をしておくのは無理。
常に小さな再設計をし続けないと破綻する。 >>793
こういうアジャイルを勘違いしているバカがのさばっているので
ウォーターフォール厨のバカ上司がアジャイルを誤解していって
どんどん環境が悪くなる メンバ関数の名前なんかは、grep 検索の際の利便性を考えると、
たとえ クラスが別だから同じ名前であってもいい場合でも違って
いた方が便利な場合も有るかも。 ごめん。
「バカ」な人が必要ないのではなく、「バカ」だと書く必要が無い
という意味だけど。 >>58
一瞬どこがマヌケなのかわからなくてドキッとしたが
さすがにこれは無いわ if (result == true) {…}
は結構みるなぁ。な そういう話じゃないんじゃ?
public String func(XXXXXXXX){ ← 8文字
if(XXXXXX){ ← 6文字
return "false";
}
return "true";
} >>800
{}の中身が a=true; でelseの中身が a=false; だろw >{}の中身が a=true; でelseの中身が a=false; だろw
おめーは、北京原人か? 下記は正常に動作しているコードの一部である。
if (result == true) {
…
}
これを次のように修正しても、異常をきたす事は無い。
if (result) {
…
}
正か誤か。
java初心者向けの問題。 >>806
こういう問題を言っちゃう奴はコミュ力が無いんだと思う。
可読性かシンプル化でどちらも間違いではないし。 いや、そういう問題じゃ無いってw
プログラムが(必ず)正しく動作するか否かの問題。 それは上の方が必ず動くよ。
下は上までの肯定でresultに変なもんが入ってたらヤバいだろ。 if (result == true) {
の形は、
if (result = true) {
と間違えてもエラーが出ないからあまりお勧めしない。
コーディング規約で禁止した方がいい。 >>816
Javaって>>814でwarningも出してくれない欠陥言語なの? >>818
(a = 3)の値は3なんだ。
同様に、
(result = true)の値もtrue。
式の評価がそうなってるんで仕方ないというかなんというか。 >>806
Javaのバージョンで多少ハナシが変わるね。
最新なら実行時エラーの可能性。
ちょっと古いとコンパイルエラーだな。
さらに古い場合は問題無しw wrok、cunt、befer、strFragが4傑かな
あと、RDBで表定義のnをnumberに一括置換したらしく
列名がすべからく
hoge_name→hoge_numberame
になってたのもヤバかった 変数じゃないけど
コメントの自分の名前に勝手なミドルネームを入れる人がいた
「何コレ?」って聞いてみたら
「イギリス人の友人が僕をこう呼んでいるんです」
という返答だった >>819
まともなコンパイラなら if( foo = true )は ==と間違えてないすかって警告がでる メソッド名だけどcheckParam(〜)でbooleanを返すのはアリ? オブジェクト指向ならメソッドでIsParam()にするべきでは
他は知らん そーね。うちの規約だとisValidParamになるとおもうんだけど
ぶっちゃけcheck〜のほうが分かりやすいと思うのよね
規約破ってまでこだわることでもないんだけど 適切なメソッド名が決まらなくて、とりあえず書き始める時、
だいたい nekoで始める俺
もし最終的なソースコードにnekoって見つけたら、俺が書いたのだからヨロシク bool flagBufferTransportationIsAboutToFinish;
bool flagBufferTransportationIsFinishing;
bool flagBufferTransportationHasBeenFinished;
bool flagBufferTransportationFinished; それらのステートを識別する必要があるにしてもboolはないなぁ enum flagBufferTransportation : bool {
IsAboutToFinish,
IsFinishing,
HasBeenFinished,
Finished,
}; void serchKekkaGet();
今時こんなのが一箇所でもあったら、プログラム全体の質を疑う 俺の会社のvbaマクロとか酷いぞ
sub 図の1つ下のデータを計算(data as Variant)
こんなんだから
1.日本語関数
2.何する関数か推測できない
3.private publicがない
4.引数が汎用型
最悪だよ >>839
2.以外は別に問題ないんじゃ?
1.日本語だと何が問題?
3.VBAには『Public』『Private』『指定なし』の3種類があって、これはその一番最後というだけの話だが、何が問題?
4.引数がVariant型だと何が問題? >>835
> こんなのが一箇所でもあったら
他の部分が完璧で、一箇所だけがそれだったら、笑うしかないな。 >>835
「よっしゃー、サーチ結果ゲット!」とか言いながら書いたに違いない >>840
1.
日本語だと海外のwindowsで動作しない。
理由はVBAはunicodeじゃないから
2.
moduleも一切認めたくない派の俺は
基本的に省略表現はバグの元だから許さん
3.
variant型ってのはC#でいうならObject型だろ
よくわからんけど何でも入る変数にぶちこめというのは
VBerがよくやる悪習だと思う。
関数の入力はそれが不可能で無い限りにおいて
引数の型は厳格にするのは当たり前。
そもそもコメントが不足してるコードで曖昧な型宣言されると
修正が難しくなるんだよ。 >>844
>variant型ってのはC#でいうならObject型だろ
ここもしかして笑うとこ? ■ このスレッドは過去ログ倉庫に格納されています