WEBVTT

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

2
00:00:01.036 --> 00:00:04.488
今回はナンバー・イズ・ナンを紹介します。

3
00:00:04.488 --> 00:00:12.428
これは、渡した値がナン、つまり数値として表せない特別な値かどうかを判定する静的メソッドです。

4
00:00:12.428 --> 00:00:18.124
ナンは、文字を数値へ変換しようとして失敗したときなどに生まれます。

5
00:00:18.124 --> 00:00:24.281
この動画では、書き方と引数、記事の基本例、トゥルーになる値とフォールスになる値、

6
00:00:24.281 --> 00:00:30.437
文字列を変換しない仕様、グローバルなイズ・ナンとの違い、等号では比べられない理由、

7
00:00:30.437 --> 00:00:36.594
そして入力検証の実例まで、実行結果と一緒に学びます。

8
00:00:36.594 --> 00:00:41.082
計算が静かに壊れる前に気づくための、大切な判定です。

9
00:00:41.082 --> 00:00:45.311
ナンを放置すると、合計や平均などの計算結果までナンに染まってしまうため、

10
00:00:45.311 --> 00:00:49.540
早めの検出が欠かせません。

11
00:00:49.540 --> 00:00:51.334
まず動作環境を確認します。

12
00:00:51.334 --> 00:00:54.785
イズ・ナンはナンバーオブジェクトに備わる機能です。

13
00:00:54.785 --> 00:00:58.512
クロームでは二十五以降、ファイアーフォックスでは十五以降、サファリでは九以降、

14
00:00:58.512 --> 00:01:02.239
エッジでは十二以降で使えます。

15
00:01:02.239 --> 00:01:07.484
アンドロイド版クロームでは二十五以降、アイオーエス版サファリでは九以降です。

16
00:01:07.484 --> 00:01:12.177
ノード・ジェイエスではゼロ・十・ゼロという古い版から対応しています。

17
00:01:12.177 --> 00:01:16.180
記事の互換性情報はエムディーエヌのデータに基づく目安です。

18
00:01:16.180 --> 00:01:20.735
現在使われている環境であれば、ほぼどこでもそのまま使えるでしょう。

19
00:01:20.735 --> 00:01:25.843
追加の読み込みは不要で、関数として備わっていることを実機でも確認済みです。

20
00:01:25.843 --> 00:01:31.640
迷ったときは、実際に使うブラウザーとノードの両方で一度実行して確かめるのが確実です。

21
00:01:31.640 --> 00:01:33.074
書き方を確認します。

22
00:01:33.074 --> 00:01:37.374
ナンバーのあとにドットを書き、イズ・ナンとカッコを続けます。

23
00:01:37.374 --> 00:01:39.811
引数は判定したい値が一つだけです。

24
00:01:39.811 --> 00:01:44.399
戻り値はトゥルーかフォールスの真偽値で、値そのものは返りません。

25
00:01:44.399 --> 00:01:47.553
大切なのは、引数を数値へ変換しないことです。

26
00:01:47.553 --> 00:01:50.850
文字などを渡しても、勝手に数値にはされません。

27
00:01:50.850 --> 00:01:58.734
スライドの例では、ナンそのものはトゥルー、四十二のような普通の数値はフォールスになることを実機で確認しました。

28
00:01:58.734 --> 00:02:04.612
まずは、値を受け取って、ナンかどうかだけを答える、という基本の形を覚えてください。

29
00:02:04.612 --> 00:02:08.339
引数を二つ書いても判定されるのは先頭の一つだけです。

30
00:02:08.339 --> 00:02:13.500
戻り値が真偽値なので、そのまま条件分岐の条件式に書けるのも便利な点です。

31
00:02:13.500 --> 00:02:15.219
記事の基本例を見ます。

32
00:02:15.219 --> 00:02:22.254
エイビーシーという文字をナンバーで数値へ変換し、その結果をイズ・ナンで判定するコードです。

33
00:02:22.254 --> 00:02:30.539
文字は数値になれないため、変換結果はナンになり、実行結果はトゥルーで、ノードの実機結果とも一致しています。

34
00:02:30.539 --> 00:02:34.603
読み方はシンプルで、変換が失敗した、ということです。

35
00:02:34.603 --> 00:02:40.387
記事でも、数値変換の結果がナンになったかを検出する場面が想定されています。

36
00:02:40.387 --> 00:02:45.545
まずはこの例をブラウザーのコンソールかノードで実行し、引数の文字を数字の並びに変えるとどうなるか、

37
00:02:45.545 --> 00:02:50.704
予測してから確かめてみてください。

38
00:02:50.704 --> 00:02:56.800
予測してから実行する習慣をつけると、変換と判定の役割分担が自然と身につきます。

39
00:02:56.800 --> 00:02:58.769
トゥルーになる値を確認します。

40
00:02:58.769 --> 00:03:01.919
結論から言うと、トゥルーになるのはナンだけです。

41
00:03:01.919 --> 00:03:08.876
ナンを直接渡した場合も、ゼロをゼロで割って生まれたナンも、どちらもトゥルーになることを実機で確認しました。

42
00:03:08.876 --> 00:03:13.338
先ほどの基本例のように、文字の変換に失敗して生まれたナンも同じです。

43
00:03:13.338 --> 00:03:16.620
生まれ方が違っても、ナンであれば必ず検出できます。

44
00:03:16.620 --> 00:03:22.133
逆に言えば、トゥルーという結果は、その値が計算に使えない状態だという強いサインです。

45
00:03:22.133 --> 00:03:26.989
ここで処理を止めて、入力や変換の過程を見直す合図として受け取ってください。

46
00:03:26.989 --> 00:03:32.108
どの計算からナンが生まれたのかをたどる手がかりとしても、この判定は役立ちます。

47
00:03:32.108 --> 00:03:34.814
フォールスになる代表例を確認します。

48
00:03:34.814 --> 00:03:39.024
四十二のような普通の数値、ゼロはもちろんフォールスです。

49
00:03:39.024 --> 00:03:41.430
そして注意したいのが無限大です。

50
00:03:41.430 --> 00:03:47.745
正の無限大も負の無限大も、ナンではないのでフォールスになることを実機で確認しました。

51
00:03:47.745 --> 00:03:56.165
記事もこの点を明記していて、有限かどうかまで確かめたい場合は、イズ・ファイナイトを併せて使うよう案内しています。

52
00:03:56.165 --> 00:03:59.172
イズ・ナンはあくまでナン専用の判定です。

53
00:03:59.172 --> 00:04:06.389
異常な数値をまとめてはじきたいのか、ナンだけを見つけたいのか、目的に合わせて使い分けてください。

54
00:04:06.389 --> 00:04:11.952
目的が違う判定を取り違えると、異常を見逃す原因になるので注意してください。

55
00:04:11.952 --> 00:04:13.730
記事の境界例を見ます。

56
00:04:13.730 --> 00:04:18.901
エイビーシーという文字列をそのまま渡すと、結果はフォールスです。

57
00:04:18.901 --> 00:04:25.204
一方、ナンバーで変換してから渡すとトゥルーになり、どちらも実機と一致しました。

58
00:04:25.204 --> 00:04:29.567
文字列そのものはナンではない、というのがポイントです。

59
00:04:29.567 --> 00:04:33.284
ヌルや未定義の値、オブジェクトを渡しても、変換されずにフォールスとなり、

60
00:04:33.284 --> 00:04:37.001
例外にはなりません。

61
00:04:37.001 --> 00:04:41.203
これは、勝手に変換しない厳しい判定だということです。

62
00:04:41.203 --> 00:04:48.799
入力が文字列で届く場面では、先に自分で変換し、その結果を判定する、という順番を守ってください。

63
00:04:48.799 --> 00:04:54.940
変換と判定を分けて書くことで、どこで数値になったのかが読み手にも伝わります。

64
00:04:54.940 --> 00:04:59.827
名前のよく似た、グローバルなイズ・ナンとの違いを知っておきましょう。

65
00:04:59.827 --> 00:05:03.852
グローバル版は、引数を先に数値へ変換してから判定します。

66
00:05:03.852 --> 00:05:12.334
そのため文字列のエイビーシーは、変換に失敗してナンになるので、グローバル版ではトゥルーになることを実機で確認しました。

67
00:05:12.334 --> 00:05:16.215
一方、今回のナンバー版は変換しないのでフォールスです。

68
00:05:16.215 --> 00:05:22.540
同じ入力でも結果が正反対になるため、どちらを使っているかでプログラムの意味が変わります。

69
00:05:22.540 --> 00:05:29.152
数値のナンであることだけを厳密に確認したい場面では、変換しないナンバー版を選ぶのが基本です。

70
00:05:29.152 --> 00:05:34.040
名前が似ているメソッドほど、仕様の違いを意識して選ぶことが大切です。

71
00:05:34.040 --> 00:05:37.364
記事が注意する、もう一つの落とし穴を見ます。

72
00:05:37.364 --> 00:05:43.409
ナンとナンを等号三つで比べても、結果はフォールスになることを実機で確認しました。

73
00:05:43.409 --> 00:05:48.697
ナンは、自分自身とさえ等しくない、という特別なルールを持つ値なのです。

74
00:05:48.697 --> 00:05:54.893
そのため、もし値がナンかどうかを等号で判定しようとすると、永遠に見つけられません。

75
00:05:54.893 --> 00:05:57.915
判定には必ずイズ・ナンを使ってください。

76
00:05:57.915 --> 00:06:03.506
スライドの二行目では、同じナンに対してイズ・ナンがトゥルーを返しています。

77
00:06:03.506 --> 00:06:08.794
比べ方を間違えると静かに失敗するので、ここは確実に覚えておきましょう。

78
00:06:08.794 --> 00:06:13.932
配列の中からナンを探すときも、等号ではなくこの判定を条件に使います。

79
00:06:13.932 --> 00:06:17.028
実務に近い実例として、入力値の検証を見ます。

80
00:06:17.028 --> 00:06:23.360
フォームなどから届いた文字列は、まずナンバーで変換し、その結果がナンかどうかを判定します。

81
00:06:23.360 --> 00:06:27.160
トゥルーなら計算へ進めず、入力ミスとして扱う流れです。

82
00:06:27.160 --> 00:06:29.693
ここで注意したい落とし穴があります。

83
00:06:29.693 --> 00:06:37.433
空文字列をナンバーで変換するとゼロになり、イズ・ナンではフォールス、つまり正常な数値として通ってしまうのです。

84
00:06:37.433 --> 00:06:41.232
スライドの最後の行でも、その動きを実機で確認しました。

85
00:06:41.232 --> 00:06:45.594
これを防ぐには、変換の前に空欄かどうかを先に確認してください。

86
00:06:45.594 --> 00:06:48.409
検証の順番まで含めて覚えておきましょう。

87
00:06:48.409 --> 00:06:52.912
入力の入口で一度はさむ習慣をつけると、異常な値に早く気づけます。

88
00:06:52.912 --> 00:06:53.880
まとめです。

89
00:06:53.880 --> 00:07:00.170
イズ・ナンは、値が数値のナンかどうかを、変換せずに厳密に判定するメソッドです。

90
00:07:00.170 --> 00:07:02.266
判断のポイントは三つです。

91
00:07:02.266 --> 00:07:08.073
まず、トゥルーになるのはナンだけで、数値も無限大もフォールスになること。

92
00:07:08.073 --> 00:07:14.040
次に、文字列は変換されないため、入力は先にナンバーで変換してから渡すこと。

93
00:07:14.040 --> 00:07:24.201
そして、ナンは等号では比べられないので判定には必ずこのメソッドを使い、有限かどうかはイズ・ファイナイトで別に確かめることです。

94
00:07:24.201 --> 00:07:32.910
まずは記事の基本例をコンソールで実行し、引数を数値や文字列に変えて、結果を予測してから確かめてみてください。

95
00:07:32.910 --> 00:07:34.362
お疲れさまでした。

96
00:07:34.362 --> 00:07:40.652
小さな判定ですが、計算全体の信頼性を守る入口として、ぜひ使いこなしてください。
