- 概要
- abs
- acos
- asc
- asin
- assert
- atan
- atan2
- background
- beep
- bgmadd
- bgmplay
- bgmstate
- bgmstop
- bind$
- binding
- box
- call
- chr$
- circle
- cls
- connect$
- connected@
- connecting
- cos
- crash
- data
- datetime@
- def animation
- def background
- def pic
- direction
- disconnect
- distance
- do
- elemtype
- else
- else if
- end
- end function
- end if
- end procedure
- exit do
- exit for
- exit procedure
- fetch@
- for
- function
- hear$
- hide
- if
- include
- inkey$
- input
- left$
- len
- let
- line
- listen
- listening
- locate
- loop
- main
- mainvar
- mainvar$
- mainvar@
- max
- mid$
- min
- move
- moving
- next
- oval
- paint
- pause
- pi
- play
- point
- pow
- procedure
- pset
- put
- random
- read
- receive@
- render
- return
- right$
- roll
- round
- scr$
- send
- sgn
- show
- sin
- speak
- speed
- sprite
- sqr
- stay
- stop
- str$
- tan
- tap
- time
- touch
- truncate
- turn
- unbind
- val
- visible
- write
- xpos
- ypos
procedure
働き
プロシージャを作成します。
文法
procedure <名前> [<仮引数1>[,<仮引数2> …]]
- 名前 - プロシージャの名前
- 仮引数 - 仮引数の名前
説明
プロシージャとは、複数の命令や処理を1つにまとめて名前をつけたものです。procedure 命令は、プロシージャを作るときに利用します。
プロシージャと独自関数は、戻り値の有無や使用可能な場所が異なります。
- プロシージャ - 命令と同じように使用します。式の中では使えません。戻り値がありません。
- 独自関数 -式の中で使用します。命令と同じようには使えません。 戻り値があります。
複数の命令によって実現する機能に名前をつけてプロシージャとすることで、call 命令を使ってプロシージャをいつでも呼び出すことができるようになります。これには以下の利点があります。
- 何度も同じような命令の羅列を書く必要がなくなります。
- 複数の命令の呼び出しの結果行われる処理に名前がつくことで、プログラムの可読性が向上します。
- プロシージャから更にプロシージャを呼び出す(再帰呼び出しと呼びます)ことで、アルゴリズムの記述がより簡潔になります。
プロシージャは、procedure 命令から end procedure 命令の間に書かれた複数の命令が対象となります。同じ名前のプロシージャを複数作ることはできません。
プロシージャは専用の変数の格納領域を持ちますので、他のプロシージャやプロシージャ外で作られた変数を利用することはできません。また、同じ名前のプロシージャでも、call 命令の呼び出しごとに、変数の格納領域は別となります。
call 命令によってプロシージャを呼び出すときに、値(実引数)を渡すことができます。渡された値をプロシージャが受け取るために、仮引数という変数を procedure 命令に記述します。例えば、age という名前の仮引数を procedure 命令に記述したとすると、call 命令にて 47 を指定した場合は、そのプロシージャ内で age という名前の数値変数が作られて、値として 47 が自動的に代入されます。
仮引数は、1つのプロシージャで複数書くことができます。ただし、同じ名前の仮引数を作ることはできません。
プロシージャから別のプロシージャを呼び出すことができますが、その回数が 1000 回以上となるとエラーとなります。
call 命令によってプロシージャが呼び出された際には、対象となる procedure 命令の次の行から実行されます。もし procedure 命令が書かれた行が実行された場合は、そのプロシージャが持つ命令群は実行されずに、対応する end procedure 命令の次の行にジャンプします。
サンプルプログラム
rem procedure
for i=1 to 10
call fact i,1,i
next
procedure fact n,v,i
if n=0 then
print i;"!=";v
else
call fact n-1,v*n,i
end if
end procedure
print "Done"