似たコード(ループ)の整理
ざっくり以下のようなコードを組みたててから遠目に見ると、ほとんど同じだ、と気づく:
if (packed)
{
var value = read(stream);
while (count-- != 0)
{
yield return value;
}
}
else
{
while (count-- != 0)
{
yield return read(stream);
}
}
前半は先に読んだ値を count 回繰りかえして返す。後半は count 回、呼ばれるたびに値を読んで返す。
count 回の繰りかえしは共通しているので、値を返す部分を事前にまとめることで共通化できる。こんな感じ:
Func<int> repeat(int value) => () => value;
var value = packed ? repeat(read(stream)) : () => read(stream);
while (count-- != 0)
{
yield return value();
}
この記事が気に入ったらサポートをしてみませんか?