質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

デザインパターン

デザインパターンは、ソフトウェアのデザインでよく起きる問題に対して、解決策をノウハウとして蓄積し再利用出来るようにした設計パターンを指します。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Q&A

3回答

1816閲覧

数値の大小を判定するif elseifが多すぎるコード

nov_dev

総合スコア0

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

デザインパターン

デザインパターンは、ソフトウェアのデザインでよく起きる問題に対して、解決策をノウハウとして蓄積し再利用出来るようにした設計パターンを指します。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

0グッド

0クリップ

投稿2020/11/18 22:43

前提・実現したいこと

PHP(Laravel6系)を使用しています。
簡単なブラウザゲームを作っていまして、スコアの結果によって判定をする処理なのですが、
if-elseifが300行くらい続いていまして、綺麗に書けないものかと思い質問させて頂きます。
調べ方がよくなく既出の質問でしたら申し訳ありません。

発生している問題・エラーメッセージ

エラー等は無し

該当のソースコード

PHP

1if ($score >= 1000000) { 2 $rank = "MAX_SCORE"; 3 }else if ($score >= 990000) { 4 $rank = "RANK SSS"; 5 }else if ($score >= 980000) { 6 $rank = "RANK SS"; 7 }else if ($score >= 970000) { 8 $rank = "RANK S"; 9 }else if ($score >= 960000) { 10 $rank = "RANK AAA"; 11 }else if ($score >= 950000) { 12 $rank = "RANK AA"; 13 }else if ($score >= 940000) { 14 $rank = "RANK A"; 15// 以下、else ifがひたすら続きます...

試したこと

下記の様な「分岐アンチパターン」を参考にしようと思いましたが、
値の大小を判定ではなく、一致しているケースのみしか情報がなく、、
https://qiita.com/pakkun/items/9bef9132f168ba0befd7

補足情報(FW/ツールのバージョンなど)

PHP 7.3.5
Laravel6 (LTS)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2020/11/18 23:54 編集

もしもスコアとランクの間に規則性があるなら計算できることもあります。 たとえばスコアを 1100000 で割ったあまりを求め、それをさらに 10000 で割った商の小数点以下を切り捨て、94 を引くなら、質問のランクはキーが 0 から 6 までの配列で表せます。
rysh

2020/11/19 03:59

貼ってくれたソースだけだと300行の分岐にどんなものが入るのか推定できないので全部貼ってくれた方が良い設計を提案できると思いますよ 。
guest

回答3

0

よくやるのは、判定数値と判定結果(文字列)を定数テーブルにしといて、ループで回して判断させるってテですね

投稿2020/11/18 22:48

y_waiwai

総合スコア88042

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

定量的な情報をコードに直書きするのは悪手です。
DBにマスタテーブル持ってそこから判定してください。

直書きするにしてもLaravelであればロジック内ではなくconfigを使うべきです。

投稿2020/11/18 23:29

m.ts10806

総合スコア80875

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

データベースを使わないのであればこんな感じでしょうか。

PHP

1function get_rank($score) { 2 $ranks["MAX_SCORE"] = 1000000; 3 $ranks["RANK SSS"] = 990000; 4 $ranks["RANK SS"] = 980000; 5 6 foreach ($ranks as $key => $val) { 7 if ($val <= $score) { 8 return $key; 9 } 10 } 11 12 return "RANK Z"; 13} 14 15$score = 980000; 16$rank = get_rank($score); 17echo $rank;

投稿2020/11/18 23:26

tabuu

総合スコア2480

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問