.NETエンジニア・プログラマ向けの技術情報・業界ニュースをお届けします。

  1. FEnet.NETナビ
  2. .NETコラム
  3. プログラミング言語
  4. C#
  5. C#のローカル関数とは?使い方やメリット・ラムダ式との違いも紹介

C#のローカル関数とは?使い方やメリット・ラムダ式との違いも紹介

  • C#
  • プログラミング言語
公開日時:   更新日時:
C#のローカル関数とは?使い方やメリット・ラムダ式との違いも紹介
この記事でわかること
    基本情報技術者試験の試験対策はこちら>>

    システム
    エンジニア
    C#のローカル関数とは何ですか?

    プロジェクト
    マネージャー
    ローカル関数とは、関数の中に記述する関数のことで、C# 7.0から追加された機能です。

    C#のローカル関数とは?


    今回は、C#のローカル関数について説明します。ローカル関数とは、関数の中に記述する関数のことで、C# 7.0から追加された機能です。

    ローカル関数の使い方やメリットについて説明します。興味のある方はぜひご覧ください。

    C#のローカル関数のメリット


    C#ローカル関数のメリットとしては、以下の内容があげられます。

    ・内部的にしか使用しない変数の値を隠蔽可能
    ・変数のスコープが関数内に限定されるので、プログラマが読みやすい
    ・親関数で引数チェックされていれば、改めての引数チェックは不要(コードがシンプルになる)
    ・親関数の変数を使用できるので、ローカル関数の引数が少なくなる(コードがシンプルになる)
    ・メソッド反復子や非同期メソッドで例外を直ちに検出できる(後述します)

    C#のローカル関数の基本的な構文


    C#のローカル変数の基本的な書き方は以下になります。

    ローカル関数を呼び出すことができる要素

    C#のローカル関数は関数だけでなく以下のようなブロックを持つメンバにも記述可能です。

    ・コンストラクタ
    ・プロパティ アクセサ
    ・イベント アクセサ
    ・ラムダ式
    ・ファイナライザ
    ・その他のローカル関数

    ローカル関数と通常の関数との違い

    C#のローカル関数の書き方は、通常の関数とほとんど同じですが次のような違いがあります。

    ・staticキーワードは付与できない
    ・アクセス修飾子を付与できない
    ・属性を付与できない

    また、ローカル変数とは違い、定義前でも参照できます。

    C#のローカル関数の使い方


    ここからはC#のローカル関数の例外発生タイミングとデリゲートでC#のローカル関数を使った時の動きについて紹介します。紹介したプログラムを実際に動かしてみるとより理解が深まります。

    例外を検出する

    メソッド反復子、非同期メソッドで例外が発生するタイミングは実際に例外になる処理が実行されるときになります。しかしC#のローカル関数を使った場合、それぞれ反復子の取得時、非同期メソッド実行前に発生するようになります。

    メソッド反復子を使う

    メソッド反復子の場合、例外は、反復子を取得した時点では検出されず、シーケンスを列挙する時点で検出されます。

    実際のソースコードを見てみましょう。

    実行結果は以下のようになります。

    実行結果は以下のようになります。
    ArgumentOutOfRangeExceptionが先に発生しています。
    反復子を取得した時点で例外が検出されることが分かります。

    非同期メソッドを使う

    非同期メソッドの場合、例外はAggregateExceptionにラップされ、タスク待機中に検出されます。

    実際のソースコードを見てみましょう。

    実行結果は以下のようになります。

    このように、例外はAggregateExceptionにラップされ、タスク待機中に検出されます。
    これに対して、C#のローカル関数にすると非同期メソッドを呼び出す前に例外を検出できます。
    実行結果は以下のようになります。
    このように、C#のローカル関数にすると非同期メソッドを呼び出す前に例外を検出できます。
    また、例外はAggregateExceptionにラップされることもありません。

    デリゲートとして扱う

    C#のローカル関数は、通常メソッドと同じようにデリゲートとしても使用できます。

    実行結果は以下のようになります。

    C#のローカル関数とラムダ式の違い


    C#のローカル関数はラムダ式と似ていますが、以下のようにラムダ式とは異なる特徴があります。

    ・関数名が必要
    ・引数の型を指定できる
    ・引数に既定値を与えられる
    ・イテレータ(yield return ステートメント)が使える

    実際のコードを見てみましょう。

    ローカル関数を使用したサンプルコード

    C#のローカル関数では引数の型を宣言することができます。

    ラムダ式を使用したサンプルコード

    一方、ラムダ式は引数の型を指定できないため、使用時の型に依存した動きになります。

    システム
    エンジニア
    C#のローカル関数を用いることで、可読性が上がるなどのメリットがあるのですね。

    プロジェクト
    マネージャー
    そうですね。ローカル関数について理解を深め、関数を作成すべきかを検討してみてくださいね。

    C#のローカル関数について知ろう


    いかがでしたでしょうか。C#のローカル変数には可読性の向上のほか、ラムダ式では実現できなかったイテレータの使用など様々な使い方ができます。

    実際にコードを実行して理解を深め、使用すべきところを検討してください。

    FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
    株式会社オープンアップシステムロゴ

    株式会社オープンアップシステムはこんな会社です

    秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
    数多くのエンジニアが集まります。

    秋葉原オフィスイメージ
    • スマホアプリから業務系システムまで

      スマホアプリから業務系システムまで

      スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。

    • 充実した研修制度

      充実した研修制度

      毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。

    • 資格取得を応援

      資格取得を応援

      スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。

    • 東証プライム上場企業グループ

      東証プライム上場企業グループ

      オープンアップシステムは東証プライム上場「株式会社夢真ビーネックスグループ」のグループ企業です。

      安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。

    株式会社オープンアップシステムに興味を持った方へ

    株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。

    年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
    まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。

    株式会社オープンアップシステムへのご応募はこちら↓
    株式会社オープンアップシステムへのご応募はこちら↓

    C#新着案件New Job