典型的なグローバル変数とローカル変数の間違いの例の紹介
プログラミング初学者向けに、グローバル変数に関する典型的な間違いの例を共有させていただきます。
具体的にはグローバル変数を関数の中で書き換える際の典型的な間違いについてです。
関数の中でグローバル変数を書き換える際のエラー
- 関数の中でグローバル変数を書き換えるときは、関数の中でglobal変数であることを明示しないとエラーになる。
以下の例は、エラーとなる。
# global変数
c = 0
function dosomething(N::Integer)
c += N
end
以下は正しく動く例
# global変数
c = 0
function dosomething(N::Integer)
global c #関数の中から外で定義された変数を見えるようにする。
c += N
end
dosomething(3)
@show c
dosomething(5)
@show c
しかし、この場合グローバル変数の値が書き変わってしまうのでcを今後使う際は、注意が必要である。
関数の中でグローバル変数を単に参照するコードの場合
ただ単にグローバル変数を参照しているだけの場合は、グローバル変数を書き換えないため動く。
# OK
d = 1
function incremet(N::Integer)
return N + d
end
しかしながら、グローバル変数はなるべく使わない方が良いとされる。もし使うとしてもconstをつけると良いだろう。なぜならコンストつけると絶対値は変わらないからである。それによって意図せず参照している値が変わっていることによる間違いを防ぐことができる。
コンストを使う場合、
const d = 1
function incremet(N::Integer)
return N + d
end
次にグローバル変数sの値を変える場合を考える。 関数の中でconstを使ったグローバル変数の値を変えると怒られるから、一旦別の変数にコピーをする。その場合、元々のグローバル変数はずっと変わらない。
const s = 0
function dosomething(N::Integer)
q = s
for i in 1:N
q += incremet(i)
end
return q
end
本記事の紹介はここまでです。
最後に、そもそもグローバル変数を使わない場合のコードは、
function dosomething(M)
s = 0
for i in 1:M
s += incremet(i)
end
return s
end
まとめ
プログラミング初学者向けに、グローバル変数に関する典型的な間違いを共有しました。