ブログトップ プライバシーポリシー お問い合わせ

procesingのsetup()の途中でexit()

はじめに

setup()関数中でtry~catchでエラーが出た時に、printして即終了させようと思いました。

exit()を書いたらそこでプログラムが終了するのかなと勝手に思っていたのですが、終了せずあれ?と疑問に思いました。

方法をぐぐっても引っかからなかったので、自力でがんばって、結果うまくいったので記事にしました(ググり力不足だったらどうしよう)。

setup()中で即終了させる方法

exit()のあとにreturnして、setup()を途中で抜けるようにします。draw()でも同じようにして終了できました。

exit()の挙動

setup()中で即終了させたいと思ったので、exit()の挙動を調べました。

processing.org

Rather than terminating immediately, exit() will cause the sketch to exit after draw() has completed (or after setup() completes if called during the setup() function).

「setup()中で呼ぶと、setup()が終わった後に抜けます。draw()中で呼ぶと、draw()が終わったあとに抜けます。」

setup()の途中で即終了させるには

今回はsetup()の途中で即終了させたいので、
exit()のあとにreturnして、setup()/draw()を途中で抜けるように工夫します。

以下に、試したコードの実行結果を載せます。

exit.pde

boolean isError = true; 

void setup(){
  size(600, 400);
  background(255);
  
  println("a");
  exit();      // Not exited
  
  // Ex. error occurs
  if( isError ){ // true
    println("b");
    exit();
    return;     // -> exit
  }
  
  println("c"); // Not executed
  
}

void draw(){
  print("d"); // Not executed
  
}

実行結果

a
b

 

f:id:Fluorite36:20191225032415p:plain

ソースコードと実行結果

printデバッグをして確かめました。

  • "a"が表示されました。
  • exit()のみでreturnしないと抜けられないので、その次が実行され、
  • if( true )でif文の中に入って、"b"が表示されました。
  • 次にexit()とreturnをして、setup()を抜け、描画ウィンドウが閉じられ、終了しました。
  • その下に書かれている部分は実行されないので、"c","d"は表示されませんでした。

ひとこと

たのしいprocessingライフを送りたいです。

 

== 追記 2020/01/07 ==

コピペ記事っぽく見えて悲しくなったので、がんばりが伝わるといいなと思い説明文を全体的に書き直しました。ところでぼくはクリスマスに何をやっていたんだろう...