0Pricing
C# Academy · レッスン

オプション/名前付きパラメーター、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 の基礎

確認:C# 6 における 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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. シグネチャと戻り値、式形式、オプション/名前付き、ref/out、オーバーロード
  2. オプション/名前付きパラメーター、ref/out/in(基礎)
  3. ローカル関数(C# 6の注意点)とオーバーロード
← C# Academyに戻る