[過去ログ] PHP質問・雑談スレ4【初心者お断り(ROM歓迎)】 [無断転載禁止]©2ch.net (1002レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
617: 2018/07/23(月)01:27 ID:??? AAS
条件2つ処理する2x2の構図でも
条件1の結果によって条件2の式自体が変わる場合は
Balancedケースでも可読性落ちるよね
618(1): 2018/07/23(月)01:44 ID:??? AAS
三項演算子を使うときに可読性が落ちない条件を突き詰めていくと
一重であることと
代入される部分が簡潔で統一されてることのほかに
条件部分が簡潔で統一されてることも必要だと思うんだ
18<=ageのときは性別にunknownやnewhalfが追加されたら、途端に難解になるし
age<18ではgender==='male'だけど18<=ageではchecktitle(age,gender)の戻り値だったりすると、わりとめちゃくちゃ
でもそうするとvar=(a)?a:20;みたいな条件になりがちになって
短絡評価のわかりにくさの話に戻るんだよね
$var = (expr) ?
value1 :
省2
619: 2018/07/23(月)01:46 ID:??? AAS
簡潔じゃないと1重なのか2重3重になってるのかパッと見てわからないからな
その辺ifでは迷ったことがあまりない
620: 2018/07/23(月)06:55 ID:??? AAS
> 18<=ageのときは性別にunknownやnewhalfが追加されたら
そこまでくると>>603が良さそう
1(under18)
2(over18)
4(male)
8(female)
16(unknown)
32(newhalf)
ちなみにnewhalfじゃなくて
shemaleとかladyboyが正しいおっぱいおちんちんMAN
621: 2018/07/23(月)07:10 ID:??? AAS
なんだそれは
ageもgenderも1つに閉じ込めてbit演算するならunder18/over18は下位1bit、genderは以降上位bit、ってとこだろう
maleやfemaleを両方選択可能の並存状態にしてどうするんだよ
2値が1種、4値が1種なら3bitで済むだろう
622: 2018/07/23(月)07:29 ID:??? AAS
そもそも話題が>>618の趣旨とは離れることだが、1点付け加えると
条件がどう動くかわからず拡張性を考えるのであれば
愚直にifやswitchで構造化するか
>>610のように1つ1つ条件を絞れば引き当てられるtableを作るのが筋だろう
ageの判定処理は完全固定と断定できないだろうし
age自体を現在日付とユーザ誕生日設定によって動的に取得させることになる可能性がある
フラグ化してのbit演算では柔軟性・拡張性に乏しい、全然良さそうじゃない
623: 2018/07/23(月)09:03 ID:??? AAS
えせグラマ
624: 2018/07/23(月)10:47 ID:??? AAS
$age+$genderでやれば拡張も容易
625(1): 2018/07/23(月)11:17 ID:??? AAS
elseifを使えばネストなく簡略化できる
sql のselect case見たいな表記できる
if ($age < 18 and $gender == 'male') {
$title = 'Master';
} elseif ($age < 18){
$title = 'Miss';
} elseif ($gender == 'male') {
$title = 'Mr';
} else {
$title = 'Ms'
省1
626: 2018/07/23(月)11:34 ID:??? AAS
$title = [
5=>'Mr', 6=>'Master',
9=>'Ms', 10=>'Miss',
17=>'Mr/Ms', 18=>'Master/Miss',
33=>'Mx', 34=>'Mx'
];
switchは伸びがちになるしテーブル作るより遅くなるけど
可読性の面では
case GENDER_TS+AGE_UNDER18:
case GENDER_TS+AGE_OVER18:
省2
627: 2018/07/23(月)11:39 ID:??? AAS
あ
配列も出来るらしい
$title = [GENDER_TS+AGE_UNDER18 => 'Mx'];
みたいに
知らなかった
628: 2018/07/23(月)11:43 ID:??? AAS
>>610と比較して1次元になるだけでメリットはないな
629(1): 2018/07/23(月)11:48 ID:??? AAS
条件使わなくて済むよ
下準備も大変になるけど
630: 2018/07/23(月)12:06 ID:??? AAS
>>625
ぱっと見何やってるのかよくわからない
三項演算子もそうだけど結局読む人のレベル次第だな
631: 2018/07/23(月)14:58 ID:??? AAS
>>629
三項演算子だと処理が煩雑になるほど記述が鬱陶しくなるか難しいかのトレードオフじゃん
632: 2018/07/23(月)15:11 ID:ci3EIyjd(1) AAS
Pythonにすれば良い
$bar = $fooVal == 10 ? $trueVal : $falseVal
の代わりに
$bar = $trueVal if $fooVal == 10 else $falseVal
みたいに書けてちょー分かりやすい
633: 2018/07/23(月)15:14 ID:??? AAS
ちょー(笑)
634: 2018/07/23(月)15:19 ID:??? AAS
phpどころかビット演算というプログラムの基本すら知らない奴が居付いている
635: 2018/07/23(月)15:21 ID:KYWJiLD7(1) AAS
関数型言語では同じ変数に何度も代入するって事は基本やらない
明示的に値を変更可能な変数にすれば再代入可能だが
乱用すると関数型使う意味が無くなる
なぜ再代入を避けるかって言ったら
理由は色々あるが
一番はバグの原因になるから
ScalaにもPythonのような式扱いのif文があったり
switchが無く代わりにmatchを使うのもそれが理由
636: 2018/07/23(月)17:34 ID:??? AAS
ビットフラグ立ててるだけでビット演算をしてるわけじゃないからな
上下前次1-新書関写板覧索設栞歴
あと 366 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.012s