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

ご清聴ありがとうございました