WEBVTT

1
00:00:00.000 --> 00:00:00.996
こんにちは。

2
00:00:00.996 --> 00:00:05.148
今回はジャバスクリプトのマス・サインを紹介します。

3
00:00:05.148 --> 00:00:09.799
これは、数値の符号を調べる、組み込みの静的メソッドです。

4
00:00:09.799 --> 00:00:14.200
前回と今回の在庫数を比べるとき、何個変わったかという大きさと、増えたか減ったかという向きは、

5
00:00:14.200 --> 00:00:18.601
別の情報です。

6
00:00:18.601 --> 00:00:23.085
差分が二十でも三でも、増加という表示は共通にできます。

7
00:00:23.085 --> 00:00:30.061
マス・サインは、正の数なら一、負の数ならマイナス一を返し、ゼロはゼロのまま返します。

8
00:00:30.061 --> 00:00:35.541
この動画では、在庫の差分を増加、減少、変化なしの三つに分類する例を中心に、

9
00:00:35.541 --> 00:00:41.022
基本、戻り値の読み方、失敗しやすい注意点の順に解説します。

10
00:00:41.022 --> 00:00:45.340
まずは、符号という言葉に慣れることから始めましょう。

11
00:00:45.340 --> 00:00:46.754
まず動作環境です。

12
00:00:46.754 --> 00:00:53.351
マス・サインは、二千十五年九月以降、ブラウザー間で広く利用できる機能とされています。

13
00:00:53.351 --> 00:00:58.378
現在のクローム、エッジ、ファイアフォックス、サファリで使えます。

14
00:00:58.378 --> 00:01:03.876
ノード・ジェイエスでも、追加パッケージや実験用の設定なしで動作します。

15
00:01:03.876 --> 00:01:12.201
ドムや外部ライブラリーを使わないため、同じ分類コードをブラウザーとノード・ジェイエスの両方で利用できます。

16
00:01:12.201 --> 00:01:18.956
古い実行環境を対象に含める場合は、タイプオブで関数として存在するかを確認してください。

17
00:01:18.956 --> 00:01:25.710
記事の確認日は二千二十六年十月二十三日で、ノード・ジェイエスの対象は二十二系以降です。

18
00:01:25.710 --> 00:01:29.480
対応状況は、導入を判断する大切な材料になります。

19
00:01:29.480 --> 00:01:31.527
基本の書き方を見ましょう。

20
00:01:31.527 --> 00:01:39.085
マス・サインは、マスオブジェクトの静的メソッドなので、マスのインスタンスを作る必要はありません。

21
00:01:39.085 --> 00:01:43.179
いつもマス・サイン、かっこ、という形で呼び出します。

22
00:01:43.179 --> 00:01:46.801
引数は、符号を調べたい数値を一つだけ渡します。

23
00:01:46.801 --> 00:01:49.163
戻り値は、符号を表す数値です。

24
00:01:49.163 --> 00:01:57.351
たとえば入力が五なら結果は一、入力がマイナス三なら結果はマイナス一、入力がゼロなら結果はゼロになります。

25
00:01:57.351 --> 00:02:01.445
大きさの情報は捨てられ、向きだけが残る点が特徴です。

26
00:02:01.445 --> 00:02:05.067
処理は同期的で、非同期の待ち合わせは不要です。

27
00:02:05.067 --> 00:02:09.948
慣れてきたら、負の数や小数でも同じ書き方で試してみてください。

28
00:02:09.948 --> 00:02:13.044
戻り値のパターンを整理しましょう。

29
00:02:13.044 --> 00:02:15.047
全部で五通りあります。

30
00:02:15.047 --> 00:02:21.057
正の数には一、負の数にはマイナス一、ゼロにはゼロ、マイナスゼロにはマイナスゼロ、

31
00:02:21.057 --> 00:02:27.066
そして数値ではないことを示すナンにはナンが返ります。

32
00:02:27.066 --> 00:02:33.440
マイナスゼロまで区別される点が特徴で、符号付きゼロをそのまま保ちます。

33
00:02:33.440 --> 00:02:39.814
ただし、普通の等号で比べるとマイナスゼロとゼロは等しいと判定されます。

34
00:02:39.814 --> 00:02:47.645
そのため、あとで見る分類の例では、ゼロとマイナスゼロをまとめて変化なしとして扱います。

35
00:02:47.645 --> 00:02:51.287
まずは五通りあることを押さえてください。

36
00:02:51.287 --> 00:02:55.840
入力と結果を一対一で対応させて覚えるのが近道です。

37
00:02:55.840 --> 00:02:58.550
注意しておきたいのが、暗黙の型変換です。

38
00:02:58.550 --> 00:03:02.614
マス・サイン自体は、引数を数値へ変換してから符号を調べます。

39
00:03:02.614 --> 00:03:07.762
そのため、文字列のマイナス三も数値として扱われ、結果はマイナス一になります。

40
00:03:07.762 --> 00:03:11.555
引数を省略するとナンになり、ヌルはゼロとして扱われます。

41
00:03:11.555 --> 00:03:17.110
また、ビッグイントやシンボルを渡すと、数値への変換ができずタイプエラーになります。

42
00:03:17.110 --> 00:03:20.090
マス・サインは入力検証の関数ではありません。

43
00:03:20.090 --> 00:03:24.087
数値だけを受け付けたい処理では、呼び出す前にナンバー・イズ・ファイナイトなどで、

44
00:03:24.087 --> 00:03:28.083
有限の数値かどうかを確かめてください。

45
00:03:28.083 --> 00:03:32.012
この変換の仕組みを知っておくと、思わぬ判定ミスを防げます。

46
00:03:32.012 --> 00:03:33.746
ここからは実例です。

47
00:03:33.746 --> 00:03:41.031
前回値と今回値を受け取り、変化を分類する、クラシファイチェンジという関数を考えます。

48
00:03:41.031 --> 00:03:49.356
この関数は、まず前回値と今回値が有限の数値かどうかを確かめ、問題があればタイプエラーを投げます。

49
00:03:49.356 --> 00:03:53.345
次に、今回値から前回値を引いて差分を求めます。

50
00:03:53.345 --> 00:03:59.069
引き算の順序が大切で、逆にすると増減の判定も逆になってしまいます。

51
00:03:59.069 --> 00:04:07.567
さらに、極端に大きな値を引くと差分が無限大になる場合があるため、差分自体も有限かどうか確かめます。

52
00:04:07.567 --> 00:04:12.077
そのうえでマス・サインに差分を渡し、方向を求めます。

53
00:04:12.077 --> 00:04:17.280
検証と計算と表示名の決定までを、一つの関数にまとめています。

54
00:04:17.280 --> 00:04:19.234
期待出力を読みましょう。

55
00:04:19.234 --> 00:04:25.585
ノートは前回が十、今回が十四で、差分は四、方向は一となり、増加に分類されます。

56
00:04:25.585 --> 00:04:32.099
ペンは前回が八、今回が五で、差分はマイナス三、方向はマイナス一となり、減少です。

57
00:04:32.099 --> 00:04:38.124
付箋は前回も今回も六で、差分はゼロ、方向もゼロとなり、変化なしになります。

58
00:04:38.124 --> 00:04:43.173
関数が返すオブジェクトには、差分と方向と表示名が入っています。

59
00:04:43.173 --> 00:04:49.035
方向だけでなく元の差分も残しておく設計なので、表示にも集計にも使えます。

60
00:04:49.035 --> 00:04:53.432
文字列の十四を渡した場合はタイプエラーが表示されます。

61
00:04:53.432 --> 00:04:59.457
これらの出力は、ノード・ジェイエスの実機でも同じになることを確認済みです。

62
00:04:59.457 --> 00:05:04.180
三つのケースがそろうことで、分類の全体像がはっきりします。

63
00:05:04.180 --> 00:05:07.013
判定の書き方でよくある失敗です。

64
00:05:07.013 --> 00:05:16.574
もしマス・サインの結果を、そのまま条件式の真偽だけで判断すると、一もマイナス一も真として扱われてしまいます。

65
00:05:16.574 --> 00:05:20.647
その分岐だけでは、増加と減少を区別できません。

66
00:05:20.647 --> 00:05:28.437
方向ごとに処理したい場合は、実例のように一、マイナス一、ゼロをそれぞれ比較してください。

67
00:05:28.437 --> 00:05:30.739
もう一つ注意点があります。

68
00:05:30.739 --> 00:05:40.123
検証をせずに、正でも負でもなければ変化なしとしてしまうと、ナンまで変化なしに分類してしまう危険があります。

69
00:05:40.123 --> 00:05:46.143
未知の入力は先に検証し、正常な数値だけを分類へ進めることが大切です。

70
00:05:46.143 --> 00:05:51.632
例外は同期的に発生するので、トライキャッチで受け止められます。

71
00:05:51.632 --> 00:05:54.535
負のゼロの扱いも確認しておきましょう。

72
00:05:54.535 --> 00:05:58.661
ジャバスクリプトにはマイナスゼロという値があり、マス・サインにマイナスゼロを渡すと、

73
00:05:58.661 --> 00:06:02.787
マイナスゼロが返ります。

74
00:06:02.787 --> 00:06:07.066
ただし、マイナスゼロとゼロを等号で比べると真になります。

75
00:06:07.066 --> 00:06:14.096
そのため、方向がゼロかどうかという判定では、ゼロもマイナスゼロもまとめて変化なしになります。

76
00:06:14.096 --> 00:06:17.305
在庫や件数の表示では、この扱いが自然です。

77
00:06:17.305 --> 00:06:23.265
一方で、符号付きゼロ自体に意味がある数値計算へ転用する場合は注意してください。

78
00:06:23.265 --> 00:06:28.002
表示用の分類と、計算用の値は分けて設計すると、混乱を防げます。

79
00:06:28.002 --> 00:06:32.892
業務上の状態としてマイナスゼロを持ち込まないこともポイントです。

80
00:06:32.892 --> 00:06:34.660
小数の誤差への対処です。

81
00:06:34.660 --> 00:06:38.492
マス・サインは、小さな正負の値もそのまま分類します。

82
00:06:38.492 --> 00:06:42.691
たとえば、ゼロ点一たすゼロ点二ひくゼロ点三は、浮動小数点の誤差で厳密なゼロにはならず、

83
00:06:42.691 --> 00:06:46.891
ごく小さな正の値が残ります。

84
00:06:46.891 --> 00:06:51.753
そのため、変化していないはずなのに増加と判定される場合があります。

85
00:06:51.753 --> 00:06:59.121
計測値を扱うなら、絶対値がゼロ点ゼロ一未満なら変化なし、といった業務上の許容差を先に定めてください。

86
00:06:59.121 --> 00:07:04.573
その範囲をゼロへそろえてからマス・サインを使うと、誤差に振り回されません。

87
00:07:04.573 --> 00:07:08.847
許容差は、単位と必要な精度に合わせて決めることが大切です。

88
00:07:08.847 --> 00:07:13.120
一律の小さな定数を置くだけでは、用途に合うとは限りません。

89
00:07:13.120 --> 00:07:15.086
活用場面とまとめです。

90
00:07:15.086 --> 00:07:23.844
マス・サインは、在庫管理以外にも、アクセス件数の前回比較や、目標値に対する過不足の表示に使えます。

91
00:07:23.844 --> 00:07:31.887
変化量の単位が異なっても、方向をマイナス一、ゼロ、一で扱えば、表示のルールを共有できます。

92
00:07:31.887 --> 00:07:34.747
ただし、増加と良い変化は別です。

93
00:07:34.747 --> 00:07:40.109
販売数の増加と障害件数の増加では、意味がまったく異なります。

94
00:07:40.109 --> 00:07:46.722
数値の分類を行う関数と、指標ごとに評価を行う処理を分けて設計してください。

95
00:07:46.722 --> 00:07:52.263
マス・サインの結果だけで表示色や評価を決めないことがコツです。

96
00:07:52.263 --> 00:07:53.871
お疲れさまでした。

97
00:07:53.871 --> 00:08:00.127
マス・サインは、差分の向きだけを取り出す関数だと覚えておいてください。

98
00:08:00.127 --> 00:08:06.740
まずはサンプルの在庫数を変えて、三つのケースを自分で確かめてみてください。
