WEBVTT

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

2
00:00:01.033 --> 00:00:03.098
今回はサムを紹介します。

3
00:00:03.098 --> 00:00:10.498
これは、配列の中に、決めた条件を満たす要素が一つでもあるかどうかを調べるメソッドです。

4
00:00:10.498 --> 00:00:16.178
一つでも条件を満たせばトゥルー、一つもなければフォルスが返ります。

5
00:00:16.178 --> 00:00:21.341
たとえば、在庫がゼロの商品があるかどうか、エラーが一件でも含まれているかどうか、

6
00:00:21.341 --> 00:00:26.504
といった存在チェックの場面で役立ちます。

7
00:00:26.504 --> 00:00:34.335
この動画では、書き方と引数、戻り値、記事の基本例、コールバックの引数、未成年がいるかの実例、

8
00:00:34.335 --> 00:00:42.165
よく似たエブリーとの違い、そして空配列や非同期判定の注意点まで、実行結果と一緒に学びます。

9
00:00:42.165 --> 00:00:46.468
一つでもあるか、という言葉が鍵になるメソッドです。

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

11
00:00:48.796 --> 00:00:54.525
記事の互換性情報では、クロームでは一以降、エッジでは十二以降、ファイアーフォックスでは一・五以降、

12
00:00:54.525 --> 00:01:00.255
サファリでは三以降で使えます。

13
00:01:00.255 --> 00:01:05.626
ノード・ジェイエスではゼロ・一〇・ゼロ以降に対応しています。

14
00:01:05.626 --> 00:01:10.997
これらの数値はエムディーエヌの互換性データに基づく目安です。

15
00:01:10.997 --> 00:01:17.085
サムは古くからある基本的な機能で、現在の主要な環境では広く使えます。

16
00:01:17.085 --> 00:01:24.963
追加の読み込みは不要で、配列に最初から関数として備わっていることを、実機で確認済みです。

17
00:01:24.963 --> 00:01:30.513
対応開始の版は、推奨版という意味ではない点にも注意しましょう。

18
00:01:30.513 --> 00:01:37.496
前回学んだエブリーと対応環境は同じで、セットで覚えやすいメソッドでもあります。

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

20
00:01:39.251 --> 00:01:45.742
対象の配列に続けてサムと書き、カッコの中に、条件を判定する関数を渡します。

21
00:01:45.742 --> 00:01:52.585
リファレンス名にあるプロトタイプは、実際の呼び出しで毎回書く必要はありません。

22
00:01:52.585 --> 00:01:58.726
この判定する関数をコールバックと呼び、要素ごとに自動で呼び出されます。

23
00:01:58.726 --> 00:02:05.745
第二引数として、判定の中で使うディスを指定する値も渡せますが、通常は省略します。

24
00:02:05.745 --> 00:02:12.237
戻り値は、一つでも条件を満たす要素があればトゥルー、なければフォルスです。

25
00:02:12.237 --> 00:02:19.430
配列そのものや該当する要素が返るわけではなく、あるかないかだけが返る点が特徴です。

26
00:02:19.430 --> 00:02:22.764
まずは、この基本の形を押さえましょう。

27
00:02:22.764 --> 00:02:24.600
記事の基本例を見ます。

28
00:02:24.600 --> 00:02:29.773
三、ゼロ、八という、三つの商品の在庫数が入った配列があります。

29
00:02:29.773 --> 00:02:35.448
この配列にサムを呼び、ゼロと等しいかどうかを判定する処理を渡します。

30
00:02:35.448 --> 00:02:42.791
実行するとトゥルーが表示され、記事の期待出力と一致し、ノードの実機結果とも一致しました。

31
00:02:42.791 --> 00:02:48.966
二番目に在庫ゼロの商品があるため、在庫切れが一件でもある、という結果です。

32
00:02:48.966 --> 00:02:57.310
もし在庫が三、五、八のようにゼロが一つもなければ、結果はフォルスに変わることも実機で確認しています。

33
00:02:57.310 --> 00:03:05.488
どの商品かまで知りたい場合は、要素そのものを返すファインドへの切り替えが記事でも勧められています。

34
00:03:05.488 --> 00:03:09.258
コールバックが受け取る引数を詳しく見ます。

35
00:03:09.258 --> 00:03:17.874
第一引数は今判定している要素の値、第二引数はゼロ始まりの位置、第三引数は対象の配列そのものです。

36
00:03:17.874 --> 00:03:29.722
スライドの例では、エーとビーの配列で、値と位置と長さを表示しながら、あえて常にフォルスを返して最後まで進む様子を実機で確認しました。

37
00:03:29.722 --> 00:03:36.184
必要な引数だけを受け取ればよく、多くの場合は値だけを使うのが一般的です。

38
00:03:36.184 --> 00:03:42.108
判定の中でトゥルー相当の値を返すかどうかで結果が決まるため、リターンし忘れると、

39
00:03:42.108 --> 00:03:48.032
該当があってもフォルスになる点にも注意してください。

40
00:03:48.032 --> 00:03:52.340
引数の順番は、値、位置、配列、と決まっています。

41
00:03:52.340 --> 00:03:55.586
実例として、未成年の有無の確認を見ます。

42
00:03:55.586 --> 00:04:02.728
二十歳、二十五歳、十九歳の三人について、十八歳未満の人がいるかどうかをサムで判定します。

43
00:04:02.728 --> 00:04:07.923
実行するとフォルスになり、未成年は一人もいないことが分かります。

44
00:04:07.923 --> 00:04:14.253
次に、二人目を十七歳に変えた配列で同じ判定をすると、今度はトゥルーになります。

45
00:04:14.253 --> 00:04:16.526
どちらも実機で確認しました。

46
00:04:16.526 --> 00:04:20.827
このようにサムは、条件に当てはまる人がいるか、異常な値が混ざっているか、

47
00:04:20.827 --> 00:04:25.128
といった存在の確認に向いています。

48
00:04:25.128 --> 00:04:29.592
エラーの有無、未対応の項目の有無、在庫切れの有無など、一件でもあれば対応が必要な場面で、

49
00:04:29.592 --> 00:04:34.056
そのまま使える形です。

50
00:04:34.056 --> 00:04:37.435
記事の境界例で、空配列の扱いを確かめます。

51
00:04:37.435 --> 00:04:45.158
要素が一つもない配列にサムを呼ぶと、条件を満たす要素が存在しないため、結果はフォルスになります。

52
00:04:45.158 --> 00:04:49.503
スライドの一行目が記事の例で、実機でもフォルスでした。

53
00:04:49.503 --> 00:04:52.238
これは前回のエブリーと対照的です。

54
00:04:52.238 --> 00:04:57.869
エブリーは空配列でトゥルーでしたが、サムは空配列でフォルスになります。

55
00:04:57.869 --> 00:05:03.099
あわせてスライドの二行目では、一、三、五という奇数だけの配列で偶数があるかを調べ、

56
00:05:03.099 --> 00:05:08.328
該当なしのためフォルスになることも確認しました。

57
00:05:08.328 --> 00:05:14.764
空の場合と該当なしの場合、どちらもフォルスになる、とセットで覚えておきましょう。

58
00:05:14.764 --> 00:05:17.642
よく似たエブリーとの違いを整理します。

59
00:05:17.642 --> 00:05:22.185
サムは、一つでも条件を満たす要素があればトゥルーになります。

60
00:05:22.185 --> 00:05:27.183
一方エブリーは、全ての要素が条件を満たすときにトゥルーになります。

61
00:05:27.183 --> 00:05:32.635
スライドの例では、二、三、四という配列で、偶数かどうかを判定しています。

62
00:05:32.635 --> 00:05:37.254
偶数が一つでもあるためサムはトゥルーですが、三という奇数が混ざるためエブリーはフォルスになり、

63
00:05:37.254 --> 00:05:41.874
どちらも実機で確認しました。

64
00:05:41.874 --> 00:05:45.887
該当があるかを確認したいならサム、全員が満たすかを確認したいならエブリー、

65
00:05:45.887 --> 00:05:49.901
と問いの立て方で選んでください。

66
00:05:49.901 --> 00:05:57.776
空配列の結果も、サムはフォルス、エブリーはトゥルーと正反対なので、あわせて覚えると混乱しにくくなります。

67
00:05:57.776 --> 00:06:01.368
注意点の第一は、判定が途中で終わることです。

68
00:06:01.368 --> 00:06:08.390
サムは、条件を満たす要素が見つかった時点で、残りの要素を判定せずにトゥルーを返します。

69
00:06:08.390 --> 00:06:14.187
スライドの例では、五、十二、八、三十のうち、二番目の十二が十以上のため、

70
00:06:14.187 --> 00:06:19.984
コールバックは二回だけ呼ばれて終わり、八と三十は判定されませんでした。

71
00:06:19.984 --> 00:06:24.066
実機でも、結果はトゥルー、回数は二と確認しました。

72
00:06:24.066 --> 00:06:29.373
これは無駄な処理を省く効率のよい仕様ですが、全ての要素に必ず処理を実行したい場合は、

73
00:06:29.373 --> 00:06:34.680
サムではなくフォーイーチなどを選んでください。

74
00:06:34.680 --> 00:06:38.436
途中で終わる前提を理解しておくことが大切です。

75
00:06:38.436 --> 00:06:40.803
記事が注意する仕様を確認します。

76
00:06:40.803 --> 00:06:48.199
非同期関数、つまりアシンク関数を判定に渡すと、その関数は結果ではなくプロミスという値をすぐ返します。

77
00:06:48.199 --> 00:06:52.341
プロミスはトゥルー相当の値として扱われるため、条件が実際には成り立たなくても、

78
00:06:52.341 --> 00:06:56.483
サムはトゥルーを返してしまいます。

79
00:06:56.483 --> 00:07:02.696
スライドの例では、十より大きい要素がない配列でもトゥルーになり、実機で確認しました。

80
00:07:02.696 --> 00:07:09.056
非同期の判定を待ちたい場合は、サムでは対応できないため、別の書き方を検討してください。

81
00:07:09.056 --> 00:07:17.488
あわせて、空きのある配列では空き位置でコールバックが呼ばれない点も、エブリーと同じ注意点として覚えておきましょう。

82
00:07:17.488 --> 00:07:18.487
まとめです。

83
00:07:18.487 --> 00:07:27.144
サムは、配列の中に条件を満たす要素が一つでもあるかどうかを判定し、トゥルーかフォルスを返すメソッドです。

84
00:07:27.144 --> 00:07:28.808
ポイントは三つです。

85
00:07:28.808 --> 00:07:34.635
まず、コールバックは値と位置と配列を受け取り、要素ごとに判定すること。

86
00:07:34.635 --> 00:07:41.127
次に、条件を満たす要素が見つかれば、その時点でトゥルーとなり判定が終わること。

87
00:07:41.127 --> 00:07:47.620
そして、空配列ではフォルスになり、非同期関数を渡しても結果を待たないことです。

88
00:07:47.620 --> 00:07:53.280
どの要素が該当するかまで必要なときはファインドに切り替えてください。

89
00:07:53.280 --> 00:07:59.606
まずは記事の基本例と境界例を実行し、結果を予測してから確かめてみてください。

90
00:07:59.606 --> 00:08:01.104
お疲れさまでした。

91
00:08:01.104 --> 00:08:09.428
一つでもか、全てか、と問いを言葉で区別できるようになれば、エブリーとの使い分けも自然に身につきます。
