その条件分岐って本当に必要?コードを綺麗に書くために #phpkansai
by
Makoto Ikami
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
その条件分岐って本当に必要? コードを綺麗に書くために✨ PHPカンファレンス関西2024 伊神誠人(Makoto Ikami) 初 心 者 向 け
Slide 2
Slide 2 text
スライドは👇です よかったら X もフォローしていただけると嬉しいです✨
Slide 3
Slide 3 text
このトークについて l プログラミング初心者向け l 弊社で受け継がれている 『 条件分岐 』 の書き方 l 条件分岐のアンチパターン/良いアプローチ方法
Slide 4
Slide 4 text
このトークのゴール l 条件分岐について理解する l 綺麗なコードを自分でも考えられる ・ 誰が読んでも分かりやすい ・ 後で見返したとしても理解しやすい
Slide 5
Slide 5 text
伊神 誠人 (26歳) l 株式会社カルテットコミュニケーションズ l バックエンドエンジニア(PHP/Symfony) l 愛知県名古屋市在住 l X @mako5656_i 2022年 中途入社 い かみ まこ と 自己紹介
Slide 6
Slide 6 text
Web広告専門の代理店 • Lisket Web広告レポートの自動作成や予算管理 • 無限GA Googleアナリティクスの分析レポート作成 会社
Slide 7
Slide 7 text
その条件分岐って本当に必要? コードを綺麗に書くために✨ PHPカンファレンス関西2024 伊神誠人(Makoto Ikami) 初 心 者 向 け
Slide 8
Slide 8 text
AGENDA 1. 弊社の文化 2. 条件分岐とは 3. 落とし穴 4. アンチパターン 5. より良いアプローチ 6. まとめ
Slide 9
Slide 9 text
AGENDA 1. 弊社の文化 2. 条件分岐とは 3. 落とし穴 4. アンチパターン 5. より良いアプローチ 6. まとめ
Slide 10
Slide 10 text
弊社の文化
Slide 11
Slide 11 text
弊社の文化 条件がたくさん 😭
Slide 12
Slide 12 text
弊社の文化
Slide 13
Slide 13 text
No content
Slide 14
Slide 14 text
AGENDA 1. 弊社の文化 2. 条件分岐とは 3. 落とし穴 4. アンチパターン 5. より良いアプローチ 6. まとめ
Slide 15
Slide 15 text
AGENDA 1. 弊社の文化 2. 条件分岐とは 3. 落とし穴 4. アンチパターン 5. より良いアプローチ 6. まとめ
Slide 16
Slide 16 text
https://e-words.jp/w/%E6%9D%A1%E4%BB%B6%E5%88%86%E5%B2%90.html 条件分岐とは
Slide 17
Slide 17 text
ある状況によってプログラムが 異なる行動をする仕組み 条件分岐とは
Slide 18
Slide 18 text
条件分岐とは
Slide 19
Slide 19 text
その問題とは?🤔
Slide 20
Slide 20 text
AGENDA 1. 弊社の文化 2. 条件分岐とは 3. 落とし穴 4. アンチパターン 5. より良いアプローチ 6. まとめ
Slide 21
Slide 21 text
AGENDA 1. 弊社の文化 2. 条件分岐とは 3. 落とし穴 4. アンチパターン 5. より良いアプローチ 6. まとめ
Slide 22
Slide 22 text
条件分岐の落とし穴
Slide 23
Slide 23 text
条件分岐の落とし穴 • コードが読みにくくなる • バグが発生しやすくなる • テストが複雑化する • メンテナンスが難しくなる • 再利用性がなくなる などなど・・・
Slide 24
Slide 24 text
具体的には?🤔
Slide 25
Slide 25 text
AGENDA 1. 弊社の文化 2. 条件分岐とは 3. 落とし穴 4. アンチパターン 5. より良いアプローチ 6. まとめ
Slide 26
Slide 26 text
AGENDA 1. 弊社の文化 2. 条件分岐とは 3. 落とし穴 4. アンチパターン 5. より良いアプローチ 6. まとめ
Slide 27
Slide 27 text
アンチパターン ① ディープネスト ② 条件の重複 ③ 条件の過剰な詳細化
Slide 28
Slide 28 text
ECサイトを例に
Slide 29
Slide 29 text
アンチパターン ① ディープネスト ② 条件の重複 ③ 条件の過剰な詳細化
Slide 30
Slide 30 text
アンチパターン ① ディープネスト ② 条件の重複 ③ 条件の過剰な詳細化
Slide 31
Slide 31 text
複数の条件分岐やループが深く入り組んだコード ① ディープネスト ■ 問題点 コードが追いづらく保守が難しくなる ■ ECサイト 注文処理や在庫確認 ■ ディープネストの例
Slide 32
Slide 32 text
① ディープネスト 例: ユーザー認証、在庫確認、支払い方法確認を含む深いネスト ■ ECサイトに当てはめたディープネストの例
Slide 33
Slide 33 text
① ディープネスト 例: ユーザー認証、在庫確認、支払い方法確認を含む深いネスト ■ ECサイトに当てはめたディープネストの例 具体的なコードでは?🤔
Slide 34
Slide 34 text
① ディープネスト 具体的なコードにした場合 ■ 例 ■ 具体的なコード例
Slide 35
Slide 35 text
① ディープネスト ■ 例 ■ 具体的なコード例 『ユーザーがログイン』を確認している条件分岐
Slide 36
Slide 36 text
① ディープネスト ■ 例 ■ 具体的なコード例 『商品が在庫あり』を確認している条件分岐
Slide 37
Slide 37 text
① ディープネスト ■ 例 ■ 具体的なコード例 『支払い方法が有効』を確認している条件分岐
Slide 38
Slide 38 text
① ディープネスト ■ 具体的なコード例
Slide 39
Slide 39 text
① ディープネスト ■ 具体的なコード例 当てはまる 当てはまらない 条件が 😵💫
Slide 40
Slide 40 text
① ディープネスト ■ 具体的なコード例 当てはまる 当てはまらない 条件が 追加の処理が入ると見づらい 😵💫
Slide 41
Slide 41 text
① ディープネスト ■ 具体的なコード例 当てはまる 当てはまらない 条件が 追加の処理が入ると見づらい 😵💫
Slide 42
Slide 42 text
① ディープネスト ■ 具体的なコード例
Slide 43
Slide 43 text
① ディープネスト ■ 具体的なコード例 ■良いアプローチを使ったコード例
Slide 44
Slide 44 text
① ディープネスト ■ 具体的なコード例 ■良いアプローチを使ったコード例 早期リターン
Slide 45
Slide 45 text
① ディープネスト 条件を満たす/満たなさい場合に処理を抜けること 早期リターン ■ 具体的なコード例 ■良いアプローチを使ったコード例
Slide 46
Slide 46 text
① ディープネスト 条件を満たす/満たなさい場合に処理を抜けること 早期リターン ■ 具体的なコード例 ■良いアプローチを使ったコード例 ネストが深くなることを避けられる😎
Slide 47
Slide 47 text
① ディープネスト 条件を満たす/満たなさい場合に処理を抜けること 早期リターン ■ メリット • 理解しやすいコード ➢ ネストを減らすことで、コードが直線的になり一目で理解しやすくなる • 条件がわかりやすくなる ➢ 「何をチェックしているのか」がはっきりするので、 コードの意図がすぐに把握できる
Slide 48
Slide 48 text
アンチパターン ① ディープネスト ② 条件の重複 ③ 条件の過剰な詳細化
Slide 49
Slide 49 text
アンチパターン ① ディープネスト ② 条件の重複 ③ 条件の過剰な詳細化
Slide 50
Slide 50 text
同じ条件式がコード内で複数あること または、必要以上に条件を書いていること ②③ 条件の重複と過剰な詳細化 問題点 保守性が低く、バグ発見が難しくなる ECサイト 注文、在庫管理、ユーザー操作 ■ 条件の過剰な詳細化の例
Slide 51
Slide 51 text
例: 条件に応じて割引が適用される ■ ECサイトに当てはめた条件の重複と過剰な詳細化の例 ②③ 条件の重複と過剰な詳細化
Slide 52
Slide 52 text
例: 条件に応じて割引が適用される ■ ECサイトに当てはめた条件の重複と過剰な詳細化の例 ②③ 条件の重複と過剰な詳細化 具体的なコードでは?🤔
Slide 53
Slide 53 text
具体的なコードにした場合 ■ 例 ■ 具体的なコード例 ②③ 条件の重複と過剰な詳細化
Slide 54
Slide 54 text
■ 例 ②③ 条件の重複と過剰な詳細化 ■ 具体的なコード例 『初回登録ユーザー』 は『会員登録済み』を済ませているはずなので重複している
Slide 55
Slide 55 text
■ 例 ②③ 条件の重複と過剰な詳細化 ■ 具体的なコード例 『初回登録ユーザー』 は『会員登録済み』を済ませているはずなので重複している 重複はなくす
Slide 56
Slide 56 text
具体的なコードにした場合 ■ 例 ②③ 条件の重複と過剰な詳細化 ■ 具体的なコード例
Slide 57
Slide 57 text
商品を入れている前提なので「商品が1円以上」は過剰な詳細化 ■ 例 ■ 具体的なコード例 ②③ 条件の重複と過剰な詳細化
Slide 58
Slide 58 text
商品を入れている前提なので「商品が1円以上」は過剰な詳細化 ■ 例 ■ 具体的なコード例 ■ 具体的なコード例 ②③ 条件の重複と過剰な詳細化 過剰な詳細化はなくす
Slide 59
Slide 59 text
具体的なコードにした場合 ■ 例 ②③ 条件の重複と過剰な詳細化 ■ 具体的なコード例
Slide 60
Slide 60 text
重複や過剰な詳細化をしている部分はなくす ■ 例 ②③ 条件の重複と過剰な詳細化 ■ 具体的なコード例
Slide 61
Slide 61 text
重複や過剰な詳細化をしている部分はなくす ■ 例 ②③ 条件の重複と過剰な詳細化 ■ 具体的なコード例
Slide 62
Slide 62 text
重複や過剰な詳細化をしている部分はなくす ■ 例 ②③ 条件の重複と過剰な詳細化 ■ 具体的なコード例 コードは必要最低限 📝
Slide 63
Slide 63 text
重複や過剰な詳細化をしている部分はなくす ■ 例 ②③ 条件の重複と過剰な詳細化 ■ 具体的なコード例
Slide 64
Slide 64 text
重複や過剰な詳細化をしている部分はなくす ■ 例 ■ 具体的なコード例 ②③ 条件の重複と過剰な詳細化 まだ少し見にくい😑
Slide 65
Slide 65 text
■ 具体的なコード例 ②③ 条件の重複と過剰な詳細化
Slide 66
Slide 66 text
■ 具体的なコード例 ②③ 条件の重複と過剰な詳細化 ■ 良いアプローチ方法を使った例
Slide 67
Slide 67 text
■ 具体的なコード例 ②③ 条件の重複と過剰な詳細化 ■ 良いアプローチ方法を使った例 処理の分割
Slide 68
Slide 68 text
複雑な処理を小さな関数に分けること 処理の分割 ②③ 条件の重複と過剰な詳細化 ■ 具体的なコード例 ■ 良いアプローチ方法を使った例
Slide 69
Slide 69 text
複雑な処理を小さな関数に分けること 処理の分割 ②③ 条件の重複と過剰な詳細化 ■ 具体的なコード例 ■ 良いアプローチ方法を使った例
Slide 70
Slide 70 text
複雑な処理を小さな関数に分けること 処理の分割 ②③ 条件の重複と過剰な詳細化 ■ 具体的なコード例 ■ 良いアプローチ方法を使った例
Slide 71
Slide 71 text
複雑な処理を小さな関数に分けること 処理の分割 ②③ 条件の重複と過剰な詳細化 ■ 具体的なコード例 ■ 良いアプローチ方法を使った例 小さな関数だけを確認すればいい😎
Slide 72
Slide 72 text
■ メリット • 理解しやすいコード ➢ 関数が小さく分かれている理解しやすくなり、 将来的に変更や修正が簡単になる • 再利用がしやすくなる ➢ 他でこの条件を使いたい場合に重複したコードを書かなくてよくなる また、テストも関数ごとできるので簡単になる 複雑な処理を小さな関数に分けること 処理の分割 ②③ 条件の重複と過剰な詳細化
Slide 73
Slide 73 text
より良いアプローチ • 早期リターン • 処理の分割 • 連想配列の利用 • デザインパターンの利用 • ポリモーフィズムの利用
Slide 74
Slide 74 text
AGENDA 1. 弊社の文化 2. 条件分岐とは 3. 落とし穴 4. アンチパターン 5. より良いアプローチ 6. まとめ
Slide 75
Slide 75 text
AGENDA 1. 弊社の文化 2. 条件分岐とは 3. 落とし穴 4. アンチパターン 5. より良いアプローチ 6. まとめ
Slide 76
Slide 76 text
まとめ l 条件分岐は便利だが、適切に使うことが重要 l アンチパターンを避け、読みやすいコードを目指す
Slide 77
Slide 77 text
適切な条件分岐の利用が 綺麗なコードへの鍵
Slide 78
Slide 78 text
より良いコードで、より良い製品を
Slide 79
Slide 79 text
世界一効率的な企業を目指して! PHPエンジニア大募集! 100%自社開発!フルリモート可能で働きやすい環境をお約束します!
Slide 80
Slide 80 text
ご清聴ありがとうございました