• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:どのような関数名を付けるべきなのでしょうか?)

乱数を取得する関数名はどのようにするべきか?

このQ&Aのポイント
  • 比重を利用して乱数を取得するための関数名についてアドバイスを求めています。
  • 関数名はrandByWeightやmyrandなど検討していますが、文法的に合っているかや命名規則に則っているかも気になっています。
  • また、関数の作り方や設計についてもアドバイスが欲しいです。

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

  • ベストアンサー
  • tany180sx
  • ベストアンサー率63% (239/379)
回答No.2

#1ですが 引数が全然違ったみたいで失礼しました。 書いてみましたがほとんど同じになってしまいましたw 一応速くはなった気がしますが合ってるかは不明。 少しでも参考になればいいですけど。 class WeightRandomizer {  public static function execute($params) {   if (!isset($params[0])) {    $params = array($params);   }      $weightAll = 0;   foreach($params as $param) {    $weightAll += isset($param['weight']) ? $param['weight'] : 1;   }   $index = rand(1, $weightAll);      $ws = 1;   $we = 1;   foreach($params as $param) {    $we += isset($param['weight']) ? $param['weight'] : 1;    if ($ws <= $index && $index <= $we) {     if (isset($param['recursive']) && is_array($param['recursive'])) {      return self::execute($param['recursive']);     }     if($param['min'] > $param['max']) {      $param['min'] = $param['max'];     }     return rand($param['min'], $param['max']);    }    $ws = $we;   }  } } $rand = WeightRandomizer::execute($arr);

takagoo100
質問者

お礼

ご返答ありがとうございます。 いやでもたしかにこの設計の方が良さそうですね。 なるほど、自分としては クラスで利用するとインスタンス化する手間が気がかりだったので 考えていなかったのですが、こうやって静的に使えばいいわけですよね。 勘違いしてました・・・ 命名の方ですが、 たしかにByWeightなら慣例だと引数はweightですよね・・・ 「WeightRandomizer」はいいですね。しっくりきます。 ところで「WeightRandomizer」の「izer(何とかザー)」という語尾は 主にクラスの命名に使うというイメージが自分にはあるのですが、 その認識は間違っているのでしょうか? それとも一般の関数の命名に適用しても変ではないですか?

その他の回答 (3)

  • tany180sx
  • ベストアンサー率63% (239/379)
回答No.4

一般的にクラス名は名詞、メソッドは動詞を使います。 という慣習からすると Random も一応名詞なので Random::get() とかでも問題はなさそうです。 -ize で名詞や形容詞を「~化させる・する」の意味の動詞になるので ランダム化させる+させる人(物)= Randomizer(乱数生成器) 英語は弱い子なので詳しくはお近くのお詳しい方にお願いします。 あえて izer をつけたのはかっこいいからです(キリッ やっぱりかっこよくコーディングしたいです。

takagoo100
質問者

お礼

ご返答ありがとうございます。 なるほど、そのような区分けがあれば 名前の付け方も幾分楽になりそうですね。 「izer」はパターンとして使えそうです。

  • tany180sx
  • ベストアンサー率63% (239/379)
回答No.3

読み返したら間違いが。 - $we = 1; + $we = 0;

  • tany180sx
  • ベストアンサー率63% (239/379)
回答No.1

関数の中は見てないですが、命名は問題ないかと。 findById(integer) でIDを条件にレコードを取得だったりしますし。 ByWeightなら 引数はweightとかなと思ったりもしますが。 randByWeight($weight, $min = 0, $max = 1) //PHP的にはこっちかな randByWeight($weight, $params = array()) クラス化すればまた変わるとは思います。 $rand = new RandomClass(); $rand->setWeight($weight); print $rand->execute();

関連するQ&A