WEBVTT

00:00:00.840 --> 00:00:03.400 align:middle
このセッションで扱うのは

00:00:03.560 --> 00:00:06.320 align:middle
括弧と角括弧の使い方です。

00:00:06.480 --> 00:00:08.520 align:middle
これらを混同しないでください。

00:00:09.160 --> 00:00:12.480 align:middle
括弧は表現式やコードの中での

00:00:12.640 --> 00:00:15.040 align:middle
実行の優先順位を変えます。

00:00:15.200 --> 00:00:17.760 align:middle
一方で
角括弧はブロックを定義します。

00:00:17.920 --> 00:00:22.840 align:middle
ブロックの中に表現式が定義されている場合
それらの表現式は実行されていません。

00:00:23.000 --> 00:00:27.160 align:middle
実行を制御することができます。
ブロックに value メッセージを送ることで

00:00:27.320 --> 00:00:29.960 align:middle
その表現式の実行を開始します。

00:00:31.960 --> 00:00:36.760 align:middle
角括弧を使うべき場合について
もう一度説明します。

00:00:36.920 --> 00:00:38.960 align:middle
あるいくつかの表現式について
実行するかどうかわからない時に

00:00:39.120 --> 00:00:44.600 align:middle
それらの表現式を角括弧で囲みます。

00:00:45.280 --> 00:00:49.320 align:middle
例えば、if 式に使いますか？
分岐になっていますか？

00:00:50.440 --> 00:00:53.440 align:middle
表現式を何回評価するかわからない場合も

00:00:53.600 --> 00:00:57.040 align:middle
角括弧を使って

00:00:58.200 --> 00:01:01.760 align:middle
ブロックにします。

00:01:02.760 --> 00:01:07.120 align:middle
例えば
n timesRepeat: [self doSomething]

00:01:07.280 --> 00:01:11.840 align:middle
self doSomething
はブロックの中に隠蔽されています。

00:01:12.480 --> 00:01:18.080 align:middle
なぜかというと
その表現式を何度も実行しなければならないからです。

00:01:18.240 --> 00:01:22.840 align:middle
ブロックの中に入れて
何回も value メッセージを送らなければなりません。

00:01:25.840 --> 00:01:29.680 align:middle
もう1つの例では
ifTrue: メッセージを送ります。

00:01:29.840 --> 00:01:32.000 align:middle
レシーバ次第で

00:01:32.160 --> 00:01:36.240 align:middle
つまりこの表現式が true か false かによって

00:01:36.920 --> 00:01:41.120 align:middle
表現式 self doSomething を
実行したりしなかったりします。

00:01:41.280 --> 00:01:46.120 align:middle
ここで括弧は使えません。
実行すべきでない場合もあるからです。

00:01:47.120 --> 00:01:48.840 align:middle
その表現式をブロックに入れれば

00:01:49.000 --> 00:01:52.640 align:middle
value メッセージを送るかどうかを
あなたが決めることができます。

00:01:55.080 --> 00:01:59.240 align:middle
whileTrue: でも同じことです。

00:01:59.400 --> 00:02:04.120 align:middle
レシーバとなるブロックがあり
引数となるブロックを渡します。

00:02:04.280 --> 00:02:10.040 align:middle
レシーバのブロックの評価が
真偽値の true と false のどちらを返すかによって

00:02:10.200 --> 00:02:14.280 align:middle
1度だけ実行したり、複数回実行したり
全く実行しなかったりします。

00:02:14.440 --> 00:02:18.000 align:middle
表現式 self doSomething は
ブロックの中でなければならないのです。

00:02:19.400 --> 00:02:22.240 align:middle
小問題をやってみましょう。

00:02:23.160 --> 00:02:26.400 align:middle
問題は次の2つの表現式です。

00:02:26.560 --> 00:02:30.360 align:middle
1 から n まで self doSomething を繰り返す。

00:02:30.520 --> 00:02:33.040 align:middle
括弧と角括弧のどちらを使うべきでしょう？

00:02:33.200 --> 00:02:36.800 align:middle
x が空であれば self doSomething をする。

00:02:36.960 --> 00:02:39.520 align:middle
括弧と角括弧のどちらを使うべきでしょう？

00:02:41.720 --> 00:02:43.440 align:middle
では正解を教えます。

00:02:44.360 --> 00:02:46.920 align:middle
どちらの場合も角括弧を使います。

00:02:47.080 --> 00:02:51.600 align:middle
1問目の場合
self doSomething を繰り返したいわけです。

00:02:51.760 --> 00:02:55.360 align:middle
このブロックに value メッセージを
何回か送らなければなりません。

00:02:56.080 --> 00:02:59.000 align:middle
2問目の場合
x ifEmpty: ですが

00:02:59.160 --> 00:03:04.360 align:middle
もし x が空でない場合には
self doSomething を実行すべきではありません。

00:03:04.520 --> 00:03:07.560 align:middle
もし x が空の場合には
self doSomething を実行しなければなりません。

00:03:07.720 --> 00:03:10.280 align:middle
まとめると
このコースでは

00:03:10.440 --> 00:03:13.720 align:middle
括弧と角括弧を混同してはいけないことを
学びました。

00:03:13.880 --> 00:03:19.120 align:middle
括弧は表現式を計算する順序を
変えるためのもので

00:03:19.280 --> 00:03:23.800 align:middle
角括弧は表現式を

00:03:23.960 --> 00:03:27.040 align:middle
凍結させて

00:03:27.200 --> 00:03:31.400 align:middle
その実行を制御するためのものです。
複数回実行することもあります。

