1 00:00:00,520 --> 00:00:04,760 今日はもう1つの復習をします。 2 00:00:04,920 --> 00:00:06,880 もう前にやりましたが 3 00:00:07,040 --> 00:00:12,000 リテラルと動的配列の違い についてです。 4 00:00:13,080 --> 00:00:15,000 今回学ぶことは 5 00:00:15,160 --> 00:00:18,160 リテラル配列はメッセージ送信で 作られるものではなく 6 00:00:18,320 --> 00:00:23,560 動的配列は実行時にメッセージを使って 作られます。 7 00:00:23,720 --> 00:00:26,600 しかし、どちらも Array クラスのインスタンスです。 8 00:00:26,760 --> 00:00:29,560 配列を作るための方法が 2 つあるということです。 9 00:00:30,000 --> 00:00:31,440 覚えているでしょうか 10 00:00:31,600 --> 00:00:36,080 リテラル配列を作る構文は #( に続いて 11 00:00:36,240 --> 00:00:40,280 テキスト形式のオブジェクトを 入れていきます。 12 00:00:40,440 --> 00:00:43,600 この場合、整数 45 と 文字列「milou」と 13 00:00:44,000 --> 00:00:46,600 数 1300と真偽値 true と 14 00:00:46,760 --> 00:00:48,760 シンボル #tintin です。 15 00:00:49,600 --> 00:00:53,680 このリテラルオブジェクトにクラスを 尋ねれば 16 00:00:53,840 --> 00:00:56,600 Array のインスタンスだと答えます。 17 00:00:56,960 --> 00:00:59,760 このリテラル配列の動的なバージョンが 18 00:00:59,920 --> 00:01:03,440 これです。 19 00:01:03,720 --> 00:01:07,160 動的配列を生成するには Array クラスを使って 20 00:01:07,320 --> 00:01:11,160 with:with:with:with: メソッドで インスタンスを生成します。 21 00:01:11,320 --> 00:01:14,160 メッセージをこれらを引数にして渡して 22 00:01:14,320 --> 00:01:18,480 上のリテラル配列と等しい Array クラスのインスタンスを生成します。 23 00:01:18,640 --> 00:01:21,720 オブジェクトを生成する方法が 2 つあるということです。 24 00:01:22,640 --> 00:01:25,600 これはまた別のバージョンの 動的配列です。 25 00:01:25,760 --> 00:01:29,200 Array クラスに new: メッセージを送って 26 00:01:29,360 --> 00:01:32,480 配列を手動で作ることができます。 27 00:01:32,640 --> 00:01:37,200 そして at:put: を使って 配列の内容を埋めていって 28 00:01:37,360 --> 00:01:38,880 できあがった配列を返します。 29 00:01:39,040 --> 00:01:42,240 これも動的配列を作るための さらにもう1つ別の方法です。 30 00:01:42,560 --> 00:01:46,960 中括弧を使った 31 00:01:47,120 --> 00:01:49,320 専用の構文糖衣を使うやり方です。 32 00:01:49,880 --> 00:01:50,880 いいですか? 33 00:01:51,040 --> 00:01:55,880 この中括弧を使って上に書いたのと 全く同じ配列を 34 00:01:56,040 --> 00:01:59,320 より速くかつ明快に書くことができます。 35 00:02:00,120 --> 00:02:01,800 できあがるものは同じです。 36 00:02:02,080 --> 00:02:05,440 つまり、中括弧の中に 37 00:02:05,600 --> 00:02:08,680 表現式を点(.)で区切って 入れておくと 38 00:02:08,840 --> 00:02:11,520 それらの表現式が評価されて コレクションが作られます。 39 00:02:11,680 --> 00:02:13,360 リテラル配列と 40 00:02:13,520 --> 00:02:16,000 中括弧による動的配列の 41 00:02:16,160 --> 00:02:20,920 大きな違いは 42 00:02:21,080 --> 00:02:24,280 表現式として 43 00:02:24,440 --> 00:02:28,160 例えば 12 に初期化された変数で 44 00:02:28,320 --> 00:02:33,640 配列を作る時には リテラル配列の場合には #( に続いて 45 00:02:33,800 --> 00:02:36,240 a + 1. 13 46 00:02:36,400 --> 00:02:38,320 とすると、こんな配列になります。 47 00:02:38,720 --> 00:02:42,160 つまり シンボル a と + と 48 00:02:42,320 --> 00:02:45,520 整数 1 とシンボル . と整数13 から成る配列です。 49 00:02:45,680 --> 00:02:48,480 動的配列で同じことをすると 50 00:02:48,640 --> 00:02:50,120 a := 12 に続いて 51 00:02:50,480 --> 00:02:53,000 { a + 1. 13 } とすると 52 00:02:53,160 --> 00:02:56,120 2 つの要素から成る配列が得られます。 53 00:02:56,520 --> 00:02:58,000 要素は 13 と 13 です。 54 00:02:58,240 --> 00:02:59,240 どういうことかというと 55 00:02:59,400 --> 00:03:03,600 a + 1 が表現式として評価され 56 00:03:03,760 --> 00:03:06,600 a は 12 で、それに + 1 そして次が 13 57 00:03:06,760 --> 00:03:10,240 点(.)で区切られた各表現式が 評価されてから 58 00:03:10,400 --> 00:03:12,120 配列が生成されます。 59 00:03:12,880 --> 00:03:15,880 つまり、重要な違いは 60 00:03:16,040 --> 00:03:18,600 中括弧を使うと 式が実行されて 61 00:03:18,760 --> 00:03:22,240 #( を使ってリテラル配列をつくると 62 00:03:22,400 --> 00:03:25,760 式は実行されません。 63 00:03:25,920 --> 00:03:27,200 なぜかというと 64 00:03:28,040 --> 00:03:32,720 リテラル配列を生成するのは 65 00:03:32,880 --> 00:03:34,880 コンパイラだからです。 66 00:03:35,200 --> 00:03:39,080 もう少し複雑な例があります。 67 00:03:39,240 --> 00:03:41,360 #( に続いて 68 00:03:41,520 --> 00:03:44,760 さらに内部で括弧を使います。 ここがポイントなのですが 69 00:03:44,920 --> 00:03:48,800 リテラル配列の中で括弧を使うことで ネストしたリテラル配列を作ります。 70 00:03:48,960 --> 00:03:53,760 このリテラル配列では 何も評価実行されません。 71 00:03:53,920 --> 00:03:57,440 コンパイル時にコンパイラが作るからです。 72 00:03:57,600 --> 00:04:02,160 ネストした配列を含む配列が 1 つできます。 73 00:04:02,560 --> 00:04:04,440 ここにあるように 74 00:04:06,520 --> 00:04:09,240 1 つ目のネスト配列の内容は 75 00:04:09,400 --> 00:04:13,920 10 とシンボル @ と整数 20 などです。 76 00:04:14,080 --> 00:04:17,680 その証拠に この配列の 1 番目の要素を取り出すと 77 00:04:17,840 --> 00:04:19,560 この配列が得られます。 78 00:04:20,160 --> 00:04:23,000 リテラル配列の中で括弧を使うと 79 00:04:23,160 --> 00:04:25,200 ネストした配列ができます。 80 00:04:26,240 --> 00:04:28,120 重要なことは 81 00:04:28,280 --> 00:04:31,800 Pharo では配列は 1 種類しかないということです。 82 00:04:31,960 --> 00:04:34,400 Array クラスのインスタンスです。 83 00:04:34,560 --> 00:04:38,440 しかし配列を生成する方法は色々あります。 84 00:04:38,600 --> 00:04:42,520 1 つ目の方法はリテラル構文 #( です。 85 00:04:42,680 --> 00:04:47,000 この場合、配列はコンパイル時に コンパイラが生成することに注意してください。 86 00:04:47,240 --> 00:04:50,000 動的な方法で簡単なのは Array new: です。 87 00:04:50,160 --> 00:04:53,160 new: メッセージを Array クラスに送ります。 88 00:04:53,320 --> 00:04:57,920 構文的にコンパクトな動的な方法は 89 00:04:58,080 --> 00:05:02,880 中括弧を使って表現式を点で区切って 90 00:05:03,040 --> 00:05:05,720 それぞれ評価して配列を生成します。