C#の匿名関数でプチクラス。シンプルなプログラムの為に・・・
中型のソフトを作っている中で効率を格段に向上させる方法を見つけました。
関数を作っていると、別の関数にしいが関数の追加は・・・というケースが非常に多々あります。
例えば、1行だけど後で読むと意味不明なので、(コメントは付けるが)わかりやすい関数名で書いておきたい。
しかし、今の関数専用の関数を作ると関数が多すぎて微妙・・・
そんなこんなで、関数自体を小さなクラスとして、小さな関数群を従えて・・・と思うくらいです。
解決法を編み出しました(笑)
結果的には以下のようにします。
public bool Open_DataFile(FileInfo file_pointer, string file_path)
{
// この関数でしか使用しないような小さな関数を、匿名関数として以下のようにFuncで書きます。
Func<string, bool>is_has_error = (in_filePath) =>
// ファイルにエラーがあるかどうかを調べます。
{
if(File.exist(in_filePath) == false) // ファイルが存在するかどうか
return true;
// 他のエラーチェックをして、エラーならtrueを返す。
//** エラーがないとき
return false;
}; // ※匿名関数は最後に ; (セミコロン)が必要です。
Func<FileInfo, string, bool> DATA_file_open_proc = (in_file_Pointer, in_filePath) =>
{
// エラーが無いという前提での、ファイルオープン処理
return true; // ※匿名関数は返値が必須なので、必要なくてもダミーで返します。
};
//***** DataFile はじまり *****
// 1.エラーチェック
if(is_has_error(file_path))
return false;
// 2.ファイルオープン
DATA_file_open_proc(file_pointer, file_path);
return true;
}
このように「頭に浮かぶ、やりたいこと」中心に記述することができます。
さらに、ほとんどが上から下へ順方向に考えるだけで済むので、時間が経ってから読み直すのも大変楽になります。とくに複数行の処理などでforやforeachの処理が入り込む処理のとき、チェックと実処理で2度手間のケースもありますが、手間はPCがすることになるだけなので、保守のしやすさから、今ではこの方法を基本としています。
try ~ catch文も便利ですが、根本的な読みやすさ、バグの少なさで匿名関数に勝るものは今のところ見当たりません。
関数を作っていると、別の関数にしいが関数の追加は・・・というケースが非常に多々あります。
例えば、1行だけど後で読むと意味不明なので、(コメントは付けるが)わかりやすい関数名で書いておきたい。
しかし、今の関数専用の関数を作ると関数が多すぎて微妙・・・
そんなこんなで、関数自体を小さなクラスとして、小さな関数群を従えて・・・と思うくらいです。
解決法を編み出しました(笑)
結果的には以下のようにします。
public bool Open_DataFile(FileInfo file_pointer, string file_path)
{
// この関数でしか使用しないような小さな関数を、匿名関数として以下のようにFuncで書きます。
Func<string, bool>is_has_error = (in_filePath) =>
// ファイルにエラーがあるかどうかを調べます。
{
if(File.exist(in_filePath) == false) // ファイルが存在するかどうか
return true;
// 他のエラーチェックをして、エラーならtrueを返す。
//** エラーがないとき
return false;
}; // ※匿名関数は最後に ; (セミコロン)が必要です。
Func<FileInfo, string, bool> DATA_file_open_proc = (in_file_Pointer, in_filePath) =>
{
// エラーが無いという前提での、ファイルオープン処理
return true; // ※匿名関数は返値が必須なので、必要なくてもダミーで返します。
};
//***** DataFile はじまり *****
// 1.エラーチェック
if(is_has_error(file_path))
return false;
// 2.ファイルオープン
DATA_file_open_proc(file_pointer, file_path);
return true;
}
このように「頭に浮かぶ、やりたいこと」中心に記述することができます。
さらに、ほとんどが上から下へ順方向に考えるだけで済むので、時間が経ってから読み直すのも大変楽になります。とくに複数行の処理などでforやforeachの処理が入り込む処理のとき、チェックと実処理で2度手間のケースもありますが、手間はPCがすることになるだけなので、保守のしやすさから、今ではこの方法を基本としています。
try ~ catch文も便利ですが、根本的な読みやすさ、バグの少なさで匿名関数に勝るものは今のところ見当たりません。