どうも、アカネです(・ω・)ノ
はるか先生主催のプログラミング記事募集企画に参加させていただきます!
【はじめに】
プログラムビギナーまたは書いたことない人向けの記事です。
おそらく全くプログラミングなんてやったことなくても雰囲気を味わえるくらい、難しいことは何ひとつ書きませんでした。
玄人さんは生暖かく見守っててください_(:3」z)_
* * * * *
優れたコードのことを、そのように表現することがあります。
では何をもって「美しい」とするのか?
要素はいろいろあるんですけれど、今回は「コンパクトであること」「拡張性が高いこと(後から調整しやすい)」に焦点を当てて、プログラミングがなんとなくわかってきた人が、今よりちょっぴり美しいコードを書けるようになるお手伝いができたらと思います。
ちなみに、
反対にぐっちゃぐっちゃでもう読む気にもならないコードは、スパゲティコードと呼ばれます。こんがらがっちゃってるんですね!
* * * * *
アカネは現在、ここALIS上でおみくじを販売(?)しています。
中身はとっても単純です。
1)誰かが記事に投げ銭すると、
2)定期的に巡回しているbotがそれを検知し、
3)ランダムな文字列(おみくじ)を生成して、
4)投げ銭した人の記事にコメントする
これだけです。
おみくじの例文と構成はこちら↓
突然ですが、「3)ランダムな文字列(おみくじ)を生成」に絞って、作り方を考えてみてください。簡単ですから!
例えばこう↓です。
あいさつAの候補1 =〇〇;
あいさつAの候補2 =××;
あいさつA = 1か2どちらかの数値をランダムで算出し、1なら候補1、2なら候補2;
運勢の候補1 =〇〇;
運勢の候補2 =××;
運勢 = 1か2どちらかの数値をランダムで算出し、1なら候補1、2なら候補2;
ラッキーカラーの候補1 =〇〇;
ラッキーカラーの候補2 =××;
ラッキーカラー = 1か2どちらかの数値をランダムで算出し、1なら候補1、2なら候補2;
あいさつBの候補1 =〇〇;
あいさつBの候補2 =××;
あいさつB = 1か2どちらかの数値をランダムで算出し、1なら候補1、2なら候補2;
おみくじ = あいさつA + 「あなたの運勢は」 + 運勢 + ラッキーカラー + あいさつB ;
(注意:例文はなんちゃってプログラミング言語でお送りしております)
「ナントカの候補」ってたくさんありましたね。
プログラミングにおいてこういう「データを入れておくための箱」のことを「変数(へんすう)」と言います。大体どのプログラミング言語でも「=」記号を使って箱にデータを入れます。
おみくじは作れたけど、どうでしょう、実際にこんなコードを書いたらちっとも美しくありません。ツッコミどころはいくつかありますが、拡張性が低すぎるんですよ。
だって、ひとつ候補の変数を足そうと思っただけでこんなに書き換えなくてはいけません。
あいさつAの候補1 =〇〇;
あいさつAの候補2 =××;
あいさつAの候補3 =△△;
あいさつA = 1か2か3どれかの数値をランダムで選び、1なら候補1、2なら候補2、3なら候補3;
「あいさつAの候補1」〜「あいさつAの候補3」は役割も使われ方も同じお仲間なので、ひとまとめにしちゃいましょうか。
あいさつAの候補リスト = [〇〇,××,△△];
あいさつA = 候補リストの個数分の数値をランダムで選び、数値と合致する位置(順番)にいる候補を選ぶ;
この「候補リスト」のような「複数のデータを入れておける箱」のことを「配列(はいれつ)」と言います。配列の中には別の配列を入れることもできますよ。
候補を足すときは?
あいさつAの候補リスト = [〇〇,××,△△,●●];
あいさつA = 候補リストの個数分の数値をランダムで選び、数値と合致する位置(順番)にいる候補を選ぶ;
リスト内にテキストを追加するだけで、他の部分は変えずに済みました。コードの量も減ったし、最初のよりは美しくなりましたね!
技術的な意味で高度なコードはなかなか書けなくても、「コンパクト」で「拡張性が高い」コードは気をつけていれば誰でも書けるようになります。
「コードの拡張性を上げる」とは、
ということです。
どうやったらあとで楽ができるかを追求することです。
書き換えることになりそうな部分はあらかじめ書き換えやすくしておくとか、いろいろ忘れた頃にまた見ても意味がわかるように、こまめにコメントを入れておくとか、それだけでコードはだんだん美しくなります。
コメントを入れるコツは誰か他の人に説明するように書くことだってどっかで聞きましたが、「いや自分しか見ないから別に汚くていいよ」ですか?
それがね、ちょっと離れたら忘れちゃうんですよ(・ω・)っ
実際にアカネが書いたおみくじ生成コード(JS)を貼っておきます。
そのうち書き換えるかもしれませんが今のところ現役ですよ。
気が向いたら解読してみてください。何かの参考になると幸いです。
var omikuji = [
[
"チィーッス!(・ω・)ノ",
//他の候補は省略
],
["\nあなたの運勢は"],
[
"大吉ッス。",
//他の候補は省略
],
[
"ラッキーカラーは[赤]ッス。",
//他の候補は省略
],
[
"\nあばよ!",
//他の候補は省略
]
];
var kujitext = "【ラッシーくんおみくじ】\nラッシーくん「";
for (var i=0; i<omikuji.length; i++){
var pick = Math.floor(Math.random() * omikuji[i].length);
kujitext += omikuji[i][pick];
}
kujitext += "」";