オプション/名前付きパラメーター、ref/out/in(基礎)
オプションパラメーターと名前付き引数で可読性を高めます。refで参照渡しを行い、outで追加の値を返します。inパラメーターはC# 6では利用できない点にも注意します。
「オプション/名前付きパラメーター、ref/out/in(基礎)」はCoddyKit上の無料C# Academyレッスンです。 これはレッスン2/3です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはC# Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 C# Academyコースには全3レッスンが含まれています。
レッスンの概要
目標:可読性のためにオプションパラメーターと名前付き引数を使用し、refとoutを理解します。注:C# 6 ではinパラメーターを使用できません。
オプションパラメーター
デフォルト値を追加すると、多数のオーバーロードを用意せずに簡単なカスタマイズができます。
using System;
public static class Notifier
{
// Optional parameter: suffix has a default value
public static void Notify(string message, string suffix = "!")
{
Console.WriteLine(message + suffix);
}
}
public class Program
{
public static void Main(string[] args)
{
Notifier.Notify("Saved"); // uses "!"
Notifier.Notify("Warning", "!!"); // overrides default
}
}
名前付き引数
名前付き引数を使用すると、呼び出しが自己説明的になり、安全に順序を変更できます。
using System;
public static class Greeter
{
public static void Greet(string name, string prefix, int repeat)
{
for (int i = 0; i < repeat; i = i + 1)
{
Console.WriteLine(prefix + " " + name);
}
}
}
public class Program
{
public static void Main(string[] args)
{
// Named args improve readability and allow reordering at call site
Greeter.Greet(name: "Ada", prefix: "Hello", repeat: 2);
Greeter.Greet(repeat: 1, name: "Alan", prefix: "Hi");
}
}
ref パラメーター
refは変数を参照渡しします。呼び出し側では、あらかじめ変数を初期化しておく必要があります。
using System;
public static class RefDemo
{
public static void Increment(ref int n)
{
n = n + 1; // modifies caller's variable
}
}
public class Program
{
public static void Main(string[] args)
{
int value = 5; // must be assigned before passing by ref
RefDemo.Increment(ref value);
Console.WriteLine("value = " + value); // 6
}
}
out パラメーター
outを使用すると、メソッドはパラメーターを介して追加の値を返せます。メソッド側では、それらに値を代入する必要があります。
using System;
public static class OutDemo
{
public static bool TryDivide(int a, int b, out int result)
{
if (b == 0)
{
result = 0; // out must be assigned before return
return false;
}
result = a / b;
return true;
}
}
public class Program
{
public static void Main(string[] args)
{
int r; // not required to be assigned before passing as out
bool ok = OutDemo.TryDivide(9, 0, out r);
Console.WriteLine("ok=" + ok + " r=" + r);
}
}
「in」について(C# 6)
注:in(読み取り専用の参照渡し)パラメーターは、後のバージョンの C# で導入されました。C# 6 では次のように対応できます。
- 小さい型には値渡し(コピー)を使用する
- 変更が必要な場合にのみrefを使用する
- 慣例としてメソッドパラメーターをreadonlyにする(再代入しない)
ref と out の基礎
まとめ
まとめ:デフォルト値にはオプションパラメーター、明確さには名前付き引数、呼び出し側のデータを変更するにはref、追加の値を返すにはoutを使用します。C# 6 はinパラメーターをサポートしていません。
よくある質問
「オプション/名前付きパラメーター、ref/out/in(基礎)」レッスンは無料ですか?
はい。「オプション/名前付きパラメーター、ref/out/in(基礎)」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、C# Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 C# Academyコースには全3レッスンが含まれています。
「オプション/名前付きパラメーター、ref/out/in(基礎)」で何を学びますか?
オプションパラメーターと名前付き引数で可読性を高めます。refで参照渡しを行い、outで追加の値を返します。inパラメーターはC# 6では利用できない点にも注意します。 ブラウザで直接実行するハンズオンコードでC# Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
C# Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのC# Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/3です。
「オプション/名前付きパラメーター、ref/out/in(基礎)」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このC# Academyレッスンでコードを書いて実行できますか?
はい。すべてのC# Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- シグネチャと戻り値、式形式、オプション/名前付き、ref/out、オーバーロード
- オプション/名前付きパラメーター、ref/out/in(基礎)
- ローカル関数(C# 6の注意点)とオーバーロード