サブルーチンとは何か

Last-modified: 2015-05-03 (日) 21:21:45

全く同じ処理が何回も実行される場合に、その処理をサブルーチンにすることで、下のコード一行だけで、その処理全体を実行できる。

  gosub @xxxxxx
  :main
  gosub @SUB_FADE_500MS
  gosub @SUB_FADE_500MS
  gosub @SUB_FADE_500MS
  gosub @SUB_FADE_500MS
  0A93: end_custom_thread
  :SUB_FADE_500MS
  016A: fade 0 time 500
  wait 500
  016A: fade 1 time 0
  return

上記コードは、
0.5秒でフェードアウト(暗転)し、その後一瞬でフェードアウトが解除される、
という処理を4回繰り返すスクリプトです。
上記のコードをサブルーチンを使わず記述すると下記のコードになります。

  :main
  016A: fade 0 time 500
  wait 500
  016A: fade 1 time 0
  016A: fade 0 time 500
  wait 500
  016A: fade 1 time 0
  016A: fade 0 time 500
  wait 500
  016A: fade 1 time 0
  016A: fade 0 time 500
  wait 500
  016A: fade 1 time 0
  0A93: end_custom_thread

サブルーチンを使わず記述したものが14行であるのに対し、
サブルーチンを使用して記述したものは11行です。
短くなってて嬉しいです。おしまい。

※gosubを使った場合必ずreturnで戻りましょう。
※gosubで飛べる回数は最大で8回です。下記コードのようなことをすると強制終了するそうです。

  :main
  gosub @SUB_FADE_500MS_1
  gosub @SUB_FADE_500MS_1
  gosub @SUB_FADE_500MS_1
  gosub @SUB_FADE_500MS_1
  0A93: end_custom_thread
  :SUB_FADE_500MS_1
  gosub @SUB_FADE_500MS_2
  return
  :SUB_FADE_500MS_2
  gosub @SUB_FADE_500MS_3
  return
  :SUB_FADE_500MS_3
  gosub @SUB_FADE_500MS_4
  return
  :SUB_FADE_500MS_4
  gosub @SUB_FADE_500MS_5
  return
  :SUB_FADE_500MS_5
  gosub @SUB_FADE_500MS_6
  return
  :SUB_FADE_500MS_6
  gosub @SUB_FADE_500MS_7
  return
  :SUB_FADE_500MS_7
  gosub @SUB_FADE_500MS_8
  return
  :SUB_FADE_500MS_8
  gosub @SUB_FADE_500MS_9
  return
  :SUB_FADE_500MS_9
  016A: fade 0 time 500
  wait 500
  016A: fade 1 time 0
  return