WEBVTT

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

2
00:00:01.123 --> 00:00:04.490
今回はパース・フロートを紹介します。

3
00:00:04.490 --> 00:00:10.477
これは、文字列の先頭から小数を読み取るためのグローバル関数です。

4
00:00:10.477 --> 00:00:19.270
たとえば、重さや長さのように単位が付いた文字列から、数値の部分だけを取り出す場面で活躍します。

5
00:00:19.270 --> 00:00:26.067
この動画では、書き方と引数と戻り値、記事の基本例、先頭から読んで途中で止まる仕組み、

6
00:00:26.067 --> 00:00:32.865
失敗したときの扱い、カンマや指数表記の境界条件、整数専用のパース・イントとの違い、

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

8
00:00:39.662 --> 00:00:45.462
文字列を数値へ変える入口として、最初に覚えておきたい関数です。

9
00:00:45.462 --> 00:00:47.248
まず動作環境を確認します。

10
00:00:47.248 --> 00:00:53.569
パース・フロートは、オブジェクトを通さず関数名を直接書いて使う、古くからある標準の関数です。

11
00:00:53.569 --> 00:00:59.615
クロームとファイアーフォックス、サファリでは初代の版から、エッジでは十二以降で使えます。

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

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

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

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

16
00:01:17.889 --> 00:01:21.874
迷ったときは、使う環境で一度実行して確かめるのが確実です。

17
00:01:21.874 --> 00:01:23.718
書き方を確認します。

18
00:01:23.718 --> 00:01:29.434
関数名を書いて、カッコの中に読み取りたい値を一つだけ渡します。

19
00:01:29.434 --> 00:01:36.440
引数はまず文字列へ変換され、その先頭から数値として読める部分が解析されます。

20
00:01:36.440 --> 00:01:39.206
戻り値はナンバー型の数値です。

21
00:01:39.206 --> 00:01:49.163
スライドの例では、三・一四という文字列が、数値の三・一四になり、型もナンバーであることを実機で確認しました。

22
00:01:49.163 --> 00:01:53.772
大切なのは、文字列全体が数値でなくてもよい点です。

23
00:01:53.772 --> 00:01:58.382
先頭に数値があれば、その部分だけが取り出されます。

24
00:01:58.382 --> 00:02:05.204
逆に、先頭から数値として読めなければ、例外ではなくナンという値が返ります。

25
00:02:05.204 --> 00:02:08.523
まずはこの基本の形を覚えてください。

26
00:02:08.523 --> 00:02:10.295
記事の基本例を見ます。

27
00:02:10.295 --> 00:02:17.220
十二・五キログラムという、数値に単位が付いた文字列をパース・フロートへ渡すコードです。

28
00:02:17.220 --> 00:02:21.891
実行結果は十二・五で、ノードの実機結果とも一致しています。

29
00:02:21.891 --> 00:02:27.689
末尾の単位の文字は無視され、先頭の小数だけが数値として取り出されました。

30
00:02:27.689 --> 00:02:34.292
読み方はシンプルで、単位付きデータから計算に使える数値を抜き出す、ということです。

31
00:02:34.292 --> 00:02:36.225
ただし注意点もあります。

32
00:02:36.225 --> 00:02:40.251
単位が正しいかどうかまで、この関数は確認しません。

33
00:02:40.251 --> 00:02:45.405
キログラムなのかグラムなのかといった検証は、別の処理で必要です。

34
00:02:45.405 --> 00:02:52.975
まずはこの例をコンソールかノードで実行し、数値の部分を変えて予測してから確かめてみてください。

35
00:02:52.975 --> 00:02:55.435
先頭から読む仕組みを詳しく見ます。

36
00:02:55.435 --> 00:02:58.907
まず、文字列の先頭にある空白は読み飛ばされます。

37
00:02:58.907 --> 00:03:05.129
そのあとにマイナスの符号があれば符号として読み、小数点を含む数字の並びを読み取ります。

38
00:03:05.129 --> 00:03:13.521
スライドの一行目では、空白とマイナス記号の付いた文字列から、マイナスゼロ・二五が取り出せたことを実機で確認しました。

39
00:03:13.521 --> 00:03:19.598
二行目のように、ゼロを省略して小数点から書き始めても、ゼロ・五として正しく読めます。

40
00:03:19.598 --> 00:03:24.083
逆に、数字より前に文字があると、そこで読み取りは始まりません。

41
00:03:24.083 --> 00:03:29.147
どこから数値が始まるかという先頭の位置が、結果を左右するポイントです。

42
00:03:29.147 --> 00:03:32.218
読み取りが途中で止まる動きを確認します。

43
00:03:32.218 --> 00:03:36.748
パース・フロートは、先頭から数値として読める間だけ読み進め、読めない文字が出た時点で止まり、

44
00:03:36.748 --> 00:03:41.279
そこまでの部分を返します。

45
00:03:41.279 --> 00:03:48.957
スライドの一行目では、小数点が二つある文字列が、十二・五まで読んで止まったことを実機で確認しました。

46
00:03:48.957 --> 00:03:53.717
ここで、よく似た変換であるナンバーとの違いも押さえてください。

47
00:03:53.717 --> 00:03:57.557
ナンバーは文字列全体が数値でないとナンになります。

48
00:03:57.557 --> 00:04:01.473
単位付きの文字列を渡すと、ナンバーではナン、パース・フロートでは十二・五と、

49
00:04:01.473 --> 00:04:05.388
結果がはっきり分かれます。

50
00:04:05.388 --> 00:04:10.149
ゆるく先頭だけ読むのか、全体を厳密に読むのかで選んでください。

51
00:04:10.149 --> 00:04:12.845
失敗したときの動きを見ます。

52
00:04:12.845 --> 00:04:18.141
記事の境界例でも確かめられているように、先頭が文字の文字列は、後ろに数字があっても読み取れず、

53
00:04:18.141 --> 00:04:23.438
ナンが返ります。

54
00:04:23.438 --> 00:04:25.941
空文字列も同じくナンです。

55
00:04:25.941 --> 00:04:36.341
どちらも例外は発生せず、値としてナンが返るだけなので、そのまま計算に使うと結果までナンに染まってしまいます。

56
00:04:36.341 --> 00:04:42.504
そこで判定には、前回学んだナンバー・イズ・ナンを組み合わせます。

57
00:04:42.504 --> 00:04:52.904
スライドの二行目では、空文字列の読み取り結果がナンかどうかを判定し、トゥルーになることを実機で確認しました。

58
00:04:52.904 --> 00:04:59.452
読み取った直後に必ず失敗を確かめる、という流れを習慣にしてください。

59
00:04:59.452 --> 00:05:01.614
記事の境界例をもう一つ見ます。

60
00:05:01.614 --> 00:05:03.920
一つ目はカンマを含む文字列です。

61
00:05:03.920 --> 00:05:11.125
地域によっては小数点をカンマで書きますが、パース・フロートが小数点として認めるのはピリオドだけです。

62
00:05:11.125 --> 00:05:14.944
そのためカンマの手前で読み取りが止まり、結果は一になることを実機で確認し、

63
00:05:14.944 --> 00:05:18.763
記事の期待出力とも一致しました。

64
00:05:18.763 --> 00:05:24.384
カンマ付きの書式を扱うときは、先にピリオドへ置き換えるなどの前処理が必要です。

65
00:05:24.384 --> 00:05:28.563
もう一つ、イーという文字を使った指数表記は正しく読めます。

66
00:05:28.563 --> 00:05:33.030
スライドの二行目では、一イー三が千になったことを確認しました。

67
00:05:33.030 --> 00:05:37.498
読める書式と読めない書式の境目を、ここで整理しておきましょう。

68
00:05:37.498 --> 00:05:42.231
次に読む記事でもある、整数専用のパース・イントとの違いを整理します。

69
00:05:42.231 --> 00:05:46.060
どちらも文字列の先頭から読み取る点は同じですが、パース・イントは整数部分だけを読み、

70
00:05:46.060 --> 00:05:49.888
小数点以下は切り捨てます。

71
00:05:49.888 --> 00:05:53.508
一方、今回のパース・フロートは小数部分まで読みます。

72
00:05:53.508 --> 00:06:02.278
スライドでは、同じ単位付きの文字列に対して、パース・イントは十二、パース・フロートは十二・五になったことを実機で確認しました。

73
00:06:02.278 --> 00:06:06.942
個数や件数のように整数で十分な場面ではパース・イント、重さや金額のように小数が必要な場面ではパース・フロート、

74
00:06:06.942 --> 00:06:11.606
という選び方が基本です。

75
00:06:11.606 --> 00:06:15.086
名前の最後の部分が、読む対象の違いを表しています。

76
00:06:15.086 --> 00:06:19.246
実務に近い実例として、入力値の変換と検証を見ます。

77
00:06:19.246 --> 00:06:25.735
フォームなどから届く値は文字列なので、まずパース・フロートで数値へ変換します。

78
00:06:25.735 --> 00:06:34.387
スライドでは、身長を表す文字列が数値の一七ゼロ・五になり、ナンではないことも合わせて実機で確認しました。

79
00:06:34.387 --> 00:06:39.878
もし結果がナンなら、計算へ進めずに入力ミスとして扱う流れにします。

80
00:06:39.878 --> 00:06:46.867
あわせて注意したいのは、この関数は先頭さえ数値なら後ろの文字を無視してしまう点です。

81
00:06:46.867 --> 00:06:53.106
単位違いや想定外の入力まで通してしまうため、厳密な検証が必要な場面では、

82
00:06:53.106 --> 00:06:59.346
全体を変換するナンバーと使い分けるか、入力形式そのものを別に確認してください。

83
00:06:59.346 --> 00:07:00.420
まとめです。

84
00:07:00.420 --> 00:07:06.686
パース・フロートは、文字列の先頭から小数を読み取るグローバル関数です。

85
00:07:06.686 --> 00:07:09.013
判断のポイントは三つです。

86
00:07:09.013 --> 00:07:17.247
まず、先頭の空白を読み飛ばし、符号と小数点を含む数値を、読める範囲まで読み取って止まること。

87
00:07:17.247 --> 00:07:21.902
次に、先頭から読めない場合や、カンマ付きの書式では失敗や途中終了になり、

88
00:07:21.902 --> 00:07:26.556
結果はナンや手前の値になること。

89
00:07:26.556 --> 00:07:35.149
そして、読み取った直後にナンバー・イズ・ナンで失敗を確認し、単位や形式の検証は別に行うことです。

90
00:07:35.149 --> 00:07:44.279
まずは記事の基本例をコンソールで実行し、単位やカンマに変えて、結果を予測してから確かめてみてください。

91
00:07:44.279 --> 00:07:45.890
お疲れさまでした。
