Slide 1

Slide 1 text

#phpltjam ©2020 RAKUS Co., Ltd. ©2020 RAKUS Co., Ltd. PHP8で導入される match式 桑原 健悟

Slide 2

Slide 2 text

#phpltjam ©2020 RAKUS Co., Ltd. 自己紹介 •氏名:桑原 健悟(くわはら けんご) •所属:株式会社ラクス •お仕事:Mail Dealerの開発

Slide 3

Slide 3 text

#phpltjam ©2020 RAKUS Co., Ltd. 今日のお話 •https://tech-blog.rakus.co.jp/entry/20200917/php

Slide 4

Slide 4 text

#phpltjam ©2020 RAKUS Co., Ltd. 今日のお話 PHP8で導入されたmatch式について ・switchとの違いは? ・何が嬉しいの?

Slide 5

Slide 5 text

#phpltjam ©2020 RAKUS Co., Ltd. お品書き ・match式とは ・matchの特徴 ・値の代入が得意 ・さらばbreak忘れ ・条件忘れにエラーで気付ける ・厳密な比較

Slide 6

Slide 6 text

#phpltjam ©2020 RAKUS Co., Ltd. ©2020 RAKUS Co., Ltd. match式とは 桑原 健悟

Slide 7

Slide 7 text

#phpltjam ©2020 RAKUS Co., Ltd. match式とは switchのような分岐の構文 $paramの値で処理を分岐

Slide 8

Slide 8 text

#phpltjam ©2020 RAKUS Co., Ltd. switchとmatchの違い match switch 返り値 あり なし breakの記述 不要 必要 各条件の処理 1行でしか書けない ブロックで記述可能 比較 厳密(===) 緩やか(==) どの条件にも当てはまらない場合 エラーになる そのまま実行される

Slide 9

Slide 9 text

#phpltjam ©2020 RAKUS Co., Ltd. ©2020 RAKUS Co., Ltd. match式の特徴 桑原 健悟

Slide 10

Slide 10 text

#phpltjam ©2020 RAKUS Co., Ltd. ©2020 RAKUS Co., Ltd. 値の代入が得意 桑原 健悟

Slide 11

Slide 11 text

#phpltjam ©2020 RAKUS Co., Ltd. switchやifは「文」、matchは「式」 ● 文とは ● 値を返さない → 各条件で代入が必要 ● 式とは ● 値を返す → 代入忘れが発生しにくい 直接、値の代入はできない 値の代入は1回でいい

Slide 12

Slide 12 text

#phpltjam ©2020 RAKUS Co., Ltd. ©2020 RAKUS Co., Ltd. さらばbreak忘れ 桑原 健悟

Slide 13

Slide 13 text

#phpltjam ©2020 RAKUS Co., Ltd. break忘れが起こり得ない ● switch:明示的にbreakが必要 ● match:breakが存在しない → break忘れが起こり得ない

Slide 14

Slide 14 text

#phpltjam ©2020 RAKUS Co., Ltd. ©2020 RAKUS Co., Ltd. 条件忘れにエラーで気付ける 桑原 健悟

Slide 15

Slide 15 text

#phpltjam ©2020 RAKUS Co., Ltd. switch ユーザの成績(score)ごとに コマンド($command)を発行 日次処理でコマンドを実行するプログラム

Slide 16

Slide 16 text

#phpltjam ©2020 RAKUS Co., Ltd. match ● matchは条件の網羅性を検査し該当がなければエラーとなる

Slide 17

Slide 17 text

#phpltjam ©2020 RAKUS Co., Ltd. ©2020 RAKUS Co., Ltd. 厳密な比較 桑原 健悟

Slide 18

Slide 18 text

#phpltjam ©2020 RAKUS Co., Ltd. 厳密な比較 ● 「数値だと思っていたら文字列であり思わぬ分岐に入った」がなくなる

Slide 19

Slide 19 text

#phpltjam ©2020 RAKUS Co., Ltd. 厳密な比較は常に嬉しい? ● PHPの関数が厳密な型を意識した作りでないため、 思わぬバグとなる例を紹介

Slide 20

Slide 20 text

#phpltjam ©2020 RAKUS Co., Ltd. 厳密な比較は常に嬉しい? 結果:"jpgだよ" 結果:“defaultだよ"

Slide 21

Slide 21 text

#phpltjam ©2020 RAKUS Co., Ltd. 厳密な比較は常に嬉しい? preg_matchはtrueでなく、1を返す。 → match式ではtrue===1となり、該当してもケースに入らない

Slide 22

Slide 22 text

#phpltjam ©2020 RAKUS Co., Ltd. まとめ ● match式はswitchに比べバグが入りにくい仕様 ● 代入忘れしにくい ● break忘れがない ● 条件忘れもエラーで気付ける ● 厳密な比較は良い面も悪い面もある ● 既存コードやPHPの関数の型を把握していないと思わぬバグに繋がる恐れも

Slide 23

Slide 23 text

#phpltjam ©2020 RAKUS Co., Ltd. ©2020 RAKUS Co., Ltd. ご清聴ありがとうございました 桑原 健悟