質問: 現在 Android ゲームプログラミングの書籍を用いて勉強中です。 外部ストレージにファイルを作成し、削除するクラスを作成していたのですが、そのファイル削除の処理が下記のような記述でした。 ここで一点お伺いさせていただきたいのですが、if 文の条件式として記述されている `textFile.delete()` は実際に実行され、ファイルが削除されるのでしょうか。 if 文の条件式に論理式を書いた場合はその結果が評価され後述の処理を実行するか判断される認識ですが、下記のようにメソッドを書いた場合は実際に条件式に指定したメソッドが実行され、その戻り値で評価が行われる認識で相違ないでしょうか。 無知で申し訳ございません。調べたのですが、調べ方が悪いのか求めている回答に辿り着けなかったため、どうか教えていただきたいです。 ``` if (!textFile.delete()) { // 外部ストレージからファイルを削除する textView.setText("Couldn't remove temporary file"); } ```
回答: はい、実行されます。 Javaを含む多くの言語では、「式の値を求めること(「評価する」と言ったりします)」=「その式を実行すること」です。`delete()`のように副作用のある式を実行すれば、その動作が行われた後、結果(`true`/`false`)が`if`文の判定に使用されます。 「評価する」=「実行する」が大前提なので、普通に検索しても、特に解説は見つけられなかったのでしょう。 `if`文の条件式部分にむやみに副作用のある式を使うと、プログラムが非常に読みにくくなることがあるので気をつけなければいけませんが、例示の`delete()`のように「何かの動作をして成功・失敗を論理値で返す」と言うメソッドの場合にはよく使われます。