WEBVTT

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

2
00:00:01.023 --> 00:00:05.113
今回はナンバー・イズ・ファイナイトを紹介します。

3
00:00:05.113 --> 00:00:10.567
これは、渡した値が有限の数値かどうかを判定する静的メソッドです。

4
00:00:10.567 --> 00:00:17.726
有限とは、無限大でもなく、計算できない特別な値でもない、普通に扱える数値のことです。

5
00:00:17.726 --> 00:00:23.976
この動画では、書き方と引数、記事の基本例、有限と判定される値とされない値、

6
00:00:23.976 --> 00:00:30.225
文字列を変換しない仕様、グローバルのイズ・ファイナイトとの違い、入力検証の実例、

7
00:00:30.225 --> 00:00:36.475
そして有限だけでは保証されない範囲まで、実行結果と一緒に学びます。

8
00:00:36.475 --> 00:00:40.991
割り算の結果が無限大になっていないか、入力が計算に使えるかを確認する入口として、

9
00:00:40.991 --> 00:00:45.508
とても頼りになる判定です。

10
00:00:45.508 --> 00:00:47.364
まず動作環境を確認します。

11
00:00:47.364 --> 00:00:51.504
イズ・ファイナイトはナンバーオブジェクトに備わる機能です。

12
00:00:51.504 --> 00:00:55.287
クロームでは十九以降、ファイアーフォックスでは十六以降、サファリでは九以降、

13
00:00:55.287 --> 00:00:59.069
エッジでは十二以降で使えます。

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

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

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

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

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

19
00:01:23.480 --> 00:01:24.968
書き方を確認します。

20
00:01:24.968 --> 00:01:30.028
ナンバーのあとにドットを書き、イズ・ファイナイトとカッコを続けます。

21
00:01:30.028 --> 00:01:32.558
引数は判定したい値が一つだけです。

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

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

24
00:01:40.742 --> 00:01:46.100
数値の形をした文字列を渡しても、文字列のままでは有限とは判定されません。

25
00:01:46.100 --> 00:01:52.201
スライドの例では、十二・五とゼロがどちらもトゥルーになることを実機で確認しました。

26
00:01:52.201 --> 00:01:54.285
ゼロも立派な有限の数値です。

27
00:01:54.285 --> 00:01:59.344
まずは、値を受け取って真偽値を返す、という基本の形を覚えてください。

28
00:01:59.344 --> 00:02:05.892
引数を二つ書いても判定されるのは先頭の一つだけなので、対象を一つに絞って渡してください。

29
00:02:05.892 --> 00:02:07.749
記事の基本例を見ます。

30
00:02:07.749 --> 00:02:15.681
十二・五を判定する行と、インフィニティ、つまり無限大を判定する行の、二行だけの短いコードです。

31
00:02:15.681 --> 00:02:21.588
実行結果はトゥルーとフォールスで、ノードの実機結果とも一致しています。

32
00:02:21.588 --> 00:02:25.639
十二・五は普通の有限な数値なのでトゥルー、無限大は有限ではないのでフォールス、

33
00:02:25.639 --> 00:02:29.689
という読み方です。

34
00:02:29.689 --> 00:02:36.103
記事でも、入力を変換した後に計算可能な数値か確認する場面が想定されています。

35
00:02:36.103 --> 00:02:41.672
まずはこの例をブラウザーのコンソールかノードで実行し、引数をマイナスの無限大に変えるとどうなるか、

36
00:02:41.672 --> 00:02:47.242
予測してから確かめてみてください。

37
00:02:47.242 --> 00:02:53.824
予測と結果が違ったときは、引数の型から見直すと原因にたどり着きやすくなります。

38
00:02:53.824 --> 00:02:56.629
有限と判定される値を幅広く見ます。

39
00:02:56.629 --> 00:03:01.579
四十二のような正の整数、マイナス七・二五のような負の小数、マイナスゼロも、

40
00:03:01.579 --> 00:03:06.529
すべてトゥルーになることを実機で確認しました。

41
00:03:06.529 --> 00:03:09.499
とても大きな有限の数もトゥルーです。

42
00:03:09.499 --> 00:03:15.770
ここで大事なのは、判定しているのはあくまで有限かどうかだけだ、という点です。

43
00:03:15.770 --> 00:03:19.400
小数でも、負の数でも、ゼロでもかまいません。

44
00:03:19.400 --> 00:03:24.185
整数であることや、正の数であることは条件に入っていません。

45
00:03:24.185 --> 00:03:32.765
そのため、整数だけを受け付けたい場合や、マイナスを除きたい場合は、別の判定を組み合わせる必要があります。

46
00:03:32.765 --> 00:03:35.900
その組み合わせは後の注意点で扱います。

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

48
00:03:38.734 --> 00:03:47.394
正の無限大、負の無限大、そしてナンと呼ばれる計算できない値は、すべてフォールスになることを実機で確認しました。

49
00:03:47.394 --> 00:03:53.063
例えば、一をゼロで割ると無限大になり、ゼロをゼロで割るとナンになります。

50
00:03:53.063 --> 00:03:59.676
こうした異常な結果をそのまま次の計算へ進めると、表示や集計が静かに壊れてしまいます。

51
00:03:59.676 --> 00:04:06.919
イズ・ファイナイトで早めに検出すれば、計算の手前で止めて、入力を見直す処理へつなげられます。

52
00:04:06.919 --> 00:04:12.115
異常な数値をまとめてはじけることが、このメソッドの大きな役割です。

53
00:04:12.115 --> 00:04:17.784
計算結果を受け取るたびに一度はさむ習慣をつけると、異常に早く気づけます。

54
00:04:17.784 --> 00:04:19.600
記事の境界例を見ます。

55
00:04:19.600 --> 00:04:25.048
数値の形をした文字列の十二をそのまま渡すと、結果はフォールスです。

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

57
00:04:31.982 --> 00:04:37.925
ヌルやトゥルーのような数値以外の値も、変換されずにフォールスになります。

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

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

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

61
00:04:56.250 --> 00:05:02.524
オブジェクトや配列を渡した場合も同様にフォールスとなり、例外にはなりません。

62
00:05:02.524 --> 00:05:08.131
名前のよく似た、グローバルなイズ・ファイナイトとの違いを知っておきましょう。

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

64
00:05:12.262 --> 00:05:18.163
そのため文字列の十二は、グローバル版ではトゥルーになることを実機で確認しました。

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

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

67
00:05:28.639 --> 00:05:35.425
数値であること自体も含めて厳密に確認したい場面では、変換しないナンバー版を選ぶのが基本です。

68
00:05:35.425 --> 00:05:39.704
名前が似ているメソッドほど、仕様の違いを意識してください。

69
00:05:39.704 --> 00:05:43.274
実務に近い実例として、入力値の検証を見ます。

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

71
00:05:50.576 --> 00:05:55.120
フォールスなら計算へ進めず、入力ミスとして扱う流れです。

72
00:05:55.120 --> 00:05:58.366
ここで記事が注意する落とし穴があります。

73
00:05:58.366 --> 00:06:04.207
空文字列をナンバーで変換するとゼロになり、有限と判定されてしまうのです。

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

75
00:06:08.589 --> 00:06:11.834
つまり空欄のまま計算が進んでしまいます。

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

77
00:06:16.865 --> 00:06:21.084
検証の順番まで含めて、実例として覚えておきましょう。

78
00:06:21.084 --> 00:06:22.408
注意点を挙げます。

79
00:06:22.408 --> 00:06:30.355
有限であることだけでは、整数であること、マイナスでないこと、安全に表せる範囲であることまでは保証されません。

80
00:06:30.355 --> 00:06:32.563
記事もこの点を明記しています。

81
00:06:32.563 --> 00:06:41.392
例えば十二・五は有限ですが整数ではなく、スライドの例でもイズ・インテジャーではフォールスになることを実機で確認しました。

82
00:06:41.392 --> 00:06:47.279
また、大きすぎる整数は内部で丸められ、見た目と違う値になっていることがあります。

83
00:06:47.279 --> 00:06:55.520
個数や金額のように条件が厳しい値では、有限の判定に加えて、整数かどうかの判定や範囲の確認を組み合わせてください。

84
00:06:55.520 --> 00:07:00.376
境界の値を先に決めておくと、どの判定を足すべきか迷わずに済みます。

85
00:07:00.376 --> 00:07:01.298
まとめです。

86
00:07:01.298 --> 00:07:07.905
イズ・ファイナイトは、値が有限の数値かどうかを、変換せずに厳密に判定するメソッドです。

87
00:07:07.905 --> 00:07:09.903
判断のポイントは三つです。

88
00:07:09.903 --> 00:07:15.280
まず、有限の数値だけがトゥルーで、無限大とナンはフォールスになること。

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

90
00:07:20.966 --> 00:07:29.570
そして、空文字列はゼロになってしまうので空欄の確認を先に行い、整数や範囲の条件は別の判定と組み合わせることです。

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

92
00:07:38.021 --> 00:07:39.404
お疲れさまでした。
