狛ログ

2013年6月15日土曜日

C#でモダンプログラミング。


オフィス狛 技術部です。

業務システムを作成していると、どうしてもレガシープログラミングを行ってしまう傾向があります。
たぶん、「現行システムの改修だから(現行プログラムがレガシーだから)」とか、
「フレームワークのバージョンを上げるのは影響が大きい」など理由はあると思います。

ですが、モダンプログラミングは可能な限り取り入れたいです。

まずは以下のプログラムをご覧ください。
public string GetAcceccToken()
{
    byte[] randomNumber = new byte[16];

    RNGCryptoServiceProvider rngCsp = new RNGCryptoServiceProvider();
    rngCsp.GetBytes(randomNumber);

    StringBuilder accessToken = new StringBuilder();

    for (int i = 0; i < randomNumber.Length; i++)
    {
      accessToken.AppendFormat("{0:x2}", randomNumber[i]);
    }

    return accessToken.ToString();
}
WebAPIなどで利用されるアクセストークン(ランダムな文字列)を作成するメソッドです。

今回は繰り返し部分を簡略化させていきます。
for (int i = 0; i < randomNumber.Length; i++)
{
    accessToken.AppendFormat("{0:x2}", randomNumber[i]);
}
昔の参考書ではお馴染みの繰り返し文です。

これをforeachで書き換えると、
foreach (byte bt in randomNumber)
{
    accessToken.AppendFormat("{0:x2}",bt);
}

次は、匿名メソッドを利用したArray ForEachで書き換えてみます。
Array.ForEach<byte>(randomNumber, delegate(byte bt)
{
    accessToken.AppendFormat("{0:x2}", bt);
});

最後は、匿名メソッドをラムダ式を使って書き直してみます。
Array.ForEach<byte>(randomNumber, bt => { accessToken.AppendFormat("{0:x2}", bt); });

メソッド内が単文の場合は、{}は省略できます。暗黙の型指定が可能な場合は、<byte>も省略できます。
Array.ForEach(randomNumber, bt => accessToken.AppendFormat("{0:x2}", bt));

最近C#初めた人にとっては、当たり前の書き方なのでしょうが、
C#に数年のブランクがある人は、ちょっと戸惑ってしまうかもしれません。

何事も慣れだとは思いますが・・・。

0 件のコメント:

コメントを投稿