グローバル変数の倒し方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 の依存が残っている。

次回は

グローバル変数への書き込み部分と戦う。


この記事が気に入ったらサポートをしてみませんか?