見出し画像

数値の下四桁を取得するには?

数値の下四桁を取得するメソッドを実装するとしたら?

元ネタが Visual Basic .NET (VB.NET) なので、そのまま VB で書きますが、C# その他の言語でも同じです。

前提条件として、0以上の数値を受け取ります。仮に負の値にも対応する時は一貫した動作をするべきとします。

四桁以下の数値を返します。

Option Explicit On
Option Strict On
Option Infer On

Module Program

    Public Function GetLastFourDigitsBadImplementation(value As Integer) As Integer
        Dim s = Str(value)
        Return CInt(Right(s, 4))
    End Function

    Public Function GetLastFourDigits(value As Integer) As Integer
        Return value Mod 10000
    End Function

    Sub Main()
        Dim values = {0, 1, 12, 123, 1234, 12345, 123456, -123, -1234}
        For Each value In values
            Console.WriteLine(GetLastFourDigitsBadImplementation(value))
            Console.WriteLine(GetLastFourDigits(value))
        Next
    End Sub
End Module

実行結果

0
0
1
1
12
12
123
123
1234
1234
2345
2345
3456
3456
-123
-123
1234
-1234

すぐに文字列をこねこねしだす人がいます。整数型の世界で済む話であればそうすべきです。

  • 数値を文字列に変換、さらに文字列から数値に変換することで余計な処理が発生します

  • 文字列操作は遅いです

  • (仮に負の値に対応する場合)今回の仕様である一貫性のある値を返しません。`-123` と `-1234` を渡したときの結果を見てください

原則

  • 極力、型変換はしない。同じ型の性質の中でできることをする。

  • 極力、文字列操作はしない。ファイル・ネット関係の入出力やUI関係は文字列操作が必要な世界だが、それらとの境界をはっきりさせる。

  • 非効率なコードを長い行数で書かない

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