美しいコードへ。脱スパゲッティーコードへの道。
こんにちは。おじさんです。
今回はプログラミング初心者がよくなりがちな「スパゲッティーコード」を改善する方法を解説していこうと思います。
主もある程度人様に見せられるようなコードになったので。
スパゲッティーコードってなに?
スパゲティプログラムまたはスパゲティコードとは、コンピュータプログラムの状態を指すための表現であり、命令の実行順が複雑に入り組んでいたり、遠く離れた関連性の薄そうなコード間で共通の変数が使われていたりするなど、処理の流れや構造が把握しにくい見通しの悪い状態になっているプログラムのことである。
wiki より
だそうです。難しい。
要するに「きたねえコード」だってことです。
改善するメリットって?
「別に自分しか見ないならきれいじゃなくてもよくね?」って思った方。その考えはまずいです。
なんで改善しないとまずいのか、改善するメリットについて解説していきます。
これですね。一番は。
まずコードを見比べてもらいたいと思います。
window.onkeydown = function(e) { if(e.keyCode == 49) { //数字の1 console.log("1が押されました"); } else if(e.keyCode == 50) { //数字の2 console.log("2が押されました"); } else { //それ以外 console.log("1と2以外が押されました。"); } }
これと
var text = [ "1が押されました", "2が押されました", ]; window.onkeydown = function(e) { var keycode = e.keyCode-49; //数字の1キーを0として数字の2を1とする console.log(text[keycode] == undefined ? "1と2以外が押されました。" : text[keycode]); }
この二つは1か2のキーが押されたらそれに応じてコンソールに出力するコードなのです。
前者はたくさん条件分岐を書いていてどの分がどの条件かがわかりずらいですね。
逆に後者はコードがすっきりしててやりたいことがわかりやすいです。
そしてやりたいことがわからなければどのように直せばいいのかもわかりません。
つまりデバッグしずらいってことです。
やりたいことがわかりやすいコードにすればデバッグしやすいです。
意識すること
続いては意識することです。
これです。
まず、コードがクソ長くなって見る気がまずなくなります。
そしてどこの処理がどのような処理なのかがわかりません。
これだけでデバッグがきつくなります。
それを関数などを使ってまとめることで、
- 関数を呼び出したところの引数とかでどのような処理なのかがわかる。
- コードが短くなる。(重要)
こんなになります。
処理をまとめましょう。
つづいてはこれです。
ちょっとさっきのコード持ってきます。
var text = [ "1が押されました", "2が押されました", ]; window.onkeydown = function(e) { var keycode = e.keyCode-49; //数字の1キーを0として数字の2を1とする console.log(text[keycode] == undefined ? "1と2以外が押されました。" : text[keycode]); }
ここのkeycode変数の49っていう数字。
解説したらわかったと思うんですが、初見じゃ「何の数字?」ってなりますよね。
こういう「何を指した数」がわからないやつが多いと、デバッグしてる最中に困ります。
忘れなければいいけど、いちいち確認しなきゃいけないからね。
でも、ここで定数を使うと?...
const KEYCODE_1 = 49; var text = [ "1が押されました", "2が押されました", ]; window.onkeydown = function(e) { var keycode = e.keyCode-KEYCODE_1; //数字の1キーを0として数字の2を1とする console.log(text[keycode] == undefined ? "1と2以外が押されました。" : text[keycode]); }
このように「49っていう数字はキーボードの1のキーコードなんだな」って一目でわかります。
つまり定数を使えば数字が何さしてるのかがわかりやすくなるってことです。