仕事ですぐに使えるTypeScript その4

目的

学習の記録と学びになった部分をアウトプットするため。

期限

対象書籍の読了・内容理解が8月中に完了していること。

対象

今回の対象は「プリミティブ」。

future-architect.github.io

著作権者:フューチャー株式会社(Future Corporation)様

変数

三行サマリ

リテラルとは

リテラルとは、それ以上分解できないシンプルなデータのこと。

booleanリテラル

  • true/falseの2つの真偽値をとるデータ型。
  • JavaScriptでは、Null、空文字、ゼロ、undefiend、NaNを変換するとfalseとなる。

ドモルガンの法則

if文が複雑なときにそれを簡単にするための法則。下記のような法則でNOTとANDとORの組み合わせを変換することができる。 特に下記の例では右側の式を左側に変換することがコードの可読性を高めることができる。 NOTの集合演算は基本的に普段の生活ではあまり出てこないので、集合のAND ORを考えてから逆転させる方が簡単にイメージすることができる。

!(P || Q) == !P && !Q
!(P&&Q) == !P || !Q 

数値型

  • JavaScriptでは64bitの浮動小数点数で扱っており、これはどのCPUをしようしていても基本的に同じ制度をもつ。
  • JavaScriptの正確な数値の上限は Number.MAX_SAFE_INTEGER、下限は Number.MIN_SAFE_INTEGER で調べることができる。
  • また、この数値が範囲内に収まっているかを確認したいときは、Number.isSafeInteger(値) という関数で調べることができる。

  • TypeScriptにはnumberbigint という二種類の数値型がある。

  • numberは浮動小数点を扱えるという点で、多くのケースでベストな選択肢になる。
  • bitintは整数のみしか扱えないものの、桁数の上限はない。しかしながら、"target: esnext" でしか扱うことpはできない。

  • また、number型は2進数で表した数値表現のため、0.1 + 0.2等、二進数で表現できない場合は数値に誤差ができてしまう。そのため、decimal.js等の外部ライブラリをしようして計算を行わなければならない。

const a = 0.1;
const b = 0.2;
console.log(a + b);
// 0.30000000000000004
  • 引数の中で最大値を求める
    • Math.max(x, y, z...)
    • Math.max(...array)
  • 引数の中で最小値を求める
    • Math.min(x, y, z...)
    • Math.min(...array)
  • 0以上1未満の擬似乱数を返す
    • Math.random()

Mathオブジェクトのメソッドは下記を参考にする。 future-architect.github.io

stringリテラル

  • JavaScirptの文字コードJavaと同様のUTF-16。絵文字など一部の文字列で1文字で表現しきれず二文字を使って1文字を表現する物をサロゲートペアと呼ぶ。
  • 範囲指定を行う場合は、絵文字の一部のみを拾ってしまう可能性があるので、絵文字も含めてテストをすることが大切。

文字コードの正規化

全角のアルファベットのAと半角のAはコードポイントが異なる。normalizeを使用することで、それを正規化することができる。 正規化する(フロント側でよし何やってあげる)ことで、ユーザーに全角を使って入力してもらうことを指定したり、そういったかっこ悪いUIをなくすことができる。

> "ABCアイウエオ㍻".normalize("NFKC")
'ABCアイウエオ平成'

undefinedとnull

  • TYpeScriptは補完がきくという風によく言われているが、本質的にはundefinedに遭遇するとわかっているコードを事前にチェックしてくれているということ。
  • TypeScriptでは関数の引数の数が呼び出しごとに異なる場合は、クエスチョンマークをつけることで、省略可能となる。
function hoge(a: string, b?: int) {
  console.log(`a: ${a}, b: ${b || 'empty'}`)
}