- 締切済み
列車走行位置で、フラグによる分岐から変えたいです。
列車走行位置で、フラグによる分岐から、enum分岐のint文にしたいです。 以下のプログラムを参考にして作っています。 http://r113.web.fc2.com/p/viewer/jrw-hokuriku-20150314/index.html 以下はjsの文章ですが、 //平日ダイヤか土・休日ダイヤかを判定する function dayJudge(year, month, date, day) { //alert(year +" "+ month +" "+ date +" "+ day) //フラグ var weekdayFlag = true; //月〜金なら立てる if(day >= 1 && day <= 5) weekdayFlag = true; else weekdayFlag = false; //祝日ならたおす if(year == 2013 && month == 1 && date == 1) weekdayFlag = false; else if(year == 2013 && month == 10 && date == 14) weekdayFlag = false; else if(year == 2013 && month == 11 && date == 4) weekdayFlag = false; else if(year == 2013 && month == 12 && date == 23) weekdayFlag = false; else if(year == 2014 && month == 1 && date == 1) weekdayFlag = false; return weekdayFlag; } 僕が具体的に行ったのは、フラグを3つ以上に分けることでした。 しかし、フラグを分けても、ことは解決しかなったです。 フラグというのはBoolean型の一種で、 真偽値を返すものであって、 AorBにしかならないのです。 以下はjavaにおけるbooleanの説明ですが、 javascriptでも同じことがいえると思います。 https://www.sejuku.net/blog/41241 そこで、抜本的な解決策として、enum型のint文があるのを知りました。 https://qiita.com/BMJr/items/5ec834e6513fe5f0ad87 上記のenum型のint文にして、先ほどのjavascriptの文章を書き直すことって可能でしょうか。 僕には天才ではないため、 断片的な情報から、一つの情報をあびきだすのはできないです。 どうか、ご教授願えたら幸いです。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- t_ohta
- ベストアンサー率38% (5241/13712)
> 変数を3つ以上持たせたいという意味です。 どの変数に値を3種類以上持たせたいのでしょうか。 例えば weekdayFlag に3種類値を持たせたいのであれば、 weekdayFlag = 1; weekdayFlag = 2; weekdayFlag = 3; の様に数値を入れて、if での判定で weekdayFlag == 2 のような比較をすればいいだけではありませんか? もし数値だと判りにくいと言うことであれば例示されたURLにあるようなオブジェクト定義を使う方法も可能です。 const hoge = { blue: 1, red: 2, green: 3; }; weekdayFlag = hoge.blue; とすれば、weekdayFlag の中には 1 と言う値が入ります。 先に書いたモノを置き換えるとしたら weekdayFlag = hoge.blue; weekdayFlag = hoge.red; weekdayFlag = hoge.green; となります。 if で weekdayFlag == hoge.blue と比較すれば判定も可能です。 ただし、これは他の言語で言うenumと若干違い、擬似的なenumと言う事になります。
- _kappe_
- ベストアンサー率68% (1581/2304)
> enum分岐のint文 Javascriptにはenumは存在しませんが、似たようなものを自分で定義して使うすることはできます(後述)。 一方「int文」というものは存在しません。リンク先のQiitaの記事(言語はSwift)にもint文なんてものは出てきません。": Int"と書かれている部分は文ではなくて型の指定です。 平日ダイヤと土休日ダイヤの2種類の処理をしたいならばbooleanの値を持つweekdayFlagだけで足りそうに思えます。もし平日、土曜日、休日ダイヤの3種類に分けたいのであればenumもどきを定義して使うのは有効でしょう。 (定義の例) var DiagramKind = { Weekday : 0, Saturday : 1, Holiday : 2 } ダイヤを3種類に分けるというのはこちらで考えた例なので、何をどのように場合分けしたいのか、その場合分けの条件は何なのか、補足で説明してください。 >僕が具体的に行ったのは、フラグを3つ以上に分けることでした。 平日か否かのフラグ(weekdayFlag)以外にどんなフラグを作ってどのようにうまく行かなかったのでしょうか。その情報もあったほうが、質問者さんがやりたいことが回答者に伝わりやすくなると思います。 質問タイトルには「フラグによる分岐から変えたい」と書かれていますが、質問文の中にはフラグによる分岐はどこにもないので、質問者さんがenumを使って何をしたいのかが読み取れないのです。
- t_ohta
- ベストアンサー率38% (5241/13712)
まず、JavaScriptにはenum型はありませんので、単純にenum型に変えるという事はできません。 例示されている関数は平日ダイヤか土休日ダイヤかの判定をするモノだと思われるので、関数の戻り値は2種類しかないと思いますが、3種類に分けるというのはどのような戻り値を想定されているのでしょうか。 関数を設計する際は、まず処理の目的を決め、入力値と戻り値をしっかり定義することからはじめないといけません。 質問者さんが理想とする入力値が何で、どのような処理をして、どのような結果を返したいのか明確にしましょう。 その説明が無いと他の人には何をしたいのかが判らずアドバイスが出来ません。
補足
つまり、 変数を3つ以上持たせたいという意味です。 フラグがあるのにenumがないのはなぜ。 以下のような式にはできないのでしょうか。 https://www.sejuku.net/blog/71453
補足
フラグだと、1個フラグを作って終わりです。 理由はonかoffのどちらかしかないからです。 実際、土日以外の切り替えの構文を書こうとすると知識がないせいか、切り替えができなかったり、真っ白になったりしました。 一方、enum型やそれに付随するint文に注目する理由は、 選択肢が3つ以上あるときにも使えるということです。 例えば、1月1日にはAダイヤ、1月2日にはBダイヤ、1月3日にはCダイヤに切り替わるようなプログラムにしたいのです。 jrの特急列車だと、土日ダイヤのほかに特定の日付だけ運転する多客期とかってのがありますから、それを実現したいのです。 もし、1時間以内に答えがない場合、この設問を閉じて、新しく質問しなおします。😡。