• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:開発期間を短縮したい)

開発時間を短縮!条件分岐スクリプトの効率化方法を教えてください

このQ&Aのポイント
  • 現在、条件分岐するスクリプトの開発に時間がかかっており、開発時間を短縮したいと考えています。皆様方の知恵をお借りして、効率化方法を教えてください。
  • ファイルから値段を読み込んで表示するスクリプトを作成中です。また、選択された値に応じて値段を変動させる必要があります。現在のスクリプトは非効率的な書き方であるため、より効率的な方法を教えてください。
  • 具体的には、条件分岐のif文を使用していますが、長い文の記述が煩雑であると感じています。もっと効率的で簡潔な方法はないでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

こんにちは。 まず、変数$c とか $a とか $b って何でしょうか。変数に意味のある値を入れたいならば、それを読んでいる方に伝えたい場合は意味のある変数名にしてみてください。たとえば、 $c は、 $name ・・・名前を入れるんだなってわかりやすいですよね $a は、 $count・・・カウント $b は、 $no・・・商品番号を入れるだろうな みたいな。 (もしくは$c は、田中さんの買った個数でしょうか。$a が鈴木さんが買った個数とか?) それと、$a の値が1番目と2番目の if では3桁なのに3番目の if では "0" 一桁になっています。 さらに、$c の値が3つ目の if でいきなり "010"???になってるし $a が "0" に・・・。 この辺を3桁なら3桁に統一、もしくは全部、頭に「 0 」を「付けない」。といった統一する規則がないと開発期間を短くすることはほど遠いでしょう。 また、鈴木さんと小林さんはどこに出てきますか? で、見た感じプログラムの覚えたての頃にやりそうな記述の仕方ですね。よって、慣れていけばそれなりに上手に書けるようになっていきます。まずは『プログラムになれること。』だと思います。 具体的に見ていくと、3つの if で、「 c == "田中" 」ってあるので、この3つの if の前に、 if ($c == "田中"){ if ( $a == "001" && $b == "0") のように出来ます。次に、どの if後の処理にも $file = fopen($file_name , "r") or die("OPENエラー" . $file_name);・・・・ と、ありますが、これは if群を抜けてからでいいんじゃないですか。具体的には、 ---------------------- 質問に書かれていた処理を書き直すと ----------------------- if ($c == "田中"){ if ( $a == "001" && $b == "0") //マッチした後の処理が1行の時は「{」を省略できる $file_name = "200.txt"; else if ( $a == "002" && $b == "0") $file_name = "400.txt"; ・・・・・・省略・・・・・・ } // if ( $c == "田中") の終了 //ファイルのオープンと読み込み $file = fopen($file_name , "r") or die("OPENエラー $file_name"); $string = fgets($file , 20); echo $string; -------------------------------------------------------------------------------------- あと、 $a の値と、ファイルの名前に共通の部分があるなら、たとえば・・・if なんか使わなくても $tmp = $a * 100; $file_name = (string)$tmp . ".txt"; これだけで出来ます。 $c と絡ませたいのならそういった使い方にするような変数にする方が楽でしょう。 $tmp = $a * $c * 100; $file_name = (string)$tmp . ".txt"; この辺は『慣れ』でしょうから、いきなり、と言うよりは徐々に書き直していくとよいと思いますよ。 そのうち、自分で定義した関数やクラスを書いて処理するようになるでしょう。 ※なお、処理速度という点から見るのでしたら、function や classで汎用性を高くすると、利便性に反して処理は遅くなります。(メモリ上にある自分で定義した関数やクラスを呼び出す手間がかかるため) この辺のどうやって処理させるかも、慣れれば自分流で出来るようになります。

Autosound
質問者

お礼

ご回答ありがとうございます。ご回答頂いた内容に非常に満足しております。言葉足らずを補っていただき、また、具体的なソースを教えていただいて、本当に感謝しております。ありがとうございました。 所で理論演算子ですが、例えば ************************************************ $a==001 を基点に $b==0ならtrue $b==1ならtrueに したいのです。$b同士は処理しません。 ************************************************ このような理論演算子は存在するのでしょうか?下記に書いたものは &&とorですが、これはだめでした。もう少しお付き合いいただければと思います。よろしくお願いいたします。 if ($c == "田中"){ if ( $a == "001" && $b == "0" or $b == "1")

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.3

慣れですかね。。 たとえば、三つの条件を一変に指定するので条件が多くなってしまうかと思います。 (1)値段表示はファイルを読み込んで表示します。200.txtなら、200円と表示です。 どうやって値段表示ファイルを選択するのかがわかりませんが。。。 たとえば$aが選択の基準ならば$aだけでif文を作ればよいのでは。 (2)前のページより田中、鈴木、小林の値をhiddenで送っています。鈴木さんが購入すると、田中さんより200円UP、小林さんだと、田中さんより300円UPにしています。 これは $plus = 0; # プラス金額初期設定 if ($c == "鈴木") { $plus += 200; } elseif ($c == '小林') { $plus += 300; } とかで、各条件を別々にすればいいのでは?

すると、全ての回答が全文表示されます。
  • umioyo
  • ベストアンサー率66% (35/53)
回答No.1

開発期間というか。。。 処理を短くしたいってことですよね。 同じ処理がある場合はfunctionを使います。 自分専用関数を作るイメージです。 頑張ってください。 #もっといい参考ページがあるかもしれません。

参考URL:
http://ww7.tiki.ne.jp/~inabah/php/004_001.htm
Autosound
質問者

お礼

ご回答ありがとうございます。教えて頂いたfunctionをを勉強したいと思います。貴重なご意見ありがとうございます。

すると、全ての回答が全文表示されます。

関連するQ&A