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

型安全性で考えること

Naka Sho
September 16, 2024
60

 型安全性で考えること

型安全性で考えること

Naka Sho

September 16, 2024
Tweet

Transcript

  1. 私について 経歴 2011/04 SES(中小企業) 2015/01 (Web系)株式会社セレス 2020/10 (Web系)エキサイト株式会社 2023/11 (金融系)PayPayカード株式会社

    PayPayカード株式会社 - プロダクト1本部  - プロダクト開発部 - プロダクト開発5グループ(SRE)
  2. 型安全性とは // PHPで型宣言あり function demonstrateTypeSafety(int $count): void { var_dump($count); }

    demonstrateTypeSafety(0); demonstrateTypeSafety("aaa"); TypeError: Argument 1 passed to demonstrateTypeSafety() must be of the type int, string given, called
  3. 型安全性とは // Javaで型宣言 int count = 0; String name =

    "Alice"; count = “aaa” // エラー intに文字列は入らない name = 1 // エラー 文字列に intは入らない
  4. 型安全性で考えること <?php $count = 0; var_dump($count); $count = "aaa"; var_dump($count);

    これだけで動くって嬉しくない? PHPは手軽に動いたを感じることができる
  5. 余談 <?php $count = 0; or $count = "0件"; Aくん、countって数値だよね?

    Bくん、countって単位まで入る可能性があるから文字列だよね? っと型が定義されていないと意思共有できないですよね? 型安全はなぜ必要なのか?
  6. 余談 // Javaでの型宣言の例 int count = 0; or String count

    = "0件"; 開発段階で気づくことができるメリット、 実行時にエラーにならないメリット (実行者が一般ユーザーだった場合、障害が起きていることになる) 意識の共有
  7. 余談 // Javaでの型宣言の例 String count = “0件”; or String count

    = “0”; or int count = 0; エラー にはなってないけど。 。 。型宣言的にはセーフだけど。 。 。意図伝わってないよね。 コンパイルエラーにならないから もう少し型安全について深ぼってみる
  8. 余談 // 先ほどと違う例^ String startDate = “2025-02-29 23:59:59”; //エラーにならない LocalDateTime

    startDate = LocaldateTime.of(“2025-02-29 23:59:59”); // エラー Stringの場合はstartDateの有効性を確認しないといけない Stringはほぼほぼなんでも入るから、型宣言されてないと等しいと考える
  9. 余談 start_date varchar -> “2025-02-29 23:59:59”入る -> datetime // “2025-02-29

    23:59:59”Incorrect datetime value でエラー count varchar -> “0, 1, null” -> nullは? mail_send_flg varchar -> “0:未送信 1:送信済み: nullは? -> 本番データ見ると-が合ったり category varchar -> “和食、洋食、中華、.....” -> 複数時には,区切りで文字列として入る ->取り出すときに ,区切りで出さないと行けないの? Databaseの定義にvarchar多用してない?