配列の型と向き合う

公開日:

東京都中央区日本橋サイボウズ株式会社で開催された『第145回 PHP勉強会@東京』でライトニングトーク(5分)として発表しました。

Download PDF

スライドテキスト

Page 1

配列の型と向き合う

2020-02-26 PHP勉強会@東京

#phpstudy

Page 2

お前誰よ
うさみけんた (@tadsan)

/ Zonu.EXE

  • GitHub/Packagistでは id: zonuexe
    • ピクシブ株式会社 pixiv運営本部
  • Emacs Lisper, PHPer, Rubyist
  • Emacs PHP Modeのメンテナ引き継ぎました
    • 好きなリスプはEmacs Lispです
    • Qiitaに記事を書いたり変なコメントしてるよ

Page 3

Page 4

Page 5

Page 6

近況

Page 7

Page 8

文字を書いても
書いても終らない

Page 9

何が
あったのか?

Page 10

本日のお題

Page 11

Page 12

型、ついて ますか?

Page 13

Page 14

Page 15

Page 16

今回はLTなので皆様既に PhpStormのために型を つけてる前提でいきます

Page 17

前提

Page 18

mixedは
災いのもと

Page 19

mixedすると何が起こるか

間違って引数に渡しても
誰も怒ってくれない
PhpStormで補完が効かなくて
非常に気持ち悪い
静的解析性も開発体験も損ねる

Page 20

PhpStormでの
開発体験を上げるには
mixedを追放して
型を付けていくしかない

Page 21

肝に命じて
ほしい

Page 22

さて

Page 23

日曜の夜くらいから
記事を書いていた

Page 24

Page 25

概要だけ書いて
さくっと投稿する
つもりだった

Page 26

書いても 書いても
終らん

Page 27

なので配列の 話だけします

Page 28

@paramarray

Page 29

@returnarray

Page 30

@vararray

Page 31

書いてます
か?

Page 32

Page 33

こいつは何を
言っているのか

Page 34

return array

<?php

function getIds(): array {
return ...
}

foreach (getIds() as $id) {
$id
}

Page 35

return array

<?php

function getIds(): array {
return ...
}

foreach (getIds() as $id) {

こいつの型がわからん

$id //

}

Page 36

arrayは

mixed

Page 37

arrayを 許しては いけない

Page 38

Laravelのコードを
読んでもarrayまみれ

Page 39

じゃあ
どうすればいいの

Page 40

@return int[]

Page 41

@return BookId[]

Page 42

解決

Page 43

本当に?

Page 44

🙅

Page 45

配列の用途 は複数ある

Page 46

リストの

array

Page 47

$ids = [1, 5, 9];

Page 48

// @return int[]

// @return array<int>
$ids = [1, 5, 9];

Page 49

@return int[]
phpDocumentor
形式

Page 50

@return array<int>

コレクションジェネリクス記法
旧PSR-5形式

Page 51

@return

ArrayObject<int>

コレクションジェネリクス記法
旧PSR-5形式

Page 52

連想配列の

array

Page 53

$id_name_table = [
1 => "田中", 5 => "佐藤", 9 => "山田",

];

Page 54

// @return array<int,string>
$id_name_table = [
1 => "田中", 5 => "佐藤", 9 => "山田",

];

Page 55

構造体の

array

Page 56

$record = [ "id" => 1,
"name" => "田中",

];

Page 57

これはPSR-5形式 では表現できない

Page 58

// @return

array{id:int, name:string}
$record = [ "id" => 1,
"name" => "田中",

];

Page 59

// @return

array{id:int, name:string} array-shapes記法 またはobject-like array

Page 60

// @return

array{id?:int, name:string} 名前と:の間に ? を 付けると省略可能キー

Page 61

Page 62

現在はPSR-5(Draft)から 外されたが、既にほとんど の静的解析ツールには実 装されているので使える

Page 63

ほとんどの?

Page 64

Psalm Phan
PHPStan

Page 65

ほとんど=
PhpStorm以外

Page 66

型付けられな いのお前だけ

Page 67

使おう

いますぐ

Page 68

Psalm Phan
PHPStan

Page 69

安心ください

Page 70

Page 71

たとえばこういう
コードがあるじゃろ

Page 72

Page 73

Page 74

Page 75

付けよう

Page 76

入れよう

deep-assoc

Page 77

いますぐ

Page 78

ダウンロー