var a = a や if let b = b {} のような紛らわしい構文も使えるswiftのシャドウイング


-- この記事はXcode8 beta5での動作を元に書いていますが、正式リリースまでに動作が変わる可能性があります。--

実はシャドウイングというのは初めて聞きました。
どうやら変数名を使い回すことをシャドウイングと言うようです。

swift-evolutionのこの提案でシャドウイングについて触れています。
ここではSwift3で関数のパラメータにvar宣言が使えなくなるため、機械的に置き換える方法として下記のコードを紹介しています。

func foo(i: Int) {
  var i = i
}

この書き方、他でも使えるかと思って試してみたらエラーになりました。

let i = 3
do {
  var i = i   // Error: Variable used within its own initial value
}

でも、Optional Bindingではシャドウイングを使うことができます。

let b: Int? = 3
if let b = b {
    print(b)   // 3
}
print(b)   // Optional(3)

他にもシャドウイングが使えるパターンがあるかもしれません。

シャドウイングは変数名を決めるのが煩わしい時は便利です。
しかし、コードを誤認する可能性もあります。
複数人で作業する時はコーディング規約などでルールを明確化する必要があるでしょう。

参考文献:
SE-0003 Removing var from Function Parameters