この文書の現在のバージョンと選択したバージョンの差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン 次のリビジョン 両方とも次のリビジョン | ||
ch_syntax [2020/07/11 04:50] klab [ブロックとメソッド] |
ch_syntax [2020/07/11 05:15] klab [要素の実行] |
||
---|---|---|---|
ライン 163: | ライン 163: | ||
</code> | </code> | ||
- | {{:pasted:20180103-210401.png}} | + | {{:pasted:20180103-210401.png?250}} |
次のプログラムを実行すると、初期値が0の変数「a」に1を加える処理を10回行い、結果として画面に10が表示される。 | 次のプログラムを実行すると、初期値が0の変数「a」に1を加える処理を10回行い、結果として画面に10が表示される。 | ||
ライン 192: | ライン 192: | ||
</code> | </code> | ||
- | {{:pasted:20180103-210421.png}} | + | {{:pasted:20180103-210421.png?200}} |
たとえば、100以上の値を持つ最初のフィボナッチ数を表示させるプログラムは次のようになる。 | たとえば、100以上の値を持つ最初のフィボナッチ数を表示させるプログラムは次のようになる。 | ||
ライン 213: | ライン 213: | ||
いずれも、1番目のブロックを実行した結果が真であれば2番目のブロックが実行される。さらに下の形では、2番目のブロックが実行されなかった場合は3番目のブロックが実行される。メソッド「なら」や「そうでなければ」はこれらの制御を適宜行うためのオブジェクトを返す。 | いずれも、1番目のブロックを実行した結果が真であれば2番目のブロックが実行される。さらに下の形では、2番目のブロックが実行されなかった場合は3番目のブロックが実行される。メソッド「なら」や「そうでなければ」はこれらの制御を適宜行うためのオブジェクトを返す。 | ||
- | {{:pasted:20180103-210442.png}} | + | {{:pasted:20180103-210442.png?550}} |
次のプログラムを実行すると、最初に1から10までの乱数を発生し、変数「数」に入れる。続いて、「数」が5より大きいかを判定し、真のときは「なら」に続くブロックを実行し、偽のときは「そうでなければ」に続くブロックを実行する。結果として、実行するたびに、画面に「大きい」と「小さい」がランダムに表示される。 | 次のプログラムを実行すると、最初に1から10までの乱数を発生し、変数「数」に入れる。続いて、「数」が5より大きいかを判定し、真のときは「なら」に続くブロックを実行し、偽のときは「そうでなければ」に続くブロックを実行する。結果として、実行するたびに、画面に「大きい」と「小さい」がランダムに表示される。 | ||
ライン 237: | ライン 237: | ||
</code> | </code> | ||
- | {{:pasted:20180103-210502.png}} | + | {{:pasted:20180103-210502.png?300}} |
ライン 247: | ライン 247: | ||
タイマーは、あらかじめ指定された**間隔**で、指定された**回数**または**時間**だけ、ブロックを繰り返して実行する。標準では、間隔が0.1秒、回数が100回に設定されている。 | タイマーは、あらかじめ指定された**間隔**で、指定された**回数**または**時間**だけ、ブロックを繰り返して実行する。標準では、間隔が0.1秒、回数が100回に設定されている。 | ||
- | {{:pasted:20180103-210522.png}} | + | {{:pasted:20180103-210522.png?350}} |
ブロックを指定してタイマーのメソッド**実行**を呼び出すと、タイマーはパラメータとして受け取ったブロックを設定された時間間隔で繰り返し実行する。最初の実行は、指定された間隔だけ待った後に行われる。 | ブロックを指定してタイマーのメソッド**実行**を呼び出すと、タイマーはパラメータとして受け取ったブロックを設定された時間間隔で繰り返し実行する。最初の実行は、指定された間隔だけ待った後に行われる。 | ||
ライン 345: | ライン 345: | ||
</code> | </code> | ||
- | {{:pasted:20180103-210551.png}} | + | {{:pasted:20180103-210551.png?150}} |
配列に入っている要素の数は、**要素数?**で調べることができる。次のプログラムでは、配列に3個の数値を入れた後で、要素数を画面に表示している。画面には3が表示される。 | 配列に入っている要素の数は、**要素数?**で調べることができる。次のプログラムでは、配列に3個の数値を入れた後で、要素数を画面に表示している。画面には3が表示される。 | ||
ライン 357: | ライン 357: | ||
**書く**を使うと、配列の末尾に新しい要素を追加することができる(要素数は1多くなる)。また、**上書き**を使うと、配列の指定位置の要素を書き換えることができる(要素数は変わらない)。**消す**を使うとオブジェクトを指定して、**位置で消す**を使うと要素の位置を指定して、要素を削除することができる。 | **書く**を使うと、配列の末尾に新しい要素を追加することができる(要素数は1多くなる)。また、**上書き**を使うと、配列の指定位置の要素を書き換えることができる(要素数は変わらない)。**消す**を使うとオブジェクトを指定して、**位置で消す**を使うと要素の位置を指定して、要素を削除することができる。 | ||
- | {{:pasted:20180103-210606.png}} | + | {{:pasted:20180103-210606.png?250}} |
次のプログラムでは、3つの要素が格納された配列の末尾に要素を追加し、3番目の要素を上書きした後、2番目の要素を削除し、要素数を画面に表示している。画面には3が表示される。 | 次のプログラムでは、3つの要素が格納された配列の末尾に要素を追加し、3番目の要素を上書きした後、2番目の要素を削除し、要素数を画面に表示している。画面には3が表示される。 | ||
ライン 385: | ライン 385: | ||
</code> | </code> | ||
- | {{:pasted:20180103-210625.png}} | + | {{:pasted:20180103-210625.png?450}} |
ライン 402: | ライン 402: | ||
</code> | </code> | ||
- | {{:pasted:20180103-210642.png}} | + | {{:pasted:20180103-210642.png?400}} |
子のオブジェクトは親のオブジェクトが持っていたプロパティ(値やメソッド定義)をすべてそのまま引き継ぎ、親と同じように扱うことができる。この仕組みを利用して、タートル、ボタン、配列など、さまざまな標準オブジェクトをプロトタイプとして持つオブジェクトを必要なだけ作って利用できるわけである。 | 子のオブジェクトは親のオブジェクトが持っていたプロパティ(値やメソッド定義)をすべてそのまま引き継ぎ、親と同じように扱うことができる。この仕組みを利用して、タートル、ボタン、配列など、さまざまな標準オブジェクトをプロトタイプとして持つオブジェクトを必要なだけ作って利用できるわけである。 | ||
ライン 418: | ライン 418: | ||
</code> | </code> | ||
- | {{:pasted:20180103-210705.png}} | + | {{:pasted:20180103-210705.png?350}} |
ただし、上で説明したように、子のオブジェクトに同じ名前のプロパティが見つかった場合はそちらが使われるので、親の同名のプロパティは参照されなくなる。たとえば、次の場合はObjBのプロパティが参照されるので、「180」が表示される。 | ただし、上で説明したように、子のオブジェクトに同じ名前のプロパティが見つかった場合はそちらが使われるので、親の同名のプロパティは参照されなくなる。たとえば、次の場合はObjBのプロパティが参照されるので、「180」が表示される。 | ||
ライン 448: | ライン 448: | ||
### インスタンス変数 | ### インスタンス変数 | ||
- | **インスタンス変数**とは、個々のオブジェクトに付随する情報を保持するための変数のことをいう。ドリトルでは、インスタンス変数は個々のオブジェクトのプロパティに他ならない。ブロックがオブジェクトのプロパティとして格納されていて、メソッドとして呼び出された場合、そのブロックの中の変数で、「{\tt |…|}の中に書かれているパラメータやローカル変数以外のものは、インスタンス変数を意味している。たとえば次の例では、{\tt ObjB:x}が21増やされて221になり、それが表示される。 | + | **インスタンス変数**とは、個々のオブジェクトに付随する情報を保持するための変数のことをいう。ドリトルでは、インスタンス変数は個々のオブジェクトのプロパティに他ならない。ブロックがオブジェクトのプロパティとして格納されていて、メソッドとして呼び出された場合、そのブロックの中の変数で、「|…|」の中に書かれているパラメータやローカル変数以外のものは、インスタンス変数を意味している。たとえば次の例では、ObjB:xが21増やされて221になり、それが表示される。 |
<code> | <code> | ||
ObjB=ボタン!作る。 | ObjB=ボタン!作る。 | ||
ライン 484: | ライン 484: | ||
ここまでの説明をまとめると、あるブロックの中に現れる名前が何を表すかは、次のようにして決められている。 | ここまでの説明をまとめると、あるブロックの中に現れる名前が何を表すかは、次のようにして決められている。 | ||
- | - そのブロック冒頭の{\tt |…|}で定義されているものはローカル変数である。 | + | - そのブロック冒頭の |…| で定義されているものはローカル変数である。 |
- そのブロックが直接メソッドとして実行されているなら、それ以外の名前はすべてインスタンス変数である(ただし、参照時は親オブジェクトのプロパティを参照していることもある)。 | - そのブロックが直接メソッドとして実行されているなら、それ以外の名前はすべてインスタンス変数である(ただし、参照時は親オブジェクトのプロパティを参照していることもある)。 | ||
- そうでないなら、そのブロックを囲む外側において、同じ規則で名前の使われ方を探索するため1に戻る。 | - そうでないなら、そのブロックを囲む外側において、同じ規則で名前の使われ方を探索するため1に戻る。 | ||
ライン 590: | ライン 590: | ||
### コメント | ### コメント | ||
- | 「//」から行末までは**注釈**(**コメント**)と解釈され、プログラムの一部として扱われない。人が読むためのメモや、一時的にプログラムの一部を実行したくないときのコメントアウトなどに使うことができる。 | + | 「/ /」から行末までは**注釈**(**コメント**)と解釈され、プログラムの一部として扱われない。人が読むためのメモや、一時的にプログラムの一部を実行したくないときのコメントアウトなどに使うことができる。 |
たとえば、次の例で、1行目はプログラム全体の注釈、2行目はその処理の注釈、3行目は実行されないように一時的にプログラムの一部をコメントアウトしている。 | たとえば、次の例で、1行目はプログラム全体の注釈、2行目はその処理の注釈、3行目は実行されないように一時的にプログラムの一部をコメントアウトしている。 | ||
ライン 599: | ライン 599: | ||
// かめきち=タートル!作る。 | // かめきち=タートル!作る。 | ||
</code> | </code> | ||
+ | |||