8
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[Xcode/Swift5] returnの後の処理が意図せず実行される「Expression following 'return' is treated as an argument of the 'return'」に注意

Last updated at Posted at 2020-11-10

開発環境はXcode 12.1です。

デバッグ中、何かの拍子に処理の途中にreturnさせることがあります。

func hoge(){
    print("A")
    return
    print("B")
    print("C")
}

当然print("A")が実行されます。
で、衝撃なんですが、print("B")実行されます

なぜ??????

もっと複雑なコードの中で同様の事態に遭遇し、20分ほど悩みました。
しかし実はwarningが出ています。複雑なネストの深いコードが影響してwarningが全文表示されず、私は「当然code after 'return' will never be executedと書いてあるのだろう」と考えて読みもしなかったのですが、これが大変な内容でした。

Expression following 'return' is treated as an argument of the 'return'

つまり、returnの次の部分が返り値と解釈されるよ、とのこと。
確かに、print("B")Voidを返します。関数hogeの返り値もVoidです。ですから解釈は通ります。つまり冒頭のコードはこう解釈されていることになります。

func hoge() -> Void {
    print("A")
    return print("B")
    print("C")
}

print("B")が呼ばれるわけです。そんなつもりでコードを書いたわけではないのですが……。

warningを無視せず読み、変なところにreturnを書かず、素直にコメントアウトしよう、という気持ちになりました。

8
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?