C# (dotnetcore)で標準出力を利用して進行中のスピナーを作る (4)
前回の記事
課題 (updateメソッドの分解(メソッドが長い))
updateメソッドが長い、コメントなしでロジックが16行。コメント等入れて36行。 そんなに長いメソッドではないが、メソッドの内容にいろいろな物が含まれているため、 分別する。
描画のロジックを2つに分ける
メソッドを、進捗終了と、進捗進行中の2つに分けました。 また、進捗率の計算をメソッド化しました。
メソッド | 型 | 内容 |
---|---|---|
CalcProportion | int | Minimum〜Maximumに対するValueの進捗率を計算して返却 |
DoneProgressConsoleWrite | void | 進捗終了の印字 |
InProgressConsoleWrite | void | 進捗進行中の印字 |
update | void | 描画用メソッド |
/// <summary>Minimum〜Maximumに対するValueの進捗率を計算して返却</summary> /// <returns>進捗率(%)</returns> private int CalcProportion() { decimal oneMeter = new decimal(100) / (this.Maximum - this.Minimum); return Decimal.ToInt32(oneMeter * (this.Value - this.Minimum)); } /// <summary>進捗終了の印字</summary> private void DoneProgressConsoleWrite() { //色を戻す Console.ResetColor(); //カーソル位置を変更 Console.SetCursorPosition(0, Console.CursorTop); //終了の表示 Console.WriteLine("Done! "); } /// <summary>進捗進行中の印字</summary> private void InProgressConsoleWrite() { //進捗率計算 int proportion = CalcProportion(); //カーソル位置を変更 Console.SetCursorPosition(0, Console.CursorTop); //色変更 Console.ForegroundColor = ConsoleColor.Green; Console.BackgroundColor = ConsoleColor.Black; //進捗率の印字 Console.Write("{0}{1, 3:d0}%", bars[proportion % bars.Length], proportion); } /// <summary>描画</summary> private void update() { if (this.Maximum == this.Value) { DoneProgressConsoleWrite(); } else { InProgressConsoleWrite(); } }
残る課題
- Consoleへの操作部分のテストをどうするか。
ひとまず。ここまで。続きは次回。