<return> ステップ要素を使用すると、現在のブロックの実行を停止し、オプションとして returns 値を呼び出し側ステップに返すことができます。<return> ステップ要素は、次の要素内だけに出現できます。
installSteps
uninstallSteps
control
retarget
then
else
block
catch
finally
simpleSteps
dependantCleanup
install、uninstall、または call ブロック宣言内に returns=true 属性が存在する場合は、ブロック定義の実行パスごとに、対応する捕捉されていない <raise> または <return> ステップが必須になります。
<return> ステップはブロック内の任意の場所に出現でき、通常は Java return 文のセマンティクスの後に続きます。ブロックの複雑さによっては、すべての実行パスが確実に値を返すように、2 つ以上の <return> ステップが必要になります。return に続いて追加ステップが示される場合は、チェックインエラーがスローされます。ただし、<return> ステップが <try> ブロック内に出現し、追加ステップが対応する <finally> ブロックで囲まれている場合を除きます。<raise> ステップが捕捉されておらず、現在のブロックスコープ内で処理される場合に限り、実行パスが <raise> ステップで終了することもあります。ブロックで returns 属性が指定されていなくても <return> ステップをブロック内で使用できますが、その場合は返す値を指定してはいけません。<return> ステップで値が指定されていても、returns 属性がそのブロックに指定されていないと、チェックインエラーが発生します。
<return> ステップには、String 型の属性値が 1 つあります。この値は戻り値です。値が指定されていない場合、ブロックは値が返されずにステップ実行されます。
次の例は、<try> および <finally> ブロック内の <return> ステップを示しています。値 b が返されます (Java の場合と同様)。
<try> <block> <return value="a" </block> <catch/> <finally> <return value="b"> </finally> </try> |
条件付きで使用される <return> ステップの例を、次に示します (分かりやすいよう行番号を追加)。var1 が true の場合、5 行目の <return> ステップによってブロックの残りのブロックがスキップされます。8 行目と 9 行目はまったく実行されません。var1 が true ではない場合は、9 行目の <return> ステップが、ブロック内で実行される最後のステップになります。
1. <control name = "blah" returns="true"> 2. <varList> 3. <var name="var1" default="val1"/> 4. <var name="var2" default="val2"/> 5. </varList> 6. <if> 7. <condition><istrue value=":[var1]"/></condition> 8. <then> 9. <return value=":[var2]"> 10. </then> 11. </if> 12. <assign varName="var2" value="new value"/> 13. <return value=":[var2]"/> 14.</control> |
一方、次の例は、<try> ブロック内での <return> ステップの条件付きの使用を示しています。var1 が true かどうかにかかわらず、15 行目が実行される最後の行になります。
1. <control name="blah" returns="true"> 2. <varList> 3. <var name="var1" default="val1"/> 4. <var name="var2" default="val2"/> 5. </varList> 6. <try> 7. <block> 8. <if> 9. <condition><istrue value=":[var1]"/></condition> 10. <then> 11. <return value=":[var2]"> 12. </then> 13. </if> 14. <assign varName="var2" value="new value"/> 15. <return value=":[var2]"/> 16. </block> 17. <catch/> 18. <finally> 19. <pause delaySecs="5"/> 20. </finally> 21. </try> 22.</control> |
次の例は、inlineSubplan または execSubplan 本体の <SimpleSteps> 内にある <return> ステップを示しています。制御は、inlineSubplan または execSubplan を呼び出す一連のステップ内の次の行に戻ります。4 行目の <return> ステップのあとの、次のステップは 7 行目です。
1. <complexSteps> 2. <inlineSubplan> 3. <simpleSteps> 4. <return/> 5. </simpleSteps> 6. </inlineSubplan> 7. <inlineSubplan> 8. <simpleSteps> 9. <pause delaySecs="1"/> 10. </simpleSteps> 11. </inlineSubplan> 12.</complexSteps> |