テクノロジー

おみくじの作り方〜ちょっとだけいいコードを書いてみよう

好永アカネ's icon'
  • 好永アカネ
  • 2020/02/03 03:38
Content image

 

どうも、アカネです(・ω・)ノ

はるか先生主催のプログラミング記事募集企画に参加させていただきます!

 

【はじめに】

プログラムビギナーまたは書いたことない人向けの記事です。

おそらく全くプログラミングなんてやったことなくても雰囲気を味わえるくらい、難しいことは何ひとつ書きませんでした。

玄人さんは生暖かく見守っててください_(:3」z)_

 

* * * * *

 

「美しいコード」って聞いたことありませんか?

 

優れたコードのことを、そのように表現することがあります。

では何をもって「美しい」とするのか?

要素はいろいろあるんですけれど、今回は「コンパクトであること」「拡張性が高いこと(後から調整しやすい)」に焦点を当てて、プログラミングがなんとなくわかってきた人が、今よりちょっぴり美しいコードを書けるようになるお手伝いができたらと思います。

 

ちなみに、

反対にぐっちゃぐっちゃでもう読む気にもならないコードは、スパゲティコードと呼ばれます。こんがらがっちゃってるんですね!

 

* * * * *

 

アカネは現在、ここALIS上でおみくじを販売(?)しています。

 

中身はとっても単純です。

1)誰かが記事に投げ銭すると、

2)定期的に巡回しているbotがそれを検知し、

3)ランダムな文字列(おみくじ)を生成して、

4)投げ銭した人の記事にコメントする

これだけです。

 

おみくじの例文と構成はこちら↓

Content image
馴れ馴れしい口調なのは、配ってるのがラッシーくんだからです。

 

突然ですが、「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 += "」";

 

Content image

 

Supporter profile iconSupporter profile iconSupporter profile iconSupporter profile icon
Article tip 4人がサポートしています
獲得ALIS: Article like 45.20 ALIS Article tip 137.10 ALIS
好永アカネ's icon'
  • 好永アカネ
  • @akanequest
アカネです(・ω・)ノ ラッシーくんの母です。いろんなところに首を突っ込んで小説やイラストを投稿しています。よろしくおねがいします!(リンク集→https://pont.co/u/akaneques)

投稿者の人気記事
コメントする
コメントする
こちらもおすすめ!
Eye catch
テクノロジー

オープンソースプロジェクトに参加して自己肯定感を高める

Like token Tip token
85.05 ALIS
Eye catch
ゲーム

ドラクエで学ぶオーバフロー

Like token Tip token
30.10 ALIS
Eye catch
テクノロジー

iOS15 配信開始!!

Like token Tip token
7.20 ALIS
Eye catch
テクノロジー

なぜ、素人エンジニアの私が60日間でブロックチェーンゲームを制作できたのか、について語ってみた

Like token Tip token
270.93 ALIS
Eye catch
クリプト

17万円のPCでTwitterやってるのはもったいないのでETHマイニングを始めた話

Like token Tip token
46.60 ALIS
Eye catch
クリプト

約2年間ブロックチェ-ンゲームをして

Like token Tip token
61.20 ALIS
Eye catch
クリプト

NFT解体新書・デジタルデータをNFTで販売するときのすべて【実証実験・共有レポート】

Like token Tip token
121.79 ALIS
Eye catch
他カテゴリ

機械学習を体験してみよう!(難易度低)

Like token Tip token
124.82 ALIS
Eye catch
クリプト

Uniswap v3を完全に理解した

Like token Tip token
18.92 ALIS
Eye catch
他カテゴリ

ALISのシステム概観

Like token Tip token
5.00 ALIS
Eye catch
クリプト

Bitcoinの価値の源泉は、PoWによる電気代ではなくて"競争原理"だった。

Like token Tip token
159.32 ALIS
Eye catch
クリプト

ジョークコインとして出発したDogecoin(ドージコイン)の誕生から現在まで。注目される非証券性🐶

Like token Tip token
38.31 ALIS