if文の後の合流について(質問掲示板

投稿: 128 mini fragile 投稿:2012/05/02 19:07:02(最新:2012/05/03 15:51:03)
今回の質問はifによる分岐です。
下のスクリプトを実行するとCは表示されるのですが、Dが表示されません。

流れとしては
"C"-->case文でもよさそうな所(※部)で分岐-->return-->合流-->"D"
と想定しているのですが、どこが違うのでしょうか?

def count()
  if getVariable("q") > 0
speak("C")#ココは表示される
#※※※ここから※※※
    if (getVariable("q") == 1) || (getVariable("q") == 17)
      return 1
    elsif (getVariable("q") == 2) || (getVariable("q") == 16)
      return 2
    elsif (getVariable("q") == 3) || (getVariable("q") == 15)
      return 4
    elsif (getVariable("q") == 4) || (getVariable("q") == 14)
      return 8
    else
      return 16
    end
#※※※ここまで※※※
    setVariable("q", getVariable("q") + 1)
speak("D")#ココは表示されない
  else
  return 0
  end
  if getVariable("q") == 18
    setVariable("q", 0)
  end
end


po = true
setVariable("q", 1)
txt = createText(10, 10, 780, 60)
i = 0
while po
i = i + 1

speak("A")
setText(txt, "count() = ", count(), " , q = ", getVariable("q"), " , ", i)
waitTime(30)

speak("B")
end

コメントする

コメントするには、ログインする必要があります。

コメント一覧

Cdv30200 aoi icon mini aoihikawa(投稿日:2012/05/02 20:07, 履歴)
1つのdef文の中には
returnを1回のみしか
記述できないため

8行目でエラーとなり
count関数が正常に実行されないまま
中断した状態でsetTextに戻ってきています。

count関数内で一度
ローカル変数に値を代入し
関数の最後でローカル変数の値を
returnにセットするようにしましょう。
128 mini fragile(投稿日:2012/05/02 20:26, 履歴)
returnは一回のみ なんですね(汗
デバックでエラーが出なかったので てっきり...
回答ありがとうございました。
Zararu128x128 mini dycoon(投稿日:2012/05/03 13:07, 履歴)
returnは呼ばれた場所でdefを抜けて値を返します。
また、defの中でも複数回記述することができます。

質問文の処理の流れについては
"C"-->case文でもよさそうな所(※部)で分岐-->return-->関数を抜ける

という形になります。

Cdv30200 aoi icon mini aoihikawa(投稿日:2012/05/03 14:00, 履歴)
複数記述することも、可能なのですね。

if文の分岐内容を判断中に
return文を見つけて、
def文を抜けてしまっている
ということでしょうか?
Zararu128x128 mini dycoon(投稿日:2012/05/03 14:16, 履歴)
> if文の分岐内容を判断中に
> return文を見つけて、
> def文を抜けてしまっている
> ということでしょうか?

そうです。
Nyan mini rurun9(投稿日:2012/05/03 15:47, 履歴)
だとすると、returnを複数記述する事ができても意味が無いのでは?
Nyan mini rurun9(投稿日:2012/05/03 15:51, 履歴)
ごめんなさい。意味がワカリマシタ
returnより後に何か書いてあっても、通過してない部分の処理は実行されるワケないですよね