UTF-8に単純変換
This commit is contained in:
@@ -5,85 +5,85 @@
|
||||
<!-- generated by to_html.pl from SubRoutine.xml -->
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS" />
|
||||
<title>�T�u���[�`�����g����</title>
|
||||
<title>サブルーチンを使おう</title>
|
||||
<meta name="author" content="W.Dee" />
|
||||
<meta http-equiv="Content-Style-Type" content="text/css" />
|
||||
<meta http-equiv="Content-Script-Type" content="text/javascript" />
|
||||
<link href="browser.css" type="text/css" rel="stylesheet" title="�g���g���֘A���t�@�����X�p�W���X�^�C��" />
|
||||
<link href="browser.css" type="text/css" rel="stylesheet" title="吉里吉里関連リファレンス用標準スタイル" />
|
||||
<link href="mailto:[email protected]" rev="Made" />
|
||||
<link href="index.html" target="_top" rel="Start" title="�g�b�v�y�[�W" />
|
||||
<link href="index.html" target="_top" rel="Start" title="トップページ" />
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<h1><a id="id196" name="id196">�T�u���[�`���Ƃ�</a>
|
||||
<h1><a id="id196" name="id196">サブルーチンとは</a>
|
||||
</h1><div class="para"><div>
|
||||
�@�T�u���[�`���Ƃ́A�������̏����̂��܂Ƃ߂����ŁA�ق��̉ӏ������u�Ăяo���āv�������ł��B�T�u���[�`���̏������I�����ƁA�Ăяo���������䂪�߂��܂��B<br />
|
||||
サブルーチンとは、いくつかの処理のをまとめた物で、ほかの箇所から「呼び出して」つかう物です。サブルーチンの処理が終わると、呼び出した所へ制御が戻ります。<br />
|
||||
<br />
|
||||
�@�}�N�� <span class="comlink"> ( �� <a target="main" class="jump" href="Macro.html">�}�N�����g����</a> ) </span> �Ƌ@�\�͎��Ă��܂����A�T�u���[�`���̕��������{�i�I�ȏ������s���̂ɑ��A�}�N���͊ȒP�ȏ������s���p�r�ł��B<br />
|
||||
マクロ <span class="comlink"> ( → <a target="main" class="jump" href="Macro.html">マクロを使おう</a> ) </span> と機能は似ていますが、サブルーチンの方がより本格的な処理を行うのに対し、マクロは簡単な処理を行う用途です。<br />
|
||||
</div></div>
|
||||
<h1><a id="id197" name="id197">�T�u���[�`���̊��{�I�Ȏg����</a>
|
||||
<h1><a id="id197" name="id197">サブルーチンの基本的な使い方</a>
|
||||
</h1><div class="para"><div>
|
||||
�@�T�u���[�`���̓��x���ɂ����ċ��ʂ����܂��̂ŁA���x�������`���܂��B�T�u���[�`�������Ăяo�����ɖ߂��Ƃ����� <a id="id198" name="id198" class="targanchor"><dfn>return</dfn></a> �^�O�A�T�u���[�`�����Ăяo���ɂ� <a id="id199" name="id199" class="targanchor"><dfn>call</dfn></a> �^�O���p���܂��B<br />
|
||||
�@���̗������Ă��������B<br />
|
||||
サブルーチンはラベルによって区別されますので、ラベルを定義します。サブルーチンから呼び出し元に戻るところに <a id="id198" name="id198" class="targanchor"><dfn>return</dfn></a> タグ、サブルーチンを呼び出すには <a id="id199" name="id199" class="targanchor"><dfn>call</dfn></a> タグを用います。<br />
|
||||
下の例を見てください。<br />
|
||||
|
||||
<br />
|
||||
<code class="bq">[wait time=200]<br />
|
||||
*start|�X�^�[�g<br />
|
||||
*start|スタート<br />
|
||||
[cm]<br />
|
||||
�T�u���[�`�����Ăяo���܂��B[l][r]<br />
|
||||
サブルーチンを呼び出します。[l][r]<br />
|
||||
<em>[call target=*subroutine]</em><br />
|
||||
�T�u���[�`�����Ăяo���܂����B<br />
|
||||
サブルーチンを呼び出しました。<br />
|
||||
[s]<br />
|
||||
<br />
|
||||
<em>*subroutine</em><br />
|
||||
�����̓T�u���[�`���ł��B[l][r]<br />
|
||||
�N���b�N�������ƌĂяo�����ɖ߂��܂��B[l][r]<br />
|
||||
これはサブルーチンです。[l][r]<br />
|
||||
クリックをすると呼び出し元に戻ります。[l][r]<br />
|
||||
<em>[return]</em><br />
|
||||
</code>
|
||||
<br />
|
||||
|
||||
<br />
|
||||
�@���āA���̗������s�������ƁA�u�T�u���[�`�����Ăяo���܂��B�v�̃��b�Z�[�W�̂��ƂɁu�����̓T�u���[�`���ł��B�v�ƕ\�������A�u�N���b�N�������ƌĂяo�����ɖ߂��܂��B�v�ŃN���b�N�����ƁA�u�T�u���[�`�����Ăяo���܂����B�v�ƕ\���������͂��ł��B<br />
|
||||
�@�܂��Acall �^�O�Ŏw�肵�����x���ɃW�����v�������̂ł����A���̂Ƃ��ɌĂяo�����ʒu�������I�ɋL�^�����Areturn �^�O�ł́A���̋L�^���ꂽ�Ăяo�����Ɏ����I�ɖ߂��܂� ( ���̎����I�ɋL�^���������̂��u<a id="id200" name="id200" class="targanchor"><dfn>�R�[���X�^�b�N</dfn></a>�v�ƌĂ��ł��܂� )�B<br />
|
||||
�@���̗��ł́A<code class="inlinecode">*subroutine</code> ���� <code class="inlinecode">[return]</code> �܂ł��u�T�u���[�`���v�ł��B<br />
|
||||
さて、この例を実行させると、「サブルーチンを呼び出します。」のメッセージのあとに「これはサブルーチンです。」と表示され、「クリックをすると呼び出し元に戻ります。」でクリックすると、「サブルーチンを呼び出しました。」と表示されるはずです。<br />
|
||||
つまり、call タグで指定したラベルにジャンプをするのですが、このときに呼び出した位置が自動的に記録され、return タグでは、この記録された呼び出し元に自動的に戻ります ( この自動的に記録されるものを「<a id="id200" name="id200" class="targanchor"><dfn>コールスタック</dfn></a>」と呼んでいます )。<br />
|
||||
この例では、<code class="inlinecode">*subroutine</code> から <code class="inlinecode">[return]</code> までが「サブルーチン」です。<br />
|
||||
<br />
|
||||
�@�T�u���[�`���̒������ق��̃T�u���[�`�����Ăяo�����Ƃ��ł��܂��B�Ăяo���̐[�� ( return �����ɂ����܂� call �ł��邩 ) �ɐ����͂����܂����B<br />
|
||||
サブルーチンの中からほかのサブルーチンを呼び出すこともできます。呼び出しの深さ ( return せずにいくつまで call できるか ) に制限はありません。<br />
|
||||
<br />
|
||||
�@���Ȃ݂Ɂu�I�������g���Ă݂悤�v�̏��ł̓��x���̎��ɂ� [cm] �������Ə����܂������A�Z�[�u�̉ӏ��ƂȂ��悤�� ( | �t���� ) ���x���̎��łȂ����� [cm] �������Ȃ��Ă� OK �ł��B<br />
|
||||
ちなみに「選択肢を使ってみよう」の所ではラベルの次には [cm] を書くと書きましたが、セーブの箇所となるような ( | 付きの ) ラベルの次でなければ [cm] を書かなくても OK です。<br />
|
||||
<br />
|
||||
<br />
|
||||
�@�R�[���X�^�b�N�ɂ́A�V�i���I�t�@�C�����A�V�i���I���̒��O�̃��x���Ƃ��ꂩ�� call �^�O�̂����s�܂ł̍s���Acall �^�O�̂����s�̓��e�A���̍s���ł̈ʒu�̏����L�^�����܂����B�V�i���I�̃f�o�b�O���ȂǂŁA�߂����̃V�i���I�t�@�C�����̍\�����ς����ƂƂ��ł��Ȃ��ʒu�ɖ߂��Ă��܂��ꍇ�������̂Œ��ӂ��Ă��������B<br />
|
||||
�@���{�I�ɂ́A�T�u���[�`���̃��x�����T�u���[�`�����ɂ́A�Z�[�u�ӏ��ƂȂ郉�x�� ( | �t���̃��x�� ) ���g���Ȃ�/�����Ȃ����g�ł��B<br />
|
||||
コールスタックには、シナリオファイル名、シナリオ中の直前のラベルとそれから call タグのある行までの行数、call タグのある行の内容、その行内での位置の情報しか記録されません。シナリオのデバッグ中などで、戻り先のシナリオファイル中の構成が変わるととんでもない位置に戻ってしまう場合があるので注意してください。<br />
|
||||
基本的には、サブルーチンのラベルやサブルーチン中には、セーブ箇所となるラベル ( | 付きのラベル ) を使わない/作らないが吉です。<br />
|
||||
</div></div>
|
||||
<h1><a id="id201" name="id201">�T�u���[�`���Ɋւ��钍��</a>
|
||||
<h1><a id="id201" name="id201">サブルーチンに関する注意</a>
|
||||
</h1><div class="para"><div>
|
||||
�@call �Ŏ������g���Ăт����Ă��܂����肷���Ɩ������[�v�ɂ͂܂��܂��B<br />
|
||||
�@call �� return �̑Ή����Ƃ��Ă��Ȃ��ƁA�ǂ��ǂ��R�[���X�^�b�N�������Ă��������A���邢�� return �^�O�̂Ƃ����ŌĂяo�����ɖ߂��Ȃ��Ȃ��ăG���[�ɂȂ鎖�������܂��̂ŁA���ӂ��Ă��������B<br />
|
||||
call で自分自身を呼びだしてしまったりすると無限ループにはまります。<br />
|
||||
call と return の対応がとれていないと、どんどんコールスタックが増えていったり、あるいは return タグのところで呼び出し元に戻れなくなってエラーになる事がありますので、注意してください。<br />
|
||||
<br />
|
||||
�@�����ƁA���̗��̂悤��<br />
|
||||
それと、次の例のように<br />
|
||||
<br />
|
||||
|
||||
<br />
|
||||
<code class="bq">*subroutine<br />
|
||||
�E�E�E<br />
|
||||
・・・<br />
|
||||
[if exp="f.flag1"]<em>[jump target=*otherplaces1]</em>[endif]<br />
|
||||
[if exp="f.flag2"]<em>[jump target=*otherplaces2]</em>[endif]<br />
|
||||
�E�E�E<br />
|
||||
・・・<br />
|
||||
[return]<br />
|
||||
<br />
|
||||
*otherplaces1<br />
|
||||
�E�E�E<br />
|
||||
・・・<br />
|
||||
[return]<br />
|
||||
<br />
|
||||
*otherplaces2<br />
|
||||
;���̐��ɂ� return �^�O���Ȃ��E�E�E<br />
|
||||
;この先には return タグがない・・・<br />
|
||||
</code>
|
||||
<br />
|
||||
|
||||
<br />
|
||||
�@�T�u���[�`�����ő��̏ꏊ�ɃW�����v�����ꍇ�͒��ӂ��Ă��������Botherplaces1 �ɃW�����v�����ꍇ�́A�W�����v���� return �������̂� call �` return �̃o�����X���������Ƃ͂����܂����B�������Aotherplaces2 �ɃW�����v�����ꍇ�A�W�����v�������� return �������Ȃ��̂ŁA���̃T�u���[�`�������́u�߂��ĂȂ��v���ƂɂȂ��܂��B�܂��Acall �` return �̃o�����X�������Ă��܂��܂��B<br />
|
||||
サブルーチン中で他の場所にジャンプする場合は注意してください。otherplaces1 にジャンプする場合は、ジャンプ先に return があるので call ~ return のバランスを崩すことはありません。しかし、otherplaces2 にジャンプする場合、ジャンプした先に return が現れないので、そのサブルーチンからは「戻ってない」ことになります。つまり、call ~ return のバランスを崩してしまいます。<br />
|
||||
<br />
|
||||
�@�����A�Ăяo�����ɖ߂��̂ł͂Ȃ��A�C�ӂ̏ꏊ�ɖ߂肽���ꍇ�́Areturn �^�O�� storage �� target �����𗘗p���āA�C�ӂ̏ꏊ�ɖ߂邱�Ƃ��ł��܂��B<br />
|
||||
もし、呼び出し元に戻るのではなく、任意の場所に戻りたい場合は、return タグの storage や target 属性を利用して、任意の場所に戻ることができます。<br />
|
||||
</div></div>
|
||||
<script type="text/javascript" charset="Shift_JIS" src="documentid.js" ></script>
|
||||
<script type="text/javascript" charset="Shift_JIS" src="postcontent.js" ></script>
|
||||
|
||||
Reference in New Issue
Block a user