はじめに
C#で個人開発を進める中で、
データ処理といえば for / foreach 文 ばかり書いていた時期がありました。
もちろんそれでも動くのですが、
処理が少し複雑になってくると、
- if が増える
- 処理の流れを追いにくくなる
- 後から見返したときに分かりづらい
と感じることが増えてきました。
そんなときに使い始めたのが LINQ です。
今回は、よくある処理を例に
for文で書いた場合と、LINQで書いた場合を比べてみた内容をまとめます。
LINQとは?(ざっくり)
LINQ(Language Integrated Query)は、
List などのコレクションを、宣言的に操作できる仕組みです。
といっても、
最初から全部覚える必要はありません。
個人開発で触っていて、
よく使うのは次のような処理です。
- 条件で絞る
- 必要な形に変換する
- 合計や件数を出す
まずはこのあたりだけ分かっていれば十分だと感じています。
for文で書いた場合
例として、
「チェックがONになっているデータだけ、金額を合計したい」
という処理を考えてみます。
int total = 0;
foreach (var item in items)
{
if (item.IsChecked)
{
total += item.Amount;
}
}処理の内容自体はシンプルで、
特に問題のない書き方です。
ただ、条件が増えてきたり、
似たような処理が増えてくると、
コード全体が少しずつ読みにくくなっていきます。
LINQで書き直してみる
同じ処理を LINQ で書くと、次のようになります。
int total = items
.Where(item => item.IsChecked)
.Sum(item => item.Amount);やっていることは同じですが、
- 条件で絞る
- 合計する
という流れが、
コードの並びそのままで分かるようになります。
書き比べてみて感じた違い
読みやすさ
LINQは
「何をしたいのか」がコードにそのまま表れるため、
後から見返したときに理解しやすいと感じました。
修正のしやすさ
例えば条件を追加したい場合も、
.Where(item => item.IsChecked && item.Amount > 0)のように、
1か所直すだけで済みます。
for文の場合は if が増えていくため、
修正箇所が分散しがちです。
ミスが入りにくい
foreach と変数の組み合わせでは、
- 初期化忘れ
- 加算処理の書き忘れ
といったミスが起きることもあります。
LINQでは
処理の型がある程度決まっているため、
こうしたヒューマンエラーが減る印象があります。
初心者のうちはここだけ使えばいい
LINQは機能が多いですが、
最初から全部覚える必要はないと思っています。
個人開発でよく使っているのは、次の3つです。
- Where:条件で絞る
- Select:必要な形に変換する
- Sum / Count:集計する
まずは
「for文で書いていた処理を、1つだけLINQに置き換えてみる」
それくらいで十分だと感じています。
まとめ
LINQは
「for文を使わない方がいい」という話ではなく、
読みやすく、修正しやすくするための選択肢の1つだと思っています。
個人開発の中でも、
1か所LINQに置き換えるだけで
コードの見え方がかなり変わると感じました。
今後も、
書き比べながら少しずつ使いどころを増やしていく予定です。
次回予告
次は、
個人開発の中で使用頻度が高かったLINQだけをピックアップして、
もう少し具体的にまとめてみようと思います。
