WEBVTT

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

2
00:00:01.009 --> 00:00:04.707
今回はオブジェクト・バリューズを紹介します。

3
00:00:04.707 --> 00:00:11.263
これは、オブジェクトが持つ値だけを取り出して、配列として返す静的メソッドです。

4
00:00:11.263 --> 00:00:15.717
前回学んだエントリーズがキーと値の組を取り出したのに対して、バリューズはキーには触れず、

5
00:00:15.717 --> 00:00:20.172
値だけを並べます。

6
00:00:20.172 --> 00:00:25.831
この動画では、書き方と引数と戻り値、記事の基本例である得点の合計と、境界例の空オブジェクト、

7
00:00:25.831 --> 00:00:31.490
対象になるプロパティの範囲、キー情報が失われるなどの注意点、そして集計への応用まで、

8
00:00:31.490 --> 00:00:37.150
実行結果と一緒に学びます。

9
00:00:37.150 --> 00:00:42.025
値の合計や平均を求めたい場面で、最初の一歩になる操作です。

10
00:00:42.025 --> 00:00:47.908
キーを捨てて値に集中できる分、コードが短く読みやすくなるのも利点です。

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

12
00:00:49.702 --> 00:00:55.772
オブジェクト・バリューズは、エントリーズやキーズと同時期の仕様で導入されたメソッドです。

13
00:00:55.772 --> 00:00:59.704
クロームでは五十四以降、エッジでは十四以降、ファイアーフォックスでは四十七以降、

14
00:00:59.704 --> 00:01:03.637
サファリでは十・一以降で使えます。

15
00:01:03.637 --> 00:01:07.638
ノード・ジェイエスでは七・ゼロ・ゼロ以降に対応しています。

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

17
00:01:11.639 --> 00:01:19.503
対応範囲はかなり広く、現在使われる環境ではほぼ心配ありませんが、公開するコードでは対象環境を先に確認してください。

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

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

20
00:01:26.168 --> 00:01:33.033
オブジェクトと書き、続けてバリューズと書いて、カッコの中に対象のオブジェクトを渡します。

21
00:01:33.033 --> 00:01:34.593
引数は一つだけです。

22
00:01:34.593 --> 00:01:38.181
戻り値は、プロパティの値だけを並べた配列です。

23
00:01:38.181 --> 00:01:43.174
エントリーズと違ってキーは含まれず、値そのものが要素になります。

24
00:01:43.174 --> 00:01:46.606
渡した元のオブジェクト自体は変更されません。

25
00:01:46.606 --> 00:01:54.719
スライドの例では、エーが一、ビーが二というオブジェクトから、一と二の配列が返ることを実機で確認しました。

26
00:01:54.719 --> 00:02:01.740
配列が返るので、そのまま配列のメソッドにつなげられる点が、このメソッドの使い勝手の核です。

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

28
00:02:03.761 --> 00:02:11.660
数学が八十点、英語が九十点という得点オブジェクトを用意し、その値を合計するコードです。

29
00:02:11.660 --> 00:02:17.538
まずバリューズだけを行うと、八十と九十という値の配列が返ります。

30
00:02:17.538 --> 00:02:24.518
記事の例では、そこへリデュースを続け、初期値ゼロから順に足し合わせています。

31
00:02:24.518 --> 00:02:29.846
実行結果は百七十となり、ノードの実機結果とも一致しました。

32
00:02:29.846 --> 00:02:37.928
キーである教科名は合計には不要なので、値だけを取り出すバリューズがぴったりはまる例です。

33
00:02:37.928 --> 00:02:42.888
値がすべて数値である前提の計算なので、文字列が混ざると連結になってしまう点は、

34
00:02:42.888 --> 00:02:47.848
後の注意点で改めて確認します。

35
00:02:47.848 --> 00:02:51.940
実践的な使い方として、値だけを順に処理する例を見ます。

36
00:02:51.940 --> 00:02:56.790
名前がタナカ、年齢が三十というユーザーオブジェクトにバリューズを使うと、

37
00:02:56.790 --> 00:03:01.640
タナカと三十という値の配列が返り、実機とも一致しました。

38
00:03:01.640 --> 00:03:08.460
戻り値は配列なので、フォー・オブ文やフォーイーチでそのまま一件ずつ取り出して表示できます。

39
00:03:08.460 --> 00:03:14.295
オブジェクトのままでは値を順に眺める手段が乏しいのですが、値の配列に変換すれば、

40
00:03:14.295 --> 00:03:20.130
繰り返しも、並べ替えも、絞り込みも、配列の道具立てで書けるようになります。

41
00:03:20.130 --> 00:03:24.980
値の種類が混ざっていても順序は保たれる点も押さえておきましょう。

42
00:03:24.980 --> 00:03:27.317
記事の境界条件の例を見ます。

43
00:03:27.317 --> 00:03:31.155
空のオブジェクトをバリューズへ渡すコードです。

44
00:03:31.155 --> 00:03:36.162
実行結果は空の配列となり、記事の期待出力とも一致しています。

45
00:03:36.162 --> 00:03:41.336
プロパティが一つもなければ、値もゼロ件で、例外にはなりません。

46
00:03:41.336 --> 00:03:46.092
データが空の場合でも特別な分岐を書かずに、そのままリデュースや繰り返し処理へ流せるのは、

47
00:03:46.092 --> 00:03:50.849
実務で地味に効く性質です。

48
00:03:50.849 --> 00:03:56.356
逆に言えば、結果が空でもエラーにはならないため、入力が空であること自体を検出したい場面では、

49
00:03:56.356 --> 00:04:01.864
長さの確認を自分で加える必要があります。

50
00:04:01.864 --> 00:04:07.872
合計を求める処理なら、空でもゼロになるよう初期値を必ず指定してください。

51
00:04:07.872 --> 00:04:10.395
値の配列ならではの応用を見ます。

52
00:04:10.395 --> 00:04:16.230
スプレッド構文で展開すれば、マックスへそのまま渡して最大値を求められます。

53
00:04:16.230 --> 00:04:19.857
得点の例では九十が返り、実機とも一致しました。

54
00:04:19.857 --> 00:04:26.008
また、インクルーズを使えば、九十点の教科があるかどうかを真偽値で調べられます。

55
00:04:26.008 --> 00:04:29.793
こちらも実機でトゥルーになることを確認しました。

56
00:04:29.793 --> 00:04:35.785
合計はリデュース、最大値はマックス、存在確認はインクルーズというように、

57
00:04:35.785 --> 00:04:41.778
値だけの集計や判定は、バリューズで配列化してしまえば配列の道具だけで完結します。

58
00:04:41.778 --> 00:04:48.244
どの教科が九十点かまで知りたい場合は、キーが必要になるのでエントリーズの出番です。

59
00:04:48.244 --> 00:04:51.368
対象になるプロパティの範囲を確認します。

60
00:04:51.368 --> 00:04:58.554
バリューズが取り出すのは、オブジェクト自身が持つ、列挙可能な文字列キーに対応する値だけです。

61
00:04:58.554 --> 00:05:05.740
シンボルキーで登録した値や、列挙不可に設定した値、プロトタイプから継承した値は含まれません。

62
00:05:05.740 --> 00:05:12.458
スライドの例では、継承した項目の値は出ず、自身の値だけが返ることを実機で確認しました。

63
00:05:12.458 --> 00:05:21.674
並び順にも決まりがあり、整数らしいキーは文字列でも小さい順に先へ来て、その後に通常の文字列キーの値が定義順に続きます。

64
00:05:21.674 --> 00:05:25.736
順序に依存する処理では、この規則を意識してください。

65
00:05:25.736 --> 00:05:26.988
注意点を見ます。

66
00:05:26.988 --> 00:05:31.372
記事が強調する最大の注意は、キー情報が失われることです。

67
00:05:31.372 --> 00:05:36.538
値だけの配列になると、どの値がどの項目のものか分からなくなります。

68
00:05:36.538 --> 00:05:41.705
表示ラベルと値を対にして扱う場合は、エントリーズを選んでください。

69
00:05:41.705 --> 00:05:47.967
次に、引数にヌルやアンディファインドを渡すと、タイプ・エラーの例外が発生します。

70
00:05:47.967 --> 00:05:52.977
外部から受け取った値を渡すときは、事前に存在確認をしてください。

71
00:05:52.977 --> 00:06:00.492
一方、文字列を渡すと一文字ずつの配列が返り、数値を渡すと空の配列が返ることを実機で確認しました。

72
00:06:00.492 --> 00:06:07.380
意図しない型が静かに通る場合があるので、入力の型は呼び出し側でそろえておくのが安全です。

73
00:06:07.380 --> 00:06:11.601
よく似た三つのメソッドの使い分けを整理します。

74
00:06:11.601 --> 00:06:20.778
キーだけが欲しいならキーズ、値だけが欲しいならバリューズ、キーと値の対応が必要ならエントリーズです。

75
00:06:20.778 --> 00:06:25.183
スライドでは同じ得点オブジェクトで比べています。

76
00:06:25.183 --> 00:06:33.258
キーズは教科名の配列、エントリーズは教科名と点数の組の配列になり、実機とも一致しました。

77
00:06:33.258 --> 00:06:42.435
もう一つ実務上の注意として、記事も触れている通り、合計を求める前に値がすべて数値か検証してください。

78
00:06:42.435 --> 00:06:50.327
文字列が一つ混ざるだけで、足し算が文字列の連結に化けて、静かに間違った結果になります。

79
00:06:50.327 --> 00:06:56.200
迷ったら対応関係を失わないエントリーズから検討するのが無難です。

80
00:06:56.200 --> 00:06:57.245
まとめです。

81
00:06:57.245 --> 00:07:04.908
オブジェクト・バリューズは、オブジェクトの値だけを取り出して配列にする静的メソッドです。

82
00:07:04.908 --> 00:07:07.172
判断のポイントは三つです。

83
00:07:07.172 --> 00:07:16.229
まず、戻り値は値の配列なので、リデュースやマックスやインクルーズといった配列の処理をそのまま使えること。

84
00:07:16.229 --> 00:07:24.066
次に、対象は自身の列挙可能な文字列キーの値だけで、シンボルや継承した項目は含まれないこと。

85
00:07:24.066 --> 00:07:31.729
そして、キーの対応関係が失われるため、ラベルが必要な場面ではエントリーズを選ぶことです。

86
00:07:31.729 --> 00:07:39.741
まずは記事の基本例と境界例を実行し、項目を一つ変えて結果を予測してから確かめてみてください。

87
00:07:39.741 --> 00:07:46.185
次に学ぶオブジェクト・キーズと合わせると、取り出し方の選択肢がそろいます。

88
00:07:46.185 --> 00:07:50.365
値の検証を忘れず、安心して集計に使ってください。

89
00:07:50.365 --> 00:07:51.932
お疲れさまでした。
