はじめに
さくらのAI Engineを使ってC#のモジュールをソースコードレビューしてみました
生成AIエンジン
今回使用した生成ATエンジンはllm-jp-3.1-8x13b-instruct4です。
用意したソースコード
実装したソースコードは以下の通りです。
using System;
class Program
{
static void Main()
{
// 1行分の入力を読み込む(例:"3 5" のような形式を想定)
var line = Console.ReadLine();
// 空白文字で分割して配列にする
var array1 = line.Split(' ');
// 最初の要素を n(ループ回数)、次の要素を m(桁数指定)にそれぞれ変換
int n = Int32.Parse(array1[0]);
int m = Int32.Parse(array1[1]);
// n 回のループ処理
for (int i = 0; i < n; i++)
{
// 出力用文字列を初期化
string ans = "";
// 1行分の入力を整数 d に変換
int d = Int32.Parse(Console.ReadLine());
// d を文字列に変換し、全体を m 文字分の幅に合わせて左寄せ(左側にスペースを追加)
ans = d.ToString().PadLeft(m);
// 整形した文字列を出力
Console.WriteLine(ans);
}
}
}
ソースコードレビューを実施した結果
ソースコードレビューを実施した結果です。
エラーハンドリングの追加:
Console.ReadLine() や Int32.Parse の呼び出しで例外が発生する可能性があります。これらの例外を適切に処理するコードを追加することで、プログラムの堅牢性が向上します。
入力の検証:
入力が期待通りの形式であるかを確認するための入力検証を追加すると良いでしょう。例えば、入力が正しい数値であるか、桁数が適切かなどをチェックします。
コードの可読性向上:
変数名やメソッド名をもう少し説明的にすることで、コードの可読性が向上します。
デバッグ用のコメントアウト:
デバッグ用の不要な出力は削除するか、必要に応じて適切にコメントアウトしましょう。
改善案のソースコード
改善案のソースコードは以下の通りです
using System;
class Program
{
static void Main()
{
try
{
// 1行分の入力を読み込む(例:"3 5" のような形式を想定)
var line = Console.ReadLine();
// 空白文字で分割して配列にする
string[] array1 = line.Split(' ');
// 入力が2つの要素を持っているか確認
if (array1.Length != 2)
{
Console.WriteLine("入力が正しくありません。'n' と 'm' を入力してください。");
return;
}
// 最初の要素を n(ループ回数)、次の要素を m(桁数指定)にそれぞれ変換
int n;
int m;
if (!int.TryParse(array1[0], out n) || !int.TryParse(array1[1], out m))
{
Console.WriteLine("入力が正しくありません。'n' と 'm' は数値である必要があります。");
return;
}
// n 回のループ処理
for (int i = 0; i < n; i++)
{
// 出力用文字列を初期化
string ans = "";
// 1行分の入力を整数 d に変換
int d;
if (!int.TryParse(Console.ReadLine(), out d))
{
Console.WriteLine("入力が正しくありません。'd' は数値である必要があります。");
return;
}
// d を文字列に変換し、全体を m 文字分の幅に合わせて左寄せ(左側にスペースを追加)
ans = d.ToString().PadLeft(m, ' ');
// 整形した文字列を出力
Console.WriteLine(ans);
}
}
catch (Exception ex)
{
Console.WriteLine($"エラーが発生しました: {ex.Message}");
}
}
}
最後に
C#は精度の高いソースレビューをしてくれました。