1: ノチラ ★ 2018/04/27(金) 21:01:14.39 ID:CAP_USER
命名規則に関連するクソコード
クラス名、メソッド名、変数名などのネーミングを誤るとクソコード認定されてしまいます。会社やプロジェクトごとに多少のルールの違いはあるにせよ、どこに行っても漏れなくクソコード認定されてしまうネーミングパターンのご紹介です。

ネーミングが「記号+番号」
クラス名や変数名はわかりやすい名称にしましょう。ネーミングを見て内容を推測できるようになっていることが重要です。「記号+番号」ではそれを見るだけでは何のプログラムであるかを推測することは不可能です。

ネーミングに日本語、英語、ローマ字が混在
プロジェクトによってクラス名や変数名のネーミングルールは異なりますので、何がダメだというわけではありませんが、自由すぎるネーミングを行うのはやめましょう。きちんとプロジェクトでルールを統一することは重要です。

またにクラス名や変数名に日本語を使用することは言語仕様上可能とはなっておりますが、アルファベットを使うことが慣習となっていることと、日本語だとIDEの補完機能がうまく機能しないことがあって非効率化の原因となりますので、避けた方が無難です。

ネーミングにスペルミスがある
ネーミングでスペルミスがあると、後でソースコードから文字列で該当箇所を検索する時に検索にヒットせず、改修漏れの原因にもなります。正しいスペルと間違ったスペルが混在していたりするともう最悪です。スペルミスのないように気をつけましょう。

ネーミングに個人名が使われている
ネーミングはプログラムの中身がわかるような名前にするという観点からも、プログラムの中に自分の名前にすることは適切ではないのでやめましょう。

またソースコードレビューの時に思いがけず恥ずかしい思いをすることになるかもしれません。私は新人の時に「yonemura.sh」という名前で自分用に作ったシェルが他社に買い取られることになってしまい、他の会社のエンジニア20名くらいの前で「よねむらシェルとは・・・」と説明会で大きな声で読み上げるはめになって大変恥ずかしい思いをしたことがあります。

個人で使うプログラムでもプログラムの中身を表した無難なネーミングにしておくことを強くお勧めします。

ネーミングに番号やアルファベットの連番が使われている
クラスや変数のネーミングに、1からの連番やaからの連番を使うと、クラスや変数の中身を推測することが不可能になってしまうのでやめましょう。こういうことをすると後でそのプログラムをメンテナンスする人に、一々プログラムの処理を細かく解析することを強いることとなり、「このクソコード書いたやつまじで氏ね」と言われてしまいますのでやめましょう。

可読性に関連するクソコード
プログラムは後でメンテナンスするためにも、読みやすく書くことが非常に重要です。処理の内容だけ見ると読みやすくても読みにくくても実行される内容は同じかもしれませんが、読みやすいソースコードは改修の工数を下げますし、バグが混入するリスクも下げてくれます。

ネストが異様に深い
ソースコードの中にネストが何重にもなっている箇所があると可読性を下げてしまいます。ネストを何重まで許可するかはプロジェクトによって異なりますが、個人的には3重か4重くらいまでにおさまるようにコーディングするよう心がけていました。

これとセットで「1行の文字数は80文字まで」みたいなコーディング規約があるとさらにカオスな感じになってきます。ネストが10階層+1行80文字までとか、考えただけでも嫌になりますね。

インデントがずれている
今どきエディタが良い感じにインデントしてくれるのに、まさかインデントがずれているソースコードなんて存在しないと信じたいところですが、昔作られたソースコードだとそういう化石みたいなクソコードにお目にかかることはあるようですね。

カッコの閉じ位置のインデントがズレていたりすると、著しく可読性を下げますし、コードの解析を誤るリスクも増えてしまいます。こういうことをすると漏れなくクソコード認定されてしまうでしょう。

1つのメソッドが異様に長い
たまに1つのメソッドが異様に長いソースコードにお目にかかることがあります。私の個人的な感想だと某国にオフショア開発に出されてウミガメのように日本に帰ってきたソースコードにそういうメソッド分割の概念が消失してしまったかのようなソースコードが多いように思います。

1つのメソッドの長さが数千行にも及ぶような男前なソースコードにバグが混入してしまい、解析及び改修をしなければならなくなった時には絶望するしかありませんね。
以下ソース
https://axia.co.jp/2018-04-27

9: 名刺は切らしておりまして 2018/04/27(金) 21:30:45.55 ID:rfgO5YV4
>>1
マイクラのjavaソースなんて一発目から該当するけどなw

50: 名刺は切らしておりまして 2018/04/27(金) 22:18:09.83 ID:Os5ufWBT
>>9
難読処理をクソコードって言っちゃう奴

31: 名刺は切らしておりまして 2018/04/27(金) 22:06:16.77 ID:bipmPmmw
>>1
>「ゲッターでグローバル変数を変更している」
これの意味が解らないんですが、具体的にどういうこと?

48: 名刺は切らしておりまして 2018/04/27(金) 22:17:16.73 ID:SkldR2qv
>>31
getterって値を参照するための関数(メソッド)と普通は思うじゃん?
値を変更するのはたgetterの挙動として好ましくない

またgetterやsetterはそもそもその変数に直接アクセスされるのが好ましくないから使うテクニック
グローバル変数ならgetterやsetterを使わなくてもいじり放題じゃん?
カプセル化してこそgetterやsetterには意義がある

要するに設計としてムチャクチャってこと

66: 名刺は切らしておりまして 2018/04/27(金) 22:53:10.83 ID:bipmPmmw
>>48
>>51
>>56
レスありがとう
しかし具体的にどういう事態かやはりわからん

122: 名刺は切らしておりまして 2018/04/28(土) 02:41:39.99 ID:5UXGW+rV
>>66
副作用のあるgetter がグローバル変数を触るとこうなる

// a と b は別のインスタンスとする
// どちらも count プロパティをもっている
x = a.count
y = b.count



y = b.count
x = a.count

で、x,y の値が変わる可能性が生じることになる。挙動が全く予測できない。

51: 名刺は切らしておりまして 2018/04/27(金) 22:18:25.57 ID:3Lb6XxPG
>>31
「副作用のあるgetter」の事かと

グローバル変数がどうとか説明の方がセンスがない

56: 名刺は切らしておりまして 2018/04/27(金) 22:29:06.66 ID:Os5ufWBT
>>31
コマンドとクエリの分離原則は守ってほしい
切実に
まじで

92: 名刺は切らしておりまして 2018/04/27(金) 23:52:04.98 ID:yvIc6vNN
>>31
グローバル定義した『どこからでも参照&変更できる』変数を、何らかの理由で
ゲッター(値を参照する専用のメソッドみたいなもの)経由取得にしているのに、
何回かの改修を経た結果か、ゲッター中で参照だけじゃなくて変更してるってこと。

というか、変更されたくないグローバル変数は定義の時点でReadOnlyにするとか、
矛盾した物言いになるけど、グローバル変数は隠蔽して、ゲッターとかだけ公開するとか、
設計の時点で色々やりようがある気はする。

ちなみに過去みた中で一番恐いプログラムは六次元配列でメモリ確保していた謎コード。
しかも、書いた本人は理解しているらしくちゃんと動くところが恐い。

100: 名刺は切らしておりまして 2018/04/28(土) 00:36:34.68 ID:WXw+c5H7
>>92
抽象化が目的なんだから
意味合いがget なら、関数のなかでステータス設定等の更新しててもいい
set get =変数の更新参照でなくても良い
対象は共有メモリでもグローバル変数でもいい

>>99
行番号が小さい方が速いとか馬鹿馬鹿しい時代あったなw

118: 名刺は切らしておりまして 2018/04/28(土) 02:11:31.84 ID:LSjs9KYj
>>88 >ネーミングが「記号+番号」
防で出会った。完全に一対一で対応するフローチャートがある。

>>100
変数名の文字数が少ない方が早いとかもあった気がする

>>108
>20個グローバル変数に代入しまくりの4000行の関数。
>ただし、そのグローバル変数は他関数から全く参照されない。
デバッグ用じゃね?常に同じメモリ領域を監視すりゃいいわけだし。ロジアナでバス監視も出来る。
>呼び出し元で戻り値を参照してるが、その値は常に0。
正常は0、エラーは負。正常終了しか実装してないから0返してるんだろ。

2: 名刺は切らしておりまして 2018/04/27(金) 21:12:21.90 ID:rDOWxFeK
プロパティを自分で作れるのを知ったのが
IT土方5年目

3: 名刺は切らしておりまして 2018/04/27(金) 21:13:21.93 ID:qtGcbreb
今まで見た一番難解だったプログラムは、
GOTO文でデータ部にジャンプして、そのデータ部が実はマシン語だったケース。

8: 名刺は切らしておりまして 2018/04/27(金) 21:30:27.54 ID:XTLjeLcx
>>3
おう、すごいな。
プロテクト外し対策だな。

6: 名刺は切らしておりまして 2018/04/27(金) 21:24:25.51 ID:AIR+AZtA
メンテナンスなんてしなければいいじゃない320

7: 名刺は切らしておりまして 2018/04/27(金) 21:25:52.51 ID:UdXUF/Zo
ITドカタの世界なんて知ってもなぁ

10: 名刺は切らしておりまして 2018/04/27(金) 21:31:23.91 ID:ydDj1iFm
YAMAUCHI

52: 名刺は切らしておりまして 2018/04/27(金) 22:18:46.95 ID:OM4J6rz6
>>10
あの時代にマルチCPUってのが何気に凄かったよな

12: 名刺は切らしておりまして 2018/04/27(金) 21:44:04.73 ID:7z4yfUSZ
本文よりもコメントの方がやばいなw

13: 名刺は切らしておりまして 2018/04/27(金) 21:45:41.22 ID:X0lCWYqx
昔は日常会話の様にマシン語で会話してるヤツが居たんだが、彼らはどこ行ってしまったんだ?

110: 名刺は切らしておりまして 2018/04/28(土) 01:42:18.71 ID:QI9A4u9X
>>13
おまえ一日中0x90やなーとか

15: 名刺は切らしておりまして 2018/04/27(金) 21:48:59.26 ID:3Lb6XxPG
クソコードじゃない

ウンコードっていうんだよw

17: 名刺は切らしておりまして 2018/04/27(金) 21:52:01.28 ID:pP7lOXRp
スミマセン、クソこーど作ってしまった自覚はあります

18: 名刺は切らしておりまして 2018/04/27(金) 21:52:21.74 ID:UqO3ZrDx
氏通とかNTTとかひたちとかああいうところが一発目から該当するな
そういう話を聞いただけだがそうだろうな

19: 名刺は切らしておりまして 2018/04/27(金) 21:54:13.20 ID:CX7M9vnn
>私は新人の時に「yonemura.sh」という名前で自分用に作ったシェルが
>他社に買い取られることになってしまい

おいしいシチュエーションじゃん
仕事回ってくるかもよw

20: 名刺は切らしておりまして 2018/04/27(金) 21:54:26.53 ID:3Lb6XxPG
スペルミスは問題ないよ
全てがミスで統一されていれば

21: 名刺は切らしておりまして 2018/04/27(金) 21:55:28.37 ID:bipmPmmw
if(a){while(a){}}

22: 名刺は切らしておりまして 2018/04/27(金) 21:57:12.51 ID:J2hkwvNM
これより下にコードを書くな

23: 名刺は切らしておりまして 2018/04/27(金) 21:57:44.27 ID:vd8M08tc
どうでもいいわ。

25: 名刺は切らしておりまして 2018/04/27(金) 21:58:27.45 ID:GCbjsfRh
1行目のコメントに「触るな!!!」と書かれている

26: 名刺は切らしておりまして 2018/04/27(金) 21:58:54.48 ID:HgdK4S3U
rm -rf .*で全部消えるってほんと?

27: 名刺は切らしておりまして 2018/04/27(金) 21:59:23.43 ID:vd8M08tc
>>26
ああ、有名な都市伝説ね

28: 名刺は切らしておりまして 2018/04/27(金) 22:00:05.03 ID:wpbtqIZW
秀丸って本名?

29: 名刺は切らしておりまして 2018/04/27(金) 22:03:41.61 ID:sfHmltPT
//よく分からないけどこれで動く

30: 名刺は切らしておりまして 2018/04/27(金) 22:05:50.81 ID:9EBCJdt2
虫取り用

if 1=1 then go to 10

44: 名刺は切らしておりまして 2018/04/27(金) 22:14:50.81 ID:o0svj3fu
>>30
あー、最初につまづくパターンやねー。

でも、今の子って、最初からオブジェクト指向なの?
それすら死語なのかね?

エクセルでVBA使えりゃ問題ないから、勉強しなくなっちゃって…。

33: 名刺は切らしておりまして 2018/04/27(金) 22:07:00.24 ID:V6Hm029K
初期化と言いつつメインの処理が半分ぐらい入ってたりとか
勝手に余計な事してたりするのが一番困る

35: 名刺は切らしておりまして 2018/04/27(金) 22:08:57.66 ID:SPGoPAJs
例外処理が存在しないプログラム
変数の宣言や、型がなくても何となく動いてくれる大変便利なプログラム

37: 名刺は切らしておりまして 2018/04/27(金) 22:10:03.10 ID:sfHmltPT
//ループここから
・・・
//ループここから
・・・
//ループここから
・・・
//ループここまで
・・・
//ループここまで
・・・
//ループここまで

なおインデントなし
頭おかしくなるでほんま

38: 名刺は切らしておりまして 2018/04/27(金) 22:11:46.44 ID:lCBOv6HT
A君: とにかくコードが汚くて読みづらい。注意しても「動けば何でもいい」と言ってきれいに書こうという気持ちさえない。

B君: とにかくコードがきれいで読みやすい。同僚の書くコードに対して「そんな書き方じゃダメ」と言って細かく注意して指導してくる。

同僚にしたくないのはどっち??

49: 名刺は切らしておりまして 2018/04/27(金) 22:17:46.39 ID:k4YVJksD
>>38
B君だな。
コードのレビュー担当させるわ。

A君はウィザード級の仕事ができるかが分岐点。

53: 名刺は切らしておりまして 2018/04/27(金) 22:19:08.24 ID:03j96pSE
>>49
コンパイラが何をしているのか理解して速度重視に最適化したコードを書いた結果、読みにくくなったなら価値があるな。

141: 名刺は切らしておりまして 2018/04/28(土) 07:16:35.11 ID:7xqZZ3EZ
>>38
Aとは絶対に働きたくない、どこにでもいるタダのバカ
Bのような人は滅多にいないから、話を聞くだけでもためになる
注意を聞き入れてコードを直すかどうかは、Bの立場による
Bがただのメンバーなのかリーダーなのか・・・

147: 名刺は切らしておりまして 2018/04/28(土) 07:57:09.96 ID:mkrCgmc5
>>38
A嫌い。Bはカチーンとくるけど、クソコード書かないなら受け入れろ。

42: 名刺は切らしておりまして 2018/04/27(金) 22:14:01.00 ID:3Lb6XxPG
秀丸エディタ
サクラエディタ
を使って書いたコード

45: 名刺は切らしておりまして 2018/04/27(金) 22:15:25.72 ID:03j96pSE
組み込み系だが
どうせみんな糞コード
綺麗なコードなんて見た事ねーよ

46: 名刺は切らしておりまして 2018/04/27(金) 22:16:40.07 ID:ja8lHTmO
値切る相手には糞コード書いてメンテで稼ぐ作戦だろ

64: 名刺は切らしておりまして 2018/04/27(金) 22:45:18.01 ID:cVMy5Ye6
if文を全て三項演算子で済ます。