Upgrade to Pro — share decks privately, control downloads, hide ads and more …

条件判定に名前、つけてますか? #phperkaigi #c

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

条件判定に名前、つけてますか? #phperkaigi #c

あなたのPHPコードはif文の中にたくさんの条件を連ねて条件分岐していませんか?コメントを書いておかないと何の条件分岐かわからなくなっていませんか?
可読性の下がりがちな条件分岐、実はもっと読みやすく・テストしやすくすることができるんです!
Specificationパターンを使うことで、条件分岐に人間可読な名前をつけることができます。名前をつけるだけで、人間は物事を認識しやすくなりますし、覚えやすくなります。
まず名付けの大切さを日常生活や簡単なPHPコードの事例から解説し、その後にSpecificationパターンを使った実装・リファクタの実例をサンプルコードを共有しながら紹介します。

Avatar for Hiromi Hishida

Hiromi Hishida

March 20, 2026
Tweet

More Decks by Hiromi Hishida

Other Decks in Programming

Transcript

  1. w 1)1FSྺ೥ɾ໊ݹ԰ࡏॅྺ΋໿೥ɾ݄͔Β ౦ژʹॅΈ·͢ w ೥ʙ೥ϑϦʔϥϯεडୗ։ൃ w ೥ࣗࣾαʔϏεاۀʹब৬ w స৬ΛܦͯɺݱࡏʢגʣϑϡʔδϣϯζΤ ϯδχΞϦϯάϚωʔδϟʔʢ෦Լͳ͠ɾ

    QMBZJOHʣ w +BWBͰܦӦ؅ཧιϑτΛ࡞͍ͬͯ·͢ɻ 4BB4ఏڙ͢ΔͨΊͷ؅ཧγεςϜ͸1)1 Ͱ࡞ͬͯ·͢ w ೔ຊ4ZNGPOZϢʔβʔձ /BHPZBQIQ XFCʢͳͳ͏͐Ϳʣ
  2. ৚݅෼ذʹ໊෇͚Δʢ໊෇͚ͳ͍ʣ if ($user->getAge() >= 20) { // you can drink

    some alcohol } if ($user->getAge() >= 20) { // you can vote }
  3. ৚݅෼ذʹ໊෇͚Δʢ໊෇͚ͳ͍ʣ if ($user->getAge() >= 20) { // you can drink

    some alcohol } if ($user->getAge() >= 20) { // you can vote } ͬͪ͜ͷҙຯͷ΍͚ͭͩ࿙Εͳ͘ ؒҧ͍ͳ͘୳ͤΔʁ
  4. ৚݅෼ذʹ໊෇͚ΔʢϨϕϧʣ $canDrink = $user->getAge() >= 20; if ($canDrink) { //

    you can drink some alcohol } $canVote = $user->getAge() >= 20; if ($canVote) { // you can vote }
  5. ৚݅෼ذʹ໊෇͚ΔʢϨϕϧʣ $canDrink = $user->getAge() >= 20; if ($canDrink) { //

    you can drink some alcohol } $canVote = $user->getAge() >= 20; if ($canVote) { // you can vote } Ͳ͔͜ͷϑΝΠϧ͚ͩ JT7PUFͱ͔DBO5PIZPͱ͔ॻ͍ ͯͳ͍ʁ ɹ৚݅෼ذʹ໊෇͚Δ͕ςʔ ϚͳͷͰ705"#-&@"(&ఆ਺Λ ஔ͘ઃܭʹ͸͠ͳ͍
  6. ৚݅෼ذʹ໊෇͚ΔʢϨϕϧʣ if ($user->canDrink()) { // you can drink some alcohol

    } if ($user->canVote()) { // you can vote } 6TFSͷछྨ͕ͨ͘͞Μ͋ͬͨΒʁ৚͕݅ ʮ೥ྸࡀҎ্ʯΑΓෳࡶͩͬͨΒʁ਺೥ޙ ʹ࠶ൃͯ͠΋΋͏Ұճಉ͜͡ͱ΍ΕΔʁ
  7. ৚݅෼ذʹ໊෇͚ΔʢϨϕϧʣ class DrinkableSpecification { public function isSatisfiedBy(int $age): bool {

    return $age >= 20; } } class VotableSpecification { public function isSatisfiedBy(int $age): bool { return $age >= 20; } } IUUQTNBSUJOGPXMFSDPNBQTVQQTQFDQEG
  8. ৚݅෼ذʹ໊෇͚ΔʢϨϕϧʣ if ($drinkableSpecification->isSatisfiedBy($user->getAge())) { // you can drink some alcohol

    } if ($votableSpecification->isSatisfiedBy($user->getAge())) { // you can vote } IUUQTNBSUJOGPXMFSDPNBQTVQQTQFDQEG
  9. ʢ͓·͚ʣ9Ͱ࿩୊ʢͩͬͨʣΞϨ JT4VDDFTT IUUQTYDPNNBOFLJOFDPUTUBUVT w JGจͱFMTFͷ࿩ͳͷͰएׯP ff  UPQJD w JT4VDDFTT͸ʮΧ΢ϯτ૿΍ͤ

    ΔʯͱʮϥΠϑݮΒͤͳ͍ʯΛ ·ͱΊͪΌ͍ͬͯΔ w %SJOLBCMFͱ7PUBCMFΛJT"EVMU Ͱ·ͱΊ࣮ͯ૷ͪ͠Όͬͯͨ తͳ΍ͭ