今日はコードリーディングを主体として進めますが、今日はいつもに増してスパルタ指導で...。
☆や★の付いている全てのメッセージを自分自身で説明してみてください。1行1行を説明する必要はありません。
そのメッセージ全体の処理の流れを(初心者にもわかるように)日本語で分かりやすく説明していただければ充分です。
(1行1行を細かく説明してしまうと、全体構造の中の自分の位置を見失い、コードに溺れてしまいますので。)
(☆:比較的簡単 ★:比較的難解)
- ☆imageOfEarth, ★pictureOfEarth
- ☆postOpenWith:, ☆noticeOfWindowClose:
- ☆longitudeField, ☆latitudeField
- ★bodyOfEarth, ☆viewfinderOfEarth
- ★viewEarth
- ★clicked:
- ☆updateLongitudeField:, ☆updateLatitudeField
- ★updateViewfinderOfEarth:
☆imageOfEarth, ★pictureOfEarth
ペインタでGUI部品を配置する時、いつもそれぞれの部品に対してIDを付していたはずですが、その理由をようやく知ることができたと思います。
IDのシンボルとcomponentAt:メッセージがあれば、目的のオブジェクトを簡単に探しだすことができるのです。
pictureOfEarthでは、深いネスト構造に抵抗を覚えるかもしれませんが、GUIの部品を包み込む風呂敷(ラッパー/包み紙)を展開するだけですから難しいことはありません。
この際、新出語彙は覚えてしまいましょう。
☆postOpenWith:, ☆noticeOfWindowClose:
postOpenWith:はご存知のとおりです。では、noticeOfWindowClose:とは何でしょうか。postOpenWith:と同じ節で紹介していることからも類推できるかもしれませんね。
☆longitudeField, ☆latitudeField
すでに幾度も見てきた構造です。さらっと説明しましょう。
★bodyOfEarth, ☆viewfinderOfEarth
きっと不明瞭な点が散在すると思います。そうした疑問を解決する方法として、少々荒っぽいですが「self halt」を用いてみると良いでしょう。
プログラムの実行時点で変数に束縛されているオブジェクトが何かを調べることができますし、その他にも様々なことができます。
(ただし、プログラムによっては「self halt」の挿入が危険な行為にあたる場合があります。実は今回もその類なのですが...。)
★viewEarth
ウィンドウの表示に関する様々な配慮が窺える部分です。あらゆる状況に対処しているという構造を認識できるでしょうか。
★clicked:
見慣れないイディオムがあると思いますが、それさえ掴めば難しい構造ではありません。特に、3つ目(accuracy)は押さえておきたいところ。
JunCursors crossCursor showWhile: [3 seconds wait]
13 \\ 5
JunGeometry accuracy
☆updateLongitudeField:, ☆updateLatitudeField
ゴチャゴチャと書いてありますが、その内容は単純なものばかりですから気負けせず。
★updateViewfinderOfEarth:
このメソッドは読み応えがあります。それも「プログラム的に」というより「数学的に」です。
3次元グラフィクスにおける基本操作が集っているので、しっかりと理解しておきましょう。