グローバル変数使ったら怒られた話。。。
どうも、最近20円で買ってきたうどん2袋をゆでた後に水でしめてかける味噌と焼き肉のタレで食べてるダイスケです。
「グローバル変数はあまり使わないでください。」
ソースレビューで言われて、やらないほうがいいのはわかったけどなんで??と思ったのでちょと調べてみました。
まだファイル内のコードが少ないときとかグローバル変数使いがちだと思います。
結論として「よくないので最終手段としましょう。」
では理由
グローバル変数とは
グローバル変数とは、プログラム中のどこからでも値をとったり入れたりできる変数です。
いろんな関数で使う値なんか一発グローバルにいれておけばいいじゃーんとか簡単に考えてやりがち。
そしてスパゲッティコードを量産していく...~完~
とはならないように気を付けましょう。
例文となんでダメなのかまとめます。
例えばこんな使い方
var ペンギン int := 1000
func currentPenginPrice() int{
ペンギン = neage()
return ペンギン
}
func neage() int{
return ペンギン + 500
}
みたいな感じ?
適当に作ってるので多少勘弁してください。
ペンギンがグローバル変数ですね。
currentPenginPriceでもneageでもペンギンを使えます。
なぜダメなのか?
一見便利にみえるグローバル変数。
まぁでもVueとかだったら割とある形じゃね?とも思う。
これちょっとフロントエンド開発するとき注意しよう。
別言語からメイン言語の練度がなぜか上がっている気がするー。
自分の考え
やっぱり一番最初に思いつくのは、のちのちいろんな処理ができてきたときにグローバルに置いておくと
どこでどんなふうに処理されているのかわからんくなって値がどうなっているのかわかりづらくなる
んだと思う。
あっちでもこっちでも+100とか+400とかやられてたら、じゃあ今いくらなの??ってなるよね。
しかもそれが統括されているわけじゃないし、全部のコードを把握するのは無理だしでメンテナンス性が悪すぎる。
コードが増えてきたときのこと考えるとぞっとするな。。。
調べた感じ
なーーーーるほどーーーーーーー。
やったこともない言語だけど、やっぱりグローバル変数って怖いのね。
参考になったサイト↓
【C言語】なぜグローバル変数は使わない方が良いのか? | だえうホームページ
- 関数間で依存が発生する
- コードが読みにくくなる
- バグの原因がわかりにくい
- バグりやすい
- 流用がしにくい
自分の考えで出したところが根本でそこからこんな不具合が発生してしまうらしい。
変数の置き場所だけでこんなに差が出るのロシアの殺し屋おそロシアですね。。。
さっきのコードを直してみよー
さっきのコードね
var ペンギン int := 1000
func currentPenginPrice() int{
ペンギン = neage()
return ペンギン
}
func neage() int {
return ペンギン + 500
}
グローバルに置くのがダメなんだからfuncの中に置きましょねー
func currentPenginPrice() int{
// funcの中に置いたので外では使えない
var ペンギン int := 1000
ペンギン = neage(ペンギン)
return ペンギン
}
func neage(送られてきたペンギン int) int{
return 送られてきたペンギン + 500
}
考えてみたら対処法は簡単でしっかりと引数にいれてあげようねってこと。
そうしたらわからぬところで変な値も入れられないしね。
基本プログラミングはがちがちの縛りがあったほうが良くなることが多いのだー。
まとめ
実務で少しでも疑問に思ったことは書き出してみるとすっきりする。
次同じ場面にでくわしても思いつくでしょう。
アウトプット大事!!!!
この記事を見てくれた人も勉強になりましたね。
「グローバル変数を撲滅しよう!!」
ダイスケお兄さんとのお約束だよー
最後まで読んでいただき
ありがとやでっ!