グローバル変数の倒し方1
いきなり倒すことはできない。少しずつ変形させていく。
今回はグローバル変数を読み取るだけのメソッドの変形について。
元々がこうだとする。
Option Explicit On
Option Strict On
Option Infer On
Module Program
Dim ApplePrice As Integer = 0
Sub PrintApplePrice()
Console.WriteLine("{0}円", ApplePrice)
End Sub
Sub UpdateApplePrice()
Console.Write("{0}円から、", ApplePrice)
ApplePrice = 80
Console.WriteLine("{0}円に更新", ApplePrice)
End Sub
Sub Main()
ApplePrice = 100
PrintApplePrice()
UpdateApplePrice()
PrintApplePrice()
End Sub
End Module
`ApplePrice` の上で Shift + F12 を押してすべての参照を調べる。読み取りだけしているメソッドを見つける。この例では `PrintApplePrice` が読み取りだけをしている。
読み取りだけしているメソッドのリファクタリングは簡単。「値」で渡すように変形。
Option Explicit On
Option Strict On
Option Infer On
Module Program
Dim ApplePrice As Integer = 0
Sub PrintApplePrice(applePrice As Integer)
Console.WriteLine("{0}円", applePrice)
End Sub
Sub UpdateApplePrice()
Console.Write("{0}円から、", ApplePrice)
ApplePrice = 80
Console.WriteLine("{0}円に更新", ApplePrice)
End Sub
Sub Main()
ApplePrice = 100
PrintApplePrice(ApplePrice)
UpdateApplePrice()
PrintApplePrice(ApplePrice)
End Sub
End Module
冗長で元より悪くなっているように見えるかもしれないが、このような小さな変形を繰り返す必要がある。戦いは長い。
実際には PrintApplePrice がグローバル変数の ApplePrice との依存がなくなっているので素晴らしい進歩。
この段階では Main と UpdateApplePrice の依存が残っている。
次回は
グローバル変数への書き込み部分と戦う。