型システム。

  そして、TypeScript。

Shigeki Suwa

@すわくん

https://ztrehagem.dev

プログラミングの話です。

用法、要領を守って正しくお聞きください。

0   1   2   1.5   -10

 

“あいうえお”

 

true   false

値の種類

数値

 

文字列

 

真偽値

 

・・・

値の集合

文字列

数値

真偽値

true   false

0    1    2   ...

1.5   ...

-10  ...

“a”

”foobar”

”あいう”

...

型 == 値の集合

数値型

 

文字列型

 

真偽値型

◯◯型の値

数値型の値  0,   1,   2,   0.5,   -10,   ...

 

文字列型の値  “a”,   “foo”,   “あいう”,   ...

 

真偽値型の値  true,   false

演算

演算

足し算 引き算 掛け算 割り算

 

文字列連結

 

論理和 論理積

正しい演算

1  +  1

 

”abc”  +  “xyz”

 

true  &&  false

 

正常に実行できる

正しくない演算

1  +  “abc”

 

“foo”  +  true

 

false  &&  0

 

コンピュータを壊してしまう可能性

型と演算

数値  +  数値  …正しい

 

数値  +  文字列  …正しくない

型のない世界

変数

var  x  =  1

var  y  =  “abc”

x  +  y

関数

function  f  (  a,  b  )  {

      return a + b

}

f  (  x,  y  )

実行時エラー

実行するまで何が起きるか分からない

型のある世界

型注釈

var  x: number  =  1

var  y: string  =  “abc”

型検査

x  +  y

 

number  +  string

 

型エラー!

型注釈

function  f  (  a: number,  b: number  ): number  {

      return  a  +  b

}

型検査

f  (  x,  y  )

 

f: (  number,  number  )  =>  number

f  (  number,  string  )

 

型エラー!

静的解析

プログラムの実行前

そのプログラムが正しいかどうか分かる

型システム

型システムとは

全ての値に型を付ける

 

型の情報をもとに解析する

 

プログラムの正しさを “計算する”

人の為の型システム

人は不完全なので間違う

 

型システムは人の間違いを検出する

型注釈は正確なドキュメント

プログラマは型を示す

 

型は型検査により正しさを表す

 

事実が書かれたドキュメントができる

JavaScript

Object

Text

{
    foo: 100,
    bar: 200,
    baz: 300,
}
{
    foo: 100,
    bar: "hello",
    baz: {
      hoge: true,
    },
}

治安なし

複雑なObject

簡潔で難解なコメント

真実味の薄いJSDoc

JavaScript

高い表現力・柔軟に書ける

とりあえず動く

nullチェックしないでいいや

= 複雑で読みづらい

= なんで動いてるか分からん

= たった1行が消せない

TypeScript

Interface

Text

interface {
    foo: number
    bar: number
    baz: number
}
interface {
    foo: number
    bar: string
    baz: {
      hoge: boolean,
    }
}

治安あり

複雑でも正確

必要最低限のコメント

真実しかないJSDoc

TypeScript

型注釈の読み書きがムズい

コンパイルが通らん

nullチェックしなきゃいけない

= 正確なドキュメントを書く

= ヒューマンエラーを検知

= 潜在的実行時エラー見落とし回避

Pros / Cons

Pros: 簡単な型になる

誰でも複雑な型は嫌い

簡単な型注釈で事足りるように作る

自然に読みやすいコードへ

Pros: エラーは友達

ちょっと触ったらすぐコンパイルエラー!

想定外・潜在的なミスを指摘

変更/削除しちゃいけない部分

Cons: 抽象化・共通化

具体的でないコードの型は、往々にして複雑・難解

設計レベルで整理できなければ、無駄に疲弊する

Cons: 小規模プロジェクト

大規模・長期なプロジェクトで全域的に書く場合、型は有利

対して小規模・短期なプロジェクトでは、型は足手まとい

  型システム。

  そして、TypeScript。

It's over!

Made with Slides.com