1: 稼げる名無しさん 2018/04/27(金) 21:01:14.39
命名規則に関連するクソコード
クラス名、メソッド名、変数名などのネーミングを誤るとクソコード認定されてしまいます。会社やプロジェクトごとに多少のルールの違いはあるにせよ、どこに行っても漏れなくクソコード認定されてしまうネーミングパターンのご紹介です。
ネーミングが「記号+番号」
クラス名や変数名はわかりやすい名称にしましょう。ネーミングを見て内容を推測できるようになっていることが重要です。「記号+番号」ではそれを見るだけでは何のプログラムであるかを推測することは不可能です。
ネーミングに日本語、英語、ローマ字が混在
プロジェクトによってクラス名や変数名のネーミングルールは異なりますので、何がダメだというわけではありませんが、自由すぎるネーミングを行うのはやめましょう。きちんとプロジェクトでルールを統一することは重要です。
またにクラス名や変数名に日本語を使用することは言語仕様上可能とはなっておりますが、アルファベットを使うことが慣習となっていることと、日本語だとIDEの補完機能がうまく機能しないことがあって非効率化の原因となりますので、避けた方が無難です。
ネーミングにスペルミスがある
ネーミングでスペルミスがあると、後でソースコードから文字列で該当箇所を検索する時に検索にヒットせず、改修漏れの原因にもなります。正しいスペルと間違ったスペルが混在していたりするともう最悪です。スペルミスのないように気をつけましょう。
ネーミングに個人名が使われている
ネーミングはプログラムの中身がわかるような名前にするという観点からも、プログラムの中に自分の名前にすることは適切ではないのでやめましょう。
またソースコードレビューの時に思いがけず恥ずかしい思いをすることになるかもしれません。私は新人の時に「yonemura.sh」という名前で自分用に作ったシェルが他社に買い取られることになってしまい、他の会社のエンジニア20名くらいの前で「よねむらシェルとは・・・」と説明会で大きな声で読み上げるはめになって大変恥ずかしい思いをしたことがあります。
個人で使うプログラムでもプログラムの中身を表した無難なネーミングにしておくことを強くお勧めします。
ネーミングに番号やアルファベットの連番が使われている
クラスや変数のネーミングに、1からの連番やaからの連番を使うと、クラスや変数の中身を推測することが不可能になってしまうのでやめましょう。こういうことをすると後でそのプログラムをメンテナンスする人に、一々プログラムの処理を細かく解析することを強いることとなり、「このクソコード書いたやつまじで氏ね」と言われてしまいますのでやめましょう。
可読性に関連するクソコード
プログラムは後でメンテナンスするためにも、読みやすく書くことが非常に重要です。処理の内容だけ見ると読みやすくても読みにくくても実行される内容は同じかもしれませんが、読みやすいソースコードは改修の工数を下げますし、バグが混入するリスクも下げてくれます。
ネストが異様に深い
ソースコードの中にネストが何重にもなっている箇所があると可読性を下げてしまいます。ネストを何重まで許可するかはプロジェクトによって異なりますが、個人的には3重か4重くらいまでにおさまるようにコーディングするよう心がけていました。
これとセットで「1行の文字数は80文字まで」みたいなコーディング規約があるとさらにカオスな感じになってきます。ネストが10階層+1行80文字までとか、考えただけでも嫌になりますね。
インデントがずれている
今どきエディタが良い感じにインデントしてくれるのに、まさかインデントがずれているソースコードなんて存在しないと信じたいところですが、昔作られたソースコードだとそういう化石みたいなクソコードにお目にかかることはあるようですね。
カッコの閉じ位置のインデントがズレていたりすると、著しく可読性を下げますし、コードの解析を誤るリスクも増えてしまいます。こういうことをすると漏れなくクソコード認定されてしまうでしょう。
1つのメソッドが異様に長い
たまに1つのメソッドが異様に長いソースコードにお目にかかることがあります。私の個人的な感想だと某国にオフショア開発に出されてウミガメのように日本に帰ってきたソースコードにそういうメソッド分割の概念が消失してしまったかのようなソースコードが多いように思います。
1つのメソッドの長さが数千行にも及ぶような男前なソースコードにバグが混入してしまい、解析及び改修をしなければならなくなった時には絶望するしかありませんね。
以下ソース
https://axia.co.jp/2018-04-27
1001: 以下名無しさんに代わりまして管理人がお伝えします 1848/01/24(?)00:00:00 ID:money_soku
他人が書いたコードを(バグまで)丸ごとコピペしたコード。
// 明日やる のコメント
int n=0; for(int i=0; i<n;++i){} // ループしているつもり
// ↓なぜか実行されない
etcect...
// 明日やる のコメント
int n=0; for(int i=0; i<n;++i){} // ループしているつもり
// ↓なぜか実行されない
etcect...
止まらなくなりそうだからそのへんで・・・。
1001: 以下名無しさんに代わりまして管理人がお伝えします 1848/01/24(?)00:00:00 ID:money_soku
現在ホットなニュース!:
記事途中にコメントが入ります。
現在ONです。
以下2chの反応と管理人の反応です
3: 稼げる名無しさん 2018/04/27(金) 21:13:21.93 ID:qtGcbreb.net
今まで見た一番難解だったプログラムは、
GOTO文でデータ部にジャンプして、そのデータ部が実はマシン語だったケース。
GOTO文でデータ部にジャンプして、そのデータ部が実はマシン語だったケース。
8: 稼げる名無しさん 2018/04/27(金) 21:30:27.54 ID:XTLjeLcx.net
>>3
おう、すごいな。
プロテクト外し対策だな。
おう、すごいな。
プロテクト外し対策だな。
63: 稼げる名無しさん 2018/04/27(金) 22:45:02.85 ID:w3SB7mzJ.net
>>3
昔のmaxfanの投稿プログラム並みだな
8bitなら慣れたら読めるぞ
昔のmaxfanの投稿プログラム並みだな
8bitなら慣れたら読めるぞ
4: 稼げる名無しさん 2018/04/27(金) 21:15:13.35 ID:SkldR2qv.net
1行目がGOTO文なBASICプログラム
58: 稼げる名無しさん 2018/04/27(金) 22:34:11.08 ID:NHwfVjvw.net
>>4
0x0000 番地が JMP のマシン語なら普通にある
0x0000 番地が JMP のマシン語なら普通にある
75: 稼げる名無しさん 2018/04/27(金) 23:14:47.49 ID:263TKDwb.net
>>4
Pascal風に先に関数(サブルーチン)書いて、最後にメインルーチンってのが流行ったことはある。
Pascal風に先に関数(サブルーチン)書いて、最後にメインルーチンってのが流行ったことはある。
99: 稼げる名無しさん 2018/04/28(土) 00:33:39.85 ID:7z+dj0w6.net
>>4
インタプリタ型BASICで、GOSUBで飛ばすサブルーチンを先頭付近に持っていって、
高速化するテクニック。
インタプリタ型BASICで、GOSUBで飛ばすサブルーチンを先頭付近に持っていって、
高速化するテクニック。
9: 稼げる名無しさん 2018/04/27(金) 21:30:45.55 ID:rfgO5YV4.net
>>1
マイクラのjavaソースなんて一発目から該当するけどなw
マイクラのjavaソースなんて一発目から該当するけどなw
50: 稼げる名無しさん 2018/04/27(金) 22:18:09.83 ID:Os5ufWBT.net
>>9
難読処理をクソコードって言っちゃう奴
難読処理をクソコードって言っちゃう奴
11: 稼げる名無しさん 2018/04/27(金) 21:31:56.80 ID:uRrJsrIr.net
漢なら数万行のスパゲッティ!
12: 稼げる名無しさん 2018/04/27(金) 21:44:04.73 ID:7z4yfUSZ.net
本文よりもコメントの方がやばいなw
19: 稼げる名無しさん 2018/04/27(金) 21:54:13.20 ID:CX7M9vnn.net
>私は新人の時に「yonemura.sh」という名前で自分用に作ったシェルが
>他社に買い取られることになってしまい
おいしいシチュエーションじゃん
仕事回ってくるかもよw
>他社に買い取られることになってしまい
おいしいシチュエーションじゃん
仕事回ってくるかもよw
20: 稼げる名無しさん 2018/04/27(金) 21:54:26.53 ID:3Lb6XxPG.net
スペルミスは問題ないよ
全てがミスで統一されていれば
全てがミスで統一されていれば
29: 稼げる名無しさん 2018/04/27(金) 22:03:41.61 ID:sfHmltPT.net
//よく分からないけどこれで動く
30: 稼げる名無しさん 2018/04/27(金) 22:05:50.81 ID:9EBCJdt2.net
虫取り用
if 1=1 then go to 10
if 1=1 then go to 10
44: 稼げる名無しさん 2018/04/27(金) 22:14:50.81 ID:o0svj3fu.net
>>30
あー、最初につまづくパターンやねー。
でも、今の子って、最初からオブジェクト指向なの?
それすら死語なのかね?
エクセルでVBA使えりゃ問題ないから、勉強しなくなっちゃって…。
あー、最初につまづくパターンやねー。
でも、今の子って、最初からオブジェクト指向なの?
それすら死語なのかね?
エクセルでVBA使えりゃ問題ないから、勉強しなくなっちゃって…。
31: 稼げる名無しさん 2018/04/27(金) 22:06:16.77 ID:bipmPmmw.net
>>1
>「ゲッターでグローバル変数を変更している」
これの意味が解らないんですが、具体的にどういうこと?
>「ゲッターでグローバル変数を変更している」
これの意味が解らないんですが、具体的にどういうこと?
48: 稼げる名無しさん 2018/04/27(金) 22:17:16.73 ID:SkldR2qv.net
>>31
getterって値を参照するための関数(メソッド)と普通は思うじゃん?
値を変更するのはたgetterの挙動として好ましくない
またgetterやsetterはそもそもその変数に直接アクセスされるのが好ましくないから使うテクニック
グローバル変数ならgetterやsetterを使わなくてもいじり放題じゃん?
カプセル化してこそgetterやsetterには意義がある
要するに設計としてムチャクチャってこと
getterって値を参照するための関数(メソッド)と普通は思うじゃん?
値を変更するのはたgetterの挙動として好ましくない
またgetterやsetterはそもそもその変数に直接アクセスされるのが好ましくないから使うテクニック
グローバル変数ならgetterやsetterを使わなくてもいじり放題じゃん?
カプセル化してこそgetterやsetterには意義がある
要するに設計としてムチャクチャってこと
66: 稼げる名無しさん 2018/04/27(金) 22:53:10.83 ID:bipmPmmw.net
>>48
レスありがとう
しかし具体的にどういう事態かやはりわからん
レスありがとう
しかし具体的にどういう事態かやはりわからん
51: 稼げる名無しさん 2018/04/27(金) 22:18:25.57 ID:3Lb6XxPG.net
>>31
「副作用のあるgetter」の事かと
グローバル変数がどうとか説明の方がセンスがない
「副作用のあるgetter」の事かと
グローバル変数がどうとか説明の方がセンスがない
56: 稼げる名無しさん 2018/04/27(金) 22:29:06.66 ID:Os5ufWBT.net
>>31
コマンドとクエリの分離原則は守ってほしい
切実に
まじで
コマンドとクエリの分離原則は守ってほしい
切実に
まじで
33: 稼げる名無しさん 2018/04/27(金) 22:07:00.24 ID:V6Hm029K.net
初期化と言いつつメインの処理が半分ぐらい入ってたりとか
勝手に余計な事してたりするのが一番困る
勝手に余計な事してたりするのが一番困る
35: 稼げる名無しさん 2018/04/27(金) 22:08:57.66 ID:SPGoPAJs.net
例外処理が存在しないプログラム
変数の宣言や、型がなくても何となく動いてくれる大変便利なプログラム
変数の宣言や、型がなくても何となく動いてくれる大変便利なプログラム
45: 稼げる名無しさん 2018/04/27(金) 22:15:25.72 ID:03j96pSE.net
組み込み系だが
どうせみんな糞コード
綺麗なコードなんて見た事ねーよ
どうせみんな糞コード
綺麗なコードなんて見た事ねーよ
57: 稼げる名無しさん 2018/04/27(金) 22:33:12.52 ID:ckuDMDPo.net
> 11
スパゲッティは、現代的なIDEで見ると意外と追いやすい
一番追いづらいのは、意識高い系が書いたコード
ここになぜそのパターンをここに当てはめた?
ただただデザインパターンを使いたいだけの奴が多すぎる
スパゲッティは、現代的なIDEで見ると意外と追いやすい
一番追いづらいのは、意識高い系が書いたコード
ここになぜそのパターンをここに当てはめた?
ただただデザインパターンを使いたいだけの奴が多すぎる
72: 稼げる名無しさん 2018/04/27(金) 23:05:01.95 ID:5GdE7idV.net
>>1
うんコードスレ定期的に立つね
悲しいことに今もまた世界のどこかで糞の金字塔が作られているんだろうね
うんコードスレ定期的に立つね
悲しいことに今もまた世界のどこかで糞の金字塔が作られているんだろうね
85: 稼げる名無しさん 2018/04/27(金) 23:33:10.65 ID:VQEmgluX.net
エンディアン依存のコードを書くな、馬鹿野郎
93: 稼げる名無しさん 2018/04/28(土) 00:07:22.23 ID:WkQmbHJ7.net
>>1
クソコードってこういうレベルじゃないから
クソコードってこういうレベルじゃないから
103: 稼げる名無しさん 2018/04/28(土) 01:01:28.52 ID:hGs4G+GM.net
AからZの1文字の変数名しか使えなかったあのころが懐かしい
1001: 以下名無しさんに代わりまして管理人がお伝えします 1848/01/24(?)00:00:00 ID:money_soku
引用元:anago.2ch.sc/test/read.cgi/bizplus/1524830474/
管理人オススメニュース!:
コメント
コメント一覧 (17)
コンパイルが通ったり通らなかったりする理由が未だに分からない。
そういうコード修正させられるときって、大抵が上手く動かないからチェックしてって回されるんだよな…
ぶっちゃけ仕様聞いて作り直したほうが速いのが大半
private final int TWO = 8; ← えぇ…
ぐうわかる。脳内で理論が出来上がってるのにここで足踏みすることが多々ある
かと言って適当なのにすると後で苦しむからなあ
海外でも同じ問題起きてるんやろか
修正すべき箇所が書かれているので未だマシ
分岐無いのにGOTO文であちこちに飛ぶ難解なプログラムを昔見たわ
全部のループの最後に if 文を書くより全然いい
動きとして間違ってないから修正指示も出せない
コメントする