この文書の現在のバージョンと選択したバージョンの差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
ch_syntax [2020/07/11 05:09] klab [ローカル変数、名前解決規則] |
ch_syntax [2020/07/11 05:22] (現在) klab [中置記法] |
||
---|---|---|---|
ライン 107: | ライン 107: | ||
中置記法とメッセージ送信記法のもう1つの違いは、中置記法の中では名前は変数を表す、ということである。これに対し、メッセージ送信記法の中では直接変数を書けるのは「!」の左側だけであり、「!」の右側では名前はメソッド名として扱われる。したがって、パラメータなどで変数を指定したい場合は「(…)」で囲む必要がある(囲んだ中は中置記法にできるため)。たとえば、中置記法の「x+y」をメッセージ送信記法で書くと「x!(y)足す」になるが、この「(y)」は丸かっこの中に(「!」がないため)中置記法が書かれているものとして扱われている。 | 中置記法とメッセージ送信記法のもう1つの違いは、中置記法の中では名前は変数を表す、ということである。これに対し、メッセージ送信記法の中では直接変数を書けるのは「!」の左側だけであり、「!」の右側では名前はメソッド名として扱われる。したがって、パラメータなどで変数を指定したい場合は「(…)」で囲む必要がある(囲んだ中は中置記法にできるため)。たとえば、中置記法の「x+y」をメッセージ送信記法で書くと「x!(y)足す」になるが、この「(y)」は丸かっこの中に(「!」がないため)中置記法が書かれているものとして扱われている。 | ||
- | 中置記法の中で使える演算子としては、**+**(足す)、**-**(引く)、*****(掛ける)、**/**(割る)、**%**(余り)がある(かっこ内はメソッドとして使うための名称)。このほか、比較演算子**==**(eq)、**!=**(ne)、**>**(gt)、**>=**(ge)、**<**(lt)、**<=**(le)もある。 | + | 中置記法の中で使える演算子としては、**+**(足す)、**-**(引く)、*****(掛ける)、**/**(割る)、**%**(余り)がある(かっこ内はメソッドとして使うための名称)。このほか、比較演算子**==**(eq)、**!=**(ne)、**>**(gt)、**>=**(ge)、**<**(lt)、**<=**(le)もある。 |
また、中置記法の中では関数記法が使える。たとえば、「sqrt(2)」は「2!sqrt」の略であり、そのほか任意のパラメータなしのメソッド「オブジェクト!メソッド」を「メソッド(オブジェクト)」の形で書くことができる。 | また、中置記法の中では関数記法が使える。たとえば、「sqrt(2)」は「2!sqrt」の略であり、そのほか任意のパラメータなしのメソッド「オブジェクト!メソッド」を「メソッド(オブジェクト)」の形で書くことができる。 | ||
ライン 148: | ライン 148: | ||
「!」の前に何もないときは、そのメソッドを持っているオブジェクトが指定されているものとして扱われる。また、特別な名前「自分」もメソッドを持っているオブジェクトを指定するのに使うことができる。従って上の例は「自分!…」のように書いてもよい。 | 「!」の前に何もないときは、そのメソッドを持っているオブジェクトが指定されているものとして扱われる。また、特別な名前「自分」もメソッドを持っているオブジェクトを指定するのに使うことができる。従って上の例は「自分!…」のように書いてもよい。 | ||
- | {{:pasted:20180103-210342.png?500}} | + | {{:pasted:20180103-210342.png?450}} |
ブロックは1つの式であり、最後に評価した式の値をブロック全体の値として返す。メソッドから値を返したいときはこれを利用する。上の例では、最後に評価されるのはメソッド「歩く」なので、それが返した値、つまりかめた自身が「曲がって動く」の返す値となる。そこで引き続きかめたに対するメソッド「横の位置?」を呼び出してそのX座標を調べているわけである。 | ブロックは1つの式であり、最後に評価した式の値をブロック全体の値として返す。メソッドから値を返したいときはこれを利用する。上の例では、最後に評価されるのはメソッド「歩く」なので、それが返した値、つまりかめた自身が「曲がって動く」の返す値となる。そこで引き続きかめたに対するメソッド「横の位置?」を呼び出してそのX座標を調べているわけである。 | ||
ライン 247: | ライン 247: | ||
タイマーは、あらかじめ指定された**間隔**で、指定された**回数**または**時間**だけ、ブロックを繰り返して実行する。標準では、間隔が0.1秒、回数が100回に設定されている。 | タイマーは、あらかじめ指定された**間隔**で、指定された**回数**または**時間**だけ、ブロックを繰り返して実行する。標準では、間隔が0.1秒、回数が100回に設定されている。 | ||
- | {{:pasted:20180103-210522.png?350}} | + | {{:pasted:20180103-210522.png?300}} |
ブロックを指定してタイマーのメソッド**実行**を呼び出すと、タイマーはパラメータとして受け取ったブロックを設定された時間間隔で繰り返し実行する。最初の実行は、指定された間隔だけ待った後に行われる。 | ブロックを指定してタイマーのメソッド**実行**を呼び出すと、タイマーはパラメータとして受け取ったブロックを設定された時間間隔で繰り返し実行する。最初の実行は、指定された間隔だけ待った後に行われる。 | ||
ライン 385: | ライン 385: | ||
</code> | </code> | ||
- | {{:pasted:20180103-210625.png?500}} | + | {{:pasted:20180103-210625.png?450}} |
ライン 418: | ライン 418: | ||
</code> | </code> | ||
- | {{:pasted:20180103-210705.png?400}} | + | {{:pasted:20180103-210705.png?350}} |
ただし、上で説明したように、子のオブジェクトに同じ名前のプロパティが見つかった場合はそちらが使われるので、親の同名のプロパティは参照されなくなる。たとえば、次の場合はObjBのプロパティが参照されるので、「180」が表示される。 | ただし、上で説明したように、子のオブジェクトに同じ名前のプロパティが見つかった場合はそちらが使われるので、親の同名のプロパティは参照されなくなる。たとえば、次の場合はObjBのプロパティが参照されるので、「180」が表示される。 | ||
ライン 590: | ライン 590: | ||
### コメント | ### コメント | ||
- | 「//」から行末までは**注釈**(**コメント**)と解釈され、プログラムの一部として扱われない。人が読むためのメモや、一時的にプログラムの一部を実行したくないときのコメントアウトなどに使うことができる。 | + | 「/ /」から行末までは**注釈**(**コメント**)と解釈され、プログラムの一部として扱われない。人が読むためのメモや、一時的にプログラムの一部を実行したくないときのコメントアウトなどに使うことができる。 |
たとえば、次の例で、1行目はプログラム全体の注釈、2行目はその処理の注釈、3行目は実行されないように一時的にプログラムの一部をコメントアウトしている。 | たとえば、次の例で、1行目はプログラム全体の注釈、2行目はその処理の注釈、3行目は実行されないように一時的にプログラムの一部をコメントアウトしている。 | ||
ライン 599: | ライン 599: | ||
// かめきち=タートル!作る。 | // かめきち=タートル!作る。 | ||
</code> | </code> | ||
+ | |||