明けましておめでとうございます。 | DOGTYPE

明けましておめでとうございます。

作成日: 2025/02/07 (金)

遅ればせながら、みなさま、明けましておめでとうございます。
久々の記事投稿となりますが、私はまだ元気にプログラミング勉強を続けております。

現在は苦手意識のあったJavaScriptを主に勉強しています。
大まかな書き方はある程度理解しているつもりですが、DOM操作が覚えられず悪戦苦闘しています。
とはいえちょっとずつ覚えてきているのである程度描けるようになったらJSのフレームワークにチャレンジですね。

そこで、勉強も兼ねて花札の点数計算ツールを作っているのですが、一生懸命調べながら書いた俺の初JSとGPTに簡略化してもらったコードを見てください。

対戦回数をselectタブで選択すると、その回数に応じて対戦月のメニューが表示されるコード。

俺の書いたJS
let select = document.querySelector("select[name=battle-number]");

select.onchange = Event => {
    if(select.selectedIndex === 1) {
        document.querySelector(".game-numbers").style.display = "";
        document.querySelector(".january-wrapper").style.display = "";
        document.querySelector(".february-wrapper").style.display = "none";
        document.querySelector(".march-wrapper").style.display = "none";
        document.querySelector(".april-wrapper").style.display = "none";
        document.querySelector(".may-wrapper").style.display = "none";
        document.querySelector(".june-wrapper").style.display = "none";
        document.querySelector(".july-wrapper").style.display = "none";
        document.querySelector(".august-wrapper").style.display = "none";
        document.querySelector(".september-wrapper").style.display = "none";
        document.querySelector(".october-wrapper").style.display = "none";
        document.querySelector(".november-wrapper").style.display = "none";
        document.querySelector(".december-wrapper").style.display = "none";
        document.querySelector(".hanafuda-total-result").style.display = "";
    } else if(select.selectedIndex === 2) {
        document.querySelector(".game-numbers").style.display = "";
        document.querySelector(".january-wrapper").style.display = "";
        document.querySelector(".february-wrapper").style.display = "";
        document.querySelector(".march-wrapper").style.display = "none";
        document.querySelector(".april-wrapper").style.display = "none";
        document.querySelector(".may-wrapper").style.display = "none";
        document.querySelector(".june-wrapper").style.display = "none";
        document.querySelector(".july-wrapper").style.display = "none";
        document.querySelector(".august-wrapper").style.display = "none";
        document.querySelector(".september-wrapper").style.display = "none";
        document.querySelector(".october-wrapper").style.display = "none";
        document.querySelector(".november-wrapper").style.display = "none";
        document.querySelector(".december-wrapper").style.display = "none";
        document.querySelector(".hanafuda-total-result").style.display = "";
    } else if(select.selectedIndex === 3) {
        document.querySelector(".game-numbers").style.display = "";
        document.querySelector(".january-wrapper").style.display = "";
        document.querySelector(".february-wrapper").style.display = "";
        document.querySelector(".march-wrapper").style.display = "";
        document.querySelector(".april-wrapper").style.display = "none";
        document.querySelector(".may-wrapper").style.display = "none";
        document.querySelector(".june-wrapper").style.display = "none";
        document.querySelector(".july-wrapper").style.display = "none";
        document.querySelector(".august-wrapper").style.display = "none";
        document.querySelector(".september-wrapper").style.display = "none";
        document.querySelector(".october-wrapper").style.display = "none";
        document.querySelector(".november-wrapper").style.display = "none";
        document.querySelector(".december-wrapper").style.display = "none";
        document.querySelector(".hanafuda-total-result").style.display = "";
    } else if(select.selectedIndex === 4) {
        document.querySelector(".game-numbers").style.display = "";
        document.querySelector(".january-wrapper").style.display = "";
        document.querySelector(".february-wrapper").style.display = "";
        document.querySelector(".march-wrapper").style.display = "";
        document.querySelector(".april-wrapper").style.display = "";
        document.querySelector(".may-wrapper").style.display = "none";
        document.querySelector(".june-wrapper").style.display = "none";
        document.querySelector(".july-wrapper").style.display = "none";
        document.querySelector(".august-wrapper").style.display = "none";
        document.querySelector(".september-wrapper").style.display = "none";
        document.querySelector(".october-wrapper").style.display = "none";
        document.querySelector(".november-wrapper").style.display = "none";
        document.querySelector(".december-wrapper").style.display = "none";
        document.querySelector(".hanafuda-total-result").style.display = "";
    } else if(select.selectedIndex === 5) {
        document.querySelector(".game-numbers").style.display = "";
        document.querySelector(".january-wrapper").style.display = "";
        document.querySelector(".february-wrapper").style.display = "";
        document.querySelector(".march-wrapper").style.display = "";
        document.querySelector(".april-wrapper").style.display = "";
        document.querySelector(".may-wrapper").style.display = "";
        document.querySelector(".june-wrapper").style.display = "none";
        document.querySelector(".july-wrapper").style.display = "none";
        document.querySelector(".august-wrapper").style.display = "none";
        document.querySelector(".september-wrapper").style.display = "none";
        document.querySelector(".october-wrapper").style.display = "none";
        document.querySelector(".november-wrapper").style.display = "none";
        document.querySelector(".december-wrapper").style.display = "none";
        document.querySelector(".hanafuda-total-result").style.display = "";
    } else if(select.selectedIndex === 6) {
        document.querySelector(".game-numbers").style.display = "";
        document.querySelector(".january-wrapper").style.display = "";
        document.querySelector(".february-wrapper").style.display = "";
        document.querySelector(".march-wrapper").style.display = "";
        document.querySelector(".april-wrapper").style.display = "";
        document.querySelector(".may-wrapper").style.display = "";
        document.querySelector(".june-wrapper").style.display = "";
        document.querySelector(".july-wrapper").style.display = "none";
        document.querySelector(".august-wrapper").style.display = "none";
        document.querySelector(".september-wrapper").style.display = "none";
        document.querySelector(".october-wrapper").style.display = "none";
        document.querySelector(".november-wrapper").style.display = "none";
        document.querySelector(".december-wrapper").style.display = "none";
        document.querySelector(".hanafuda-total-result").style.display = "";
    } else if(select.selectedIndex === 7) {
        document.querySelector(".game-numbers").style.display = "";
        document.querySelector(".january-wrapper").style.display = "";
        document.querySelector(".february-wrapper").style.display = "";
        document.querySelector(".march-wrapper").style.display = "";
        document.querySelector(".april-wrapper").style.display = "";
        document.querySelector(".may-wrapper").style.display = "";
        document.querySelector(".june-wrapper").style.display = "";
        document.querySelector(".july-wrapper").style.display = "";
        document.querySelector(".august-wrapper").style.display = "none";
        document.querySelector(".september-wrapper").style.display = "none";
        document.querySelector(".october-wrapper").style.display = "none";
        document.querySelector(".november-wrapper").style.display = "none";
        document.querySelector(".december-wrapper").style.display = "none";
        document.querySelector(".hanafuda-total-result").style.display = "";
    } else if(select.selectedIndex === 8) {
        document.querySelector(".game-numbers").style.display = "";
        document.querySelector(".january-wrapper").style.display = "";
        document.querySelector(".february-wrapper").style.display = "";
        document.querySelector(".march-wrapper").style.display = "";
        document.querySelector(".april-wrapper").style.display = "";
        document.querySelector(".may-wrapper").style.display = "";
        document.querySelector(".june-wrapper").style.display = "";
        document.querySelector(".july-wrapper").style.display = "";
        document.querySelector(".august-wrapper").style.display = "";
        document.querySelector(".september-wrapper").style.display = "none";
        document.querySelector(".october-wrapper").style.display = "none";
        document.querySelector(".november-wrapper").style.display = "none";
        document.querySelector(".december-wrapper").style.display = "none";
        document.querySelector(".hanafuda-total-result").style.display = "";
    } else if(select.selectedIndex === 9) {
        document.querySelector(".game-numbers").style.display = "";
        document.querySelector(".january-wrapper").style.display = "";
        document.querySelector(".february-wrapper").style.display = "";
        document.querySelector(".march-wrapper").style.display = "";
        document.querySelector(".april-wrapper").style.display = "";
        document.querySelector(".may-wrapper").style.display = "";
        document.querySelector(".june-wrapper").style.display = "";
        document.querySelector(".july-wrapper").style.display = "";
        document.querySelector(".august-wrapper").style.display = "";
        document.querySelector(".september-wrapper").style.display = "";
        document.querySelector(".october-wrapper").style.display = "none";
        document.querySelector(".november-wrapper").style.display = "none";
        document.querySelector(".december-wrapper").style.display = "none";
        document.querySelector(".hanafuda-total-result").style.display = "";
    } else if(select.selectedIndex === 10) {
        document.querySelector(".game-numbers").style.display = "";
        document.querySelector(".january-wrapper").style.display = "";
        document.querySelector(".february-wrapper").style.display = "";
        document.querySelector(".march-wrapper").style.display = "";
        document.querySelector(".april-wrapper").style.display = "";
        document.querySelector(".may-wrapper").style.display = "";
        document.querySelector(".june-wrapper").style.display = "";
        document.querySelector(".july-wrapper").style.display = "";
        document.querySelector(".august-wrapper").style.display = "";
        document.querySelector(".september-wrapper").style.display = "";
        document.querySelector(".october-wrapper").style.display = "";
        document.querySelector(".november-wrapper").style.display = "none";
        document.querySelector(".december-wrapper").style.display = "none";
        document.querySelector(".hanafuda-total-result").style.display = "";
    } else if(select.selectedIndex === 11) {
        document.querySelector(".game-numbers").style.display = "";
        document.querySelector(".january-wrapper").style.display = "";
        document.querySelector(".february-wrapper").style.display = "";
        document.querySelector(".march-wrapper").style.display = "";
        document.querySelector(".april-wrapper").style.display = "";
        document.querySelector(".may-wrapper").style.display = "";
        document.querySelector(".june-wrapper").style.display = "";
        document.querySelector(".july-wrapper").style.display = "";
        document.querySelector(".august-wrapper").style.display = "";
        document.querySelector(".september-wrapper").style.display = "";
        document.querySelector(".october-wrapper").style.display = "";
        document.querySelector(".november-wrapper").style.display = "";
        document.querySelector(".december-wrapper").style.display = "none";
        document.querySelector(".hanafuda-total-result").style.display = "";
    } else if(select.selectedIndex === 12) {
        document.querySelector(".game-numbers").style.display = "";
        document.querySelector(".january-wrapper").style.display = "";
        document.querySelector(".february-wrapper").style.display = "";
        document.querySelector(".march-wrapper").style.display = "";
        document.querySelector(".april-wrapper").style.display = "";
        document.querySelector(".may-wrapper").style.display = "";
        document.querySelector(".june-wrapper").style.display = "";
        document.querySelector(".july-wrapper").style.display = "";
        document.querySelector(".august-wrapper").style.display = "";
        document.querySelector(".september-wrapper").style.display = "";
        document.querySelector(".october-wrapper").style.display = "";
        document.querySelector(".november-wrapper").style.display = "";
        document.querySelector(".december-wrapper").style.display = "";
        document.querySelector(".hanafuda-total-result").style.display = "";
    } else if(select.selectedIndex === 0) {
        document.querySelector(".game-numbers").style.display = "none";
        document.querySelector(".hanafuda-total-result").style.display = "none";
    } else {
        document.querySelector(".january-wrapper").style.display = "none";
        document.querySelector(".february-wrapper").style.display = "none";
        document.querySelector(".march-wrapper").style.display = "none";
        document.querySelector(".april-wrapper").style.display = "none";
        document.querySelector(".may-wrapper").style.display = "none";
        document.querySelector(".june-wrapper").style.display = "none";
        document.querySelector(".july-wrapper").style.display = "none";
        document.querySelector(".august-wrapper").style.display = "none";
        document.querySelector(".september-wrapper").style.display = "none";
        document.querySelector(".october-wrapper").style.display = "none";
        document.querySelector(".november-wrapper").style.display = "none";
        document.querySelector(".december-wrapper").style.display = "none";
    }
}
GPTが簡略化したJS
let select = document.querySelector("select[name=battle-number]");
let wrappers = document.querySelectorAll(".january-wrapper, .february-wrapper, .march-wrapper, .april-wrapper, .may-wrapper, .june-wrapper, .july-wrapper, .august-wrapper, .september-wrapper, .october-wrapper, .november-wrapper, .december-wrapper");

select.onchange = () => {
    let selectedIndex = select.selectedIndex;

    // すべての要素を非表示にする
    wrappers.forEach(wrapper => wrapper.style.display = "none");

    // 選択された数分だけ表示
    for (let i = 0; i < selectedIndex; i++) {
        wrappers[i].style.display = "";
    }

    // `.game-numbers` と `.hanafuda-total-result` の表示制御
    let isVisible = selectedIndex > 0;
    document.querySelector(".game-numbers").style.display = isVisible ? "" : "none";
    document.querySelector(".hanafuda-total-result").style.display = isVisible ? "" : "none";
};

すげえ…。
俺の書いたコードはさすがに冗長だしもっと簡略化できるんだろうと考えていましたが俺の頭では思い浮かばず…。 それにこんな短くできるのか…。
でもちゃんと動いてはいたので初めてにしてはヨシ!

これからもっと複雑になりそうな他の機能含め勉強を進めていきます。
頑張るぞ!

≪ 記事一覧