WEBVTT

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

2
00:00:01.033 --> 00:00:03.958
今回はマスのマックスを紹介します。

3
00:00:03.958 --> 00:00:10.670
これは、渡した複数の数値の中から、一番大きい値を返してくれる静的メソッドです。

4
00:00:10.670 --> 00:00:17.726
たとえばテストの得点が並んでいるとき、最高点はどれかを知りたい場面はよくあります。

5
00:00:17.726 --> 00:00:23.922
自分で一つずつ比べて探す手間を、このメソッドが一手に引き受けてくれます。

6
00:00:23.922 --> 00:00:31.752
この動画では、書き方と引数、記事の基本例、配列を渡す方法、引数がない場合や数値に変換できない値が混ざった場合の動き、

7
00:00:31.752 --> 00:00:39.583
そして大きな配列を扱うときの注意点まで、実行結果と一緒に学びます。

8
00:00:39.583 --> 00:00:42.164
まずは全体像をつかみましょう。

9
00:00:42.164 --> 00:00:48.532
似た役割のメソッドに最小値を返すミニマムもあり、セットで覚えると便利です。

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

11
00:00:50.244 --> 00:00:54.852
マックスはマスオブジェクトに最初から備わる、歴史のとても長い機能です。

12
00:00:54.852 --> 00:01:00.909
クロームとファイアーフォックスでは一以降、サファリでは一以降、エッジでは十二以降で使えます。

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

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

15
00:01:09.205 --> 00:01:14.340
現在使われている環境であれば、ほぼどこでもそのまま使えると考えてよいでしょう。

16
00:01:14.340 --> 00:01:18.685
スライドの通り、関数として備わっていることを実機でも確認済みです。

17
00:01:18.685 --> 00:01:20.397
追加の読み込みは不要です。

18
00:01:20.397 --> 00:01:25.664
迷ったときは、対象のブラウザーで小さいコードを一度実行して確かめるのが確実です。

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

20
00:01:27.293 --> 00:01:31.691
マスのあとにドットを書き、マックスとカッコを続けます。

21
00:01:31.691 --> 00:01:36.251
カッコの中には、比べたい数値をカンマで区切って並べます。

22
00:01:36.251 --> 00:01:41.626
引数の個数に決まりはなく、二つでも十個でも、一つだけでも動きます。

23
00:01:41.626 --> 00:01:44.721
戻り値は、その中で一番大きい数値です。

24
00:01:44.721 --> 00:01:53.516
スライドの例では、三と七と五の中から七が返り、一つだけ渡した場合はその値自体が返ることを実機で確認しました。

25
00:01:53.516 --> 00:01:57.100
比べる対象は変数でも計算式でもかまいません。

26
00:01:57.100 --> 00:02:01.497
まずは数値を直接並べる、この基本の形を覚えてください。

27
00:02:01.497 --> 00:02:07.524
カッコの中の順番は結果に影響しないため、並び順を気にする必要はありません。

28
00:02:07.524 --> 00:02:09.298
記事の基本例を見ます。

29
00:02:09.298 --> 00:02:16.073
七十二、九十一、八十五という三人分の得点を配列に入れ、マックスで最高点を表示します。

30
00:02:16.073 --> 00:02:20.589
実行結果は九十一で、ノードの実機結果とも一致しています。

31
00:02:20.589 --> 00:02:25.106
ここで大切なのが、配列の前に書いたドット三つの記号です。

32
00:02:25.106 --> 00:02:32.041
これはスプレッド構文と呼ばれ、配列の中身を一つずつの引数として広げて渡す働きをします。

33
00:02:32.041 --> 00:02:37.848
配列をそのまま渡す書き方との違いは、次のセクションでも改めて確認します。

34
00:02:37.848 --> 00:02:45.268
まずはこの例をコンソールで実行し、得点を一つ変えたら結果がどう変わるか予測してみてください。

35
00:02:45.268 --> 00:02:50.752
この書き方は、人数が増えても配列に足すだけで対応できる点も便利です。

36
00:02:50.752 --> 00:02:53.215
いろいろな数で動きを確かめます。

37
00:02:53.215 --> 00:03:01.837
マイナス五、マイナス二、マイナス九のように負の数だけを渡した場合は、ゼロに一番近いマイナス二が最大値になります。

38
00:03:01.837 --> 00:03:06.148
絶対値の大きさで比べるわけではない点に注意してください。

39
00:03:06.148 --> 00:03:10.458
小数の場合は、二・五と二・四を比べると二・五が返ります。

40
00:03:10.458 --> 00:03:13.691
整数でなければならない決まりはありません。

41
00:03:13.691 --> 00:03:17.848
また、無限大を一つでも渡すと、結果は無限大になります。

42
00:03:17.848 --> 00:03:21.081
スライドの結果はすべて実機で確認済みです。

43
00:03:21.081 --> 00:03:27.239
負の数では直感とずれることがあるので、迷ったら小さい例で試す習慣をつけましょう。

44
00:03:27.239 --> 00:03:32.012
同じ値が複数ある場合は、その値がそのまま最大値として返ります。

45
00:03:32.012 --> 00:03:35.879
配列に入ったデータを比べる方法を整理します。

46
00:03:35.879 --> 00:03:43.965
基本は、記事の例でも使ったスプレッド構文で、配列の前にドット三つを付けて展開して渡す形です。

47
00:03:43.965 --> 00:03:49.239
四、十二、八の配列からは十二が返ることを実機で確認しました。

48
00:03:49.239 --> 00:03:53.985
もう一つの方法として、アプライを使って配列を引数として渡す昔ながらの書き方もあり、

49
00:03:53.985 --> 00:03:58.731
結果は同じ十二になります。

50
00:03:58.731 --> 00:04:02.950
どちらの方法でも、元の配列自体は変更されません。

51
00:04:02.950 --> 00:04:07.871
新しいコードでは読みやすいスプレッド構文がおすすめです。

52
00:04:07.871 --> 00:04:13.145
配列をそのまま渡してしまう間違いは後ほど注意点でも触れます。

53
00:04:13.145 --> 00:04:20.352
なお、配列をそのまま渡すと数値に変換できず、結果がナンになるので注意してください。

54
00:04:20.352 --> 00:04:24.473
境界条件として、比べる数値が一つもない場合を確認します。

55
00:04:24.473 --> 00:04:29.182
引数を何も渡さずに呼び出すと、戻り値はマイナス無限大になります。

56
00:04:29.182 --> 00:04:34.922
空の配列を展開して渡した場合も、引数がゼロ個になるため、まったく同じ結果です。

57
00:04:34.922 --> 00:04:38.601
どちらも記事の境界例と実機の結果が一致しています。

58
00:04:38.601 --> 00:04:45.371
ここで注意したいのは、このマイナス無限大は、データが存在しないことを示す目印だという点です。

59
00:04:45.371 --> 00:04:50.081
実際の最高点や最大金額としてそのまま画面に表示してはいけません。

60
00:04:50.081 --> 00:04:53.907
データが空の場合の表示は、別に用意しておきましょう。

61
00:04:53.907 --> 00:04:59.500
件数を先に数えて、ゼロ件なら早期に分岐させる書き方が実務ではよく使われます。

62
00:04:59.500 --> 00:05:02.956
数値に変換できない値が混ざった場合を見ます。

63
00:05:02.956 --> 00:05:06.883
引数の中に一つでもナン、つまり数値ではないことを表す特別な値が含まれると、

64
00:05:06.883 --> 00:05:10.810
結果全体がナンになります。

65
00:05:10.810 --> 00:05:18.665
記事の境界例でも、一とナンを渡して、結果がナンかどうかを判定し、トゥルーが返ることを確認しています。

66
00:05:18.665 --> 00:05:20.864
実機の結果とも一致しました。

67
00:05:20.864 --> 00:05:26.519
ポイントは、例外が出るのではなく、ナンという値が静かに返ってくる点です。

68
00:05:26.519 --> 00:05:30.604
そのまま計算を続けると、ずれに気づきにくくなります。

69
00:05:30.604 --> 00:05:35.945
外部から来たデータは、渡す前に数値かどうかを確認する習慣が大切です。

70
00:05:35.945 --> 00:05:41.600
判定には、ナンバーオブジェクトのイズナンを使うと、誤判定を避けられます。

71
00:05:41.600 --> 00:05:46.398
引数が数値以外の場合の、自動変換の動きも知っておきましょう。

72
00:05:46.398 --> 00:05:51.195
数値の形をした文字列は、自動で数値に変換されて比べられます。

73
00:05:51.195 --> 00:05:58.392
スライドの例では、文字列の十が数値の十として扱われ、最大値になることを実機で確認しました。

74
00:05:58.392 --> 00:06:00.631
ヌルはゼロとして扱われます。

75
00:06:00.631 --> 00:06:07.987
一方、文字だけの文字列のように数値へ変換できないものはナンになり、結果全体もナンになります。

76
00:06:07.987 --> 00:06:12.705
自動変換に頼ると意図しない結果を招くことがあるため、実務では渡す前に自分で数値へ変換し、

77
00:06:12.705 --> 00:06:17.423
型をそろえておく方が安全です。

78
00:06:17.423 --> 00:06:23.340
入力がフォーム由来の文字列の場合は、特にこの変換の有無を意識してください。

79
00:06:23.340 --> 00:06:26.282
大きなデータを扱うときの注意点です。

80
00:06:26.282 --> 00:06:35.437
スプレッド構文で巨大な配列を展開すると、渡せる引数の個数の上限に達し、環境によってはエラーになる場合があります。

81
00:06:35.437 --> 00:06:39.033
記事でもこの点が注意として挙げられています。

82
00:06:39.033 --> 00:06:47.697
対策として、データ件数が多い場合は、リデュースやループで一つずつ比べながら最大値を更新する方法が確実です。

83
00:06:47.697 --> 00:06:55.707
スライドの例では、初期値をマイナス無限大にして順に比べ、九十一が得られることを実機で確認しました。

84
00:06:55.707 --> 00:07:02.246
件数が少ないうちはマックスで十分ですが、増えたときの逃げ道も覚えておきましょう。

85
00:07:02.246 --> 00:07:09.112
数万件を超えるデータを扱う可能性があるなら、最初からリデュースで書く判断も有効です。

86
00:07:09.112 --> 00:07:10.086
まとめです。

87
00:07:10.086 --> 00:07:15.281
マックスは、複数の数値から最大値を一行で求められるメソッドです。

88
00:07:15.281 --> 00:07:17.229
導入時の判断は三つです。

89
00:07:17.229 --> 00:07:24.372
まず、データが空の場合はマイナス無限大が返るため、表示や後続の処理を別に決めておくこと。

90
00:07:24.372 --> 00:07:30.540
次に、数値にできない値が混ざると結果がナンになるため、渡す前に検証すること。

91
00:07:30.540 --> 00:07:39.307
そして、配列はスプレッド構文で展開して渡し、件数が非常に多い場合はリデュースへの切り替えを検討することです。

92
00:07:39.307 --> 00:07:46.612
まずは記事の基本例をコンソールで実行し、入力を一か所ずつ変えて結果を予測してみてください。

93
00:07:46.612 --> 00:07:48.073
お疲れさまでした。

94
00:07:48.073 --> 00:07:54.404
小さい例で試しながら、境界条件まで含めて動きを確かめることが上達への近道です。
