C#の可変長引数(params)を使う方法!引数の数が決まらないときに便利
生徒
「C#で、渡す値の数が毎回違うときってどうすればいいんですか?」
先生
「その場合は、paramsというキーワードを使うことで、引数の数が決まっていなくても対応できます。」
生徒
「引数の数が決まっていないって、どういうことですか?」
先生
「例えば、計算する数が2個のときもあれば、5個のときもあるような場合ですね。そういうときにparamsがとても便利なんです。」
生徒
「なるほど!ぜひ具体的な使い方を教えてください!」
先生
「それでは、C#のparamsの基本的な使い方を学んでいきましょう!」
1. 可変長引数とは?
可変長引数(かへんちょうひきすう)とは、引数の数が決まっていないメソッドのことです。通常、C#のメソッドは引数の数が決まっていますが、毎回違う数の引数を渡したいときに困ります。そこで登場するのが、paramsというキーワードです。
paramsを使うと、配列のように引数をまとめて渡すことができ、引数の数が1個でも10個でもOKになります。
2. paramsの基本的な書き方
paramsは、メソッドの引数の最後に1つだけ指定する必要があります。次のような書き方で使います。
void ShowNumbers(params int[] numbers)
{
foreach (int n in numbers)
{
Console.WriteLine(n);
}
}
このShowNumbersメソッドは、引数として何個でも整数を渡せるようになっています。
3. 実際に使ってみよう
それでは、実際にparamsを使ってみましょう。以下の例では、好きなだけ数字を渡して、合計を出すメソッドを作ります。
using System;
class Program
{
static void Main()
{
SumNumbers(10, 20);
SumNumbers(5, 15, 25, 35);
SumNumbers(); // 引数なしもOK!
}
static void SumNumbers(params int[] numbers)
{
int sum = 0;
foreach (int num in numbers)
{
sum += num;
}
Console.WriteLine($"合計: {sum}");
}
}
実行結果は以下のようになります。
合計: 30
合計: 80
合計: 0
このように、paramsを使うことで、柔軟に引数の数を扱えるようになります。
4. 配列として渡すこともできる
paramsは配列として扱われるため、すでにある配列を渡すこともできます。
int[] data = { 100, 200, 300 };
SumNumbers(data);
このように、あらかじめ用意した配列をそのままparams引数に渡すことも可能です。
5. 他の引数と組み合わせる
paramsは最後の引数として使う必要がありますが、それ以外の引数と組み合わせて使うこともできます。
void ShowInfo(string title, params string[] messages)
{
Console.WriteLine("タイトル: " + title);
foreach (string msg in messages)
{
Console.WriteLine("メッセージ: " + msg);
}
}
ShowInfo("お知らせ", "明日は休校です", "天気に注意してください");
このように、最初に1つの文字列(タイトル)を渡し、残りは複数のメッセージとして受け取ることができます。
6. paramsを使うときの注意点
- paramsは1つしか使えない:複数のparams引数は書けません。
- paramsは最後に書く:他の引数の後に書く必要があります。
- 配列を省略して書ける:呼び出し側は、配列でなくてもカンマ区切りで値を渡せます。
これらのポイントを押さえれば、paramsを安全かつ便利に使うことができます。
7. paramsの使い道はたくさんある!
実際の開発現場では、次のような用途でparamsが使われることがあります。
- ログメッセージの出力(可変数の情報を出力)
- 複数の数値の合計や平均を計算する
- テキストや設定のまとめ処理
引数の数がわからないときには、まずparamsを使えないか考えると良いでしょう。
まとめ
C#の可変長引数であるparamsは、ひとつのメソッドに渡す引数の数が決まっていないときにとても役立つしくみです。可変長引数という言葉は初心者にとって聞き慣れないかもしれませんが、実際の場面を思い浮かべてみると、その便利さを実感できるはずです。例えば、複数の点数をまとめて計算したいとき、二つだけ用意される場合もあれば、五つ、十個と増えていく場合もあります。同じメソッドを呼び出すたびに、毎回違う数の値を渡したいとき、paramsを使うことでひとつの形にまとめることができ、プログラム全体の書き方を整えることにもつながります。
「引数の数が変わる」と聞くと少し難しそうですが、実際のコードの書き方は簡単で、ただ配列のような形にして渡すだけで自由に扱えるようになります。この柔軟さは、固定された引数しか渡せないメソッドとは大きく違う点で、プログラムの使い道を広げてくれる大切な役割を持っています。paramsを使うと、呼び出す側は必要な値をカンマで区切って並べるだけで良いため、メソッドを使う側の負担も少なくなります。また、配列をそのまま渡すこともできるため、元からあるデータをまとめて使いたいときにも相性が良いのです。
C#は型がしっかり決まっている言語ですが、paramsを使うことで「必要な数だけ値を渡す」という自由度を持たせながら、同時に安全に処理を行うことができるのも特徴です。メソッドの呼び出し側は、引数を一つだけ渡しても問題ありませんし、ゼロ個でもかまいません。その場合、空の配列が渡されたのと同じ扱いになるため、特別な記号や設定を追加する必要はありません。この仕組みは、初心者にとって理解しやすく、応用もしやすい大切な考え方です。
次の簡単なサンプルコードでも、paramsを使うメリットがわかりやすく表れています。
static void ShowTotal(params int[] numbers)
{
int total = 0;
foreach (int n in numbers)
{
total += n;
}
Console.WriteLine("合計は " + total + " です");
}
ShowTotal(1, 2, 3, 4, 5);
ShowTotal(10, 20);
ShowTotal();
このコードでは、数字の数が三つでも二つでも、ゼロでも問題なく動作します。値を渡す側は、特別な書き方をする必要がなく、自分の必要な数だけ数字を書くだけで呼び出すことができます。中身では配列として扱われているため、foreach文で順番に取り出して計算することができ、余計な処理を増やさずに済みます。こうした動作を見ると、paramsが持つ柔軟さと実用性がよりはっきりわかるでしょう。
現実の場面でも、paramsが活躍する機会はたくさんあります。特にログの出力や、メニュー、入力された数値の集計、メッセージのまとめなど、扱う項目が変動する処理では欠かせない存在です。同じ種類のデータを一つにまとめながら、必要な分だけ渡してあげられるため、コードが長くなることを防ぎ、読みやすさにもつながります。複数の値を渡したいからといって、毎回配列やリストを作成する必要がなく、短いコードで意図を表せることは、プログラミングに慣れていくうえでも重要なことです。
しかし、便利なparamsにもルールがあります。まず、メソッドの引数に書けるparamsはひとつだけという決まりがあります。そして、paramsは引数リストの最後に置かなくてはいけません。この決まりを守らないとエラーになり、プログラムは動きません。複数のparamsを並べてしまったり、先頭に置いたりすると、どこまでが可変なのか判断できなくなってしまうためです。こうしたルールを知っておくと、paramsを正しく使うことができ、思わぬエラーに悩まされずに済みます。
また、paramsで渡された値は必ず配列として扱われるため、foreach文や配列の操作と相性がとても良くなっています。配列の長さを調べたり、順番に処理したり、条件で選び分けたりと、可能性は一気に広がります。値がひとつの場合も、複数の場合も、まったく渡されない場合も、同じような書き方で扱うことができるため、使う側と作る側のどちらにとっても負担が少なく、自然な形で処理を進めることができます。
さらに、paramsは配列をそのまま渡すことができるという点も覚えておきたい部分です。最初から決まった数のデータを使う場面でも、あらかじめ配列を作っておけば、その配列を渡すだけでメソッドが利用できるため、コードの再利用や整理にも役立ちます。配列と可変長引数の両方を使い分けられると、より柔軟で読みやすいC#のコードが書けるようになります。
可変長引数は、小さな学習のようでいて、実は非常に大きな意味を持つ考え方です。複数の値を受け取りたい場面は、プログラミングでは必ずと言っていいほど出てきます。固定の数ではなく、必要なだけ値を渡すという考え方は、日常でも同じような状況があります。例えば、買い物かごに商品を入れるたび、同じ種類の商品を一つだけ買う日もあれば、多く買う日もあります。そんなときに、入れたり取り出したり自由にできるかごはとても便利です。paramsは、プログラムの中でその役割を担っていると言えます。
コードを書くうえで大切なのは、短く書くことだけではありません。読みやすく、意図が伝わりやすく、ミスが少なくなるように工夫することです。paramsは、そうした工夫を助けてくれるとても強い味方になります。扱う値の数が変わる可能性があるなら、まずparamsを思い出すと、より良い書き方が見つかるかもしれません。
今回学んだ知識を整理すると、paramsは以下のような特徴を持っています。引数が一つでも複数でもゼロでも使うことができる。呼び出す側は配列を書いて渡す必要がなく、必要なだけ値を並べるだけでよい。配列として扱われるため、foreach文などの処理と相性が良い。メソッドの最後にひとつだけ書く必要がある。この四つを押さえておくだけで、paramsの基本はすでに理解できています。
最後に、もうひとつサンプルを見てみましょう。
static void ShowMessages(string title, params string[] messages)
{
Console.WriteLine("【" + title + "】");
foreach (string msg in messages)
{
Console.WriteLine("- " + msg);
}
}
ShowMessages("お知らせ", "更新作業を行います", "作業中はログインができません", "ご協力をお願いします");
タイトルだけ渡して、メッセージをひとつも追加しなくても動作しますし、数を増やすこともできます。必要な数のメッセージだけ渡すことができるため、案内文やログの出力にも応用しやすくなります。こうした例を見ると、paramsが実用的であることが自然と理解できるはずです。
C#を学ぶ人にとって、paramsは初心者の頃に「仕組みがわかると一気に便利になる」知識のひとつです。まだ扱いに慣れていない人でも、実際にコードを書き、引数の数を変えながら試してみると、すぐに違いがつかめます。メッセージの個数が違う、数字の数が変わる、配列を渡したいなど、いろいろな場面を想像しながら挑戦してみると、理解が深まるでしょう。
生徒
「可変長引数は聞いたことがあっても、どんな場面で使うのかよく分かっていませんでした。でも実際に例を見ると、とても便利なんだなと思いました。」
先生
「そうだね。値の個数が変わる状況は意外と多いから、paramsを覚えておくと役に立つよ。」
生徒
「配列として扱われているから、foreachで取り出す仕組みも覚えやすかったです。ゼロ個でも動くというのは意外でした。」
先生
「その柔軟さが大きな特徴なんだ。ログの出力にも、数字の集計にも、メッセージにも使えるから、応用範囲が広いよ。」
生徒
「paramsはひとつだけしか書けないことと、最後に書かないといけないことも覚えました!間違えるとエラーになる理由も分かりました。」
先生
「理解が深まっているね。あとは、実際に手を動かして試してみることで、自分の中に定着していくはずだよ。」