🙆

Golandでシャドウイングを検知する

2021/04/18に公開

概要

以前Goのシャドウイングの罠にハマったので,普段使っているGolandでシャドウイングを検知する方法が無いか調べました.

シャドウイングって?

コトバンク参照

オブジェクト指向言語において、フィールド名、ローカル変数名、パラメータ名が、同じ名前のフィールド名、ローカル変数名、パラメータ名の別の宣言によって、単純名ではアクセスできなくなること。

以下のようにスコープ内で宣言済みの変数を変更したい場合があったとします.

var shadow string
{
	shadow = "シャドウイング"
	fmt.Println(shadow)
}
fmt.Println(shadow)

こちらは想定通り2回「シャドウイング」が出力されます.

しかし,以下のコードでは想定通りの動きになりません.
Playground

var shadow string
{
	shadow := "シャドウイング"
	fmt.Println(shadow)
}
fmt.Println(shadow)

このコードでは一度しか「シャドウイング」が出力されません.
原因はスコープ内で shadow := "シャドウイング" のようにコロンを使って宣言されているので,スコープ内の変数として定義されてしまい,既存変数のshadowが空文字のままになっているからです.

Golandでシャドウイング検知

意図しないシャドウイングを避けたいところですが,Golandではシャドウイングを検知してくれません.

ですが設定を変更することでシャドウイングを検知することができます.

  1. Goland > Preferences を開く

  2. 左上の検索欄に「shadow」と入力

  3. InspectionsのShadowing variableにチェックし,Applyする.

  4. OKで画面をクローズ.
    これでシャドウイングしている変数があれば波線で警告が出るようになりました

まとめ

Golandでシャドウイングを検知する方法の紹介でした.
これで意図していないシャドウイングを完全に防げるわけではありませんが,無いよりはマシかと思います.

誤字脱字などあれば指摘いただけると幸いです.

Discussion