プログラミング基礎講座第8回

ゼロから始めるプログラミング基礎講座

関数:一連の処理を1つにまとめて再利用可能にしたもの

講座全体の概要

プログラミング基礎講座の第8回、関数についての解説です。講座全体の概要は以下の記事ゼロから始めるプログラミング基礎講座 第1回【講座の概要・目的】をご覧ください。

関数とは

関数とは、一連の処理を1つのかたまりとしてまとめ、呼び出すことによりその一連の処理を実行できるようにしたものです。関数を利用することにより、同じコードを何度も記述したり、コピペしたりすることなく、一連の処理をまるごと再利用可能(何度でも使えるということ)となります。

汎用的に良く使われる処理は、プログラミング言語によりあらかじめ関数が用意されているため、利用者は関数内の複雑な処理内容を気にすることなく、簡単にプログラミングすることができます。また、独自の関数を作成することも可能です。

関数とメソッド

これまでの講座でも、関数という呼び方で何度か登場してきましたが、実は、C#等のオブジェクト指向言語ではメソッドと呼ばれます。厳密には関数とメソッドは異なりますが、ほぼ同じ意味と捉えていただいて構いません。エンジニア同士の会話においても、この2つを正確に区分して会話していることはほとんどないと思います。

一応、関数とメソッドの違いについて説明するため、オブジェクト指向言語について簡単に触れておきます。詳しく知りたい方は下の記事をご覧ください。

オブジェクト指向言語では、一連のデータ(変数等)と、そのデータに関する複数の処理を、1つのclass(クラス)というものにまとめます。そして、プログラム全体としては様々なクラスの組み合わせで作られます。

クラスの持つデータは、クラスの内部でデータを保持するための変数と、クラスの外部に公開するためのプロパティがあります。クラスの持つ変数のことを特にフィールドと言います。

クラスの持つ処理のことをメソッドと言い、メソッドの中だけで使用する変数をローカル変数と言います。

また、クラスのフィールドやプロパティ、メソッドのことを総称してクラスのメンバーと言います。

これまでの講座で作成したプログラムも、Visual Studio が自動でテンプレートを用意してくれるので意識しませんでしたが、クラスで構成されています。

Index.cshtml.csの例

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.Extensions.Logging;

namespace BasicCourse8_1.Pages
{
    public class IndexModel : PageModel
    {
        private readonly ILogger<IndexModel> _logger;

        public IndexModel(ILogger<IndexModel> logger)
        {
            _logger = logger;
        }

        public string CourseName { get; set; }
        private int courseNumber;

        public void OnGet()
        {
            courseNumber = 8;
            CourseName = "第" + courseNumber + "回 関数について";
        }
    }
}

この例の以下の部分がクラスで、IndexModelがクラスの名前です。


public class IndexModel : PageModel
{
        中略
}

{ }で囲まれた部分に、メンバーが記述されています。

フィールド

private readonly ILogger<IndexModel> _logger;

private int courseNumber;

プロパティ

public string CourseName { get; set; }

メソッド

public IndexModel(ILogger<IndexModel> logger)
{
    _logger = logger;
}

public void OnGet()
{
    courseNumber = 8;
    CourseName = "第" + courseNumber + "回 関数について";
}

クラスに属した処理のことをメソッドと言うのに対して、関数はクラスに属さない独立した処理のことを指します。また、関数はクラスに属さないので、メソッドとの大きな違いとして、データを保持することができません。

メソッドの使用方法

これまでの講座でも、所々でC#であらかじめ用意されているメソッドを使用しています。以下は第5回講座の後半で使用した、Listの例です。

メソッドの使用例

public int Sum = 0;

public void OnGet()
{
    List<int> addends = Enumerable.Range(1, 10).ToList();

    Sum = addends.Sum();
}

List<int>がクラスの名前で、実際の値は変数addendsに格納されています。

クラスの持つデータを使用して処理を行う場合は、実際の値が格納された変数やプロパティを介してメソッドを呼び出します。

クラスのデータを使用したメソッドの使用方法

変数.メソッド名()

上記の使用例だと以下の部分でList<int>クラスのSumというメソッドを使用しています。

使用例①

Sum = addends.Sum();

対して、クラスのデータを必要としないメソッドは、変数を介さずにクラス名を直接指定して使用します。

クラスのデータを使用しないメソッドの使用方法

クラス名.メソッド名()

上記の使用例だと以下の部分でEnumerableクラスのRangeというメソッドを使用しています。

使用例②

List<int> addends = Enumerable.Range(1, 10).ToList();

引数(パラメーター)

上記の使用例②ではメソッド名の後ろが、(1, 10)の様になっており、( )の中に値が記述されています。

このRangeメソッドは指定した個数の連続した整数を生成する処理で、生成する値の開始値を1、個数を10という意味で(1, 10)の様に指定しています。

この様に、メソッドを呼び出す際に指定する値のことを引数(パラメーター)といいます。読み方は「ひきすう」です。引数を指定することを、引数を渡すとも言います。

引数に指定できるものはメソッドによって決められていて、決められた通りの個数、順番でなければなりません。また、引数1つごとに型も決められています。引数の指定方法は以下の様になります。

引数の指定方法

メソッド名()                     // 引数なしの場合も () は必要。
メソッド名(引数)                 // 引数が1つの場合。
メソッド名(引数1, 引数2, …)    // 引数が複数の場合はカンマ区切りで指定する。

また、同じメソッド名でも引数の数や型の違いによって区別がされます。Visual Studio の入力補完機能で表示されたメソッド名にフォーカスを合わせると、+ n オーバーロード(nは数字)という表示がされる場合は、引数違いのメソッドが全部でn + 1個あることを表しています。

メソッド名に続いて(を入力すると、メソッドの説明が表示されます。説明は英語ですが、単語の意味を調べればだいたい理解できると思います。引数が何を意味するのかはそこで確認しましょう。また、メソッド名で処理の内容がある程度想像できると思いますが、実際の動作はデバッグ実行で確認しましょう。どうしてもわからない場合は、Webで検索してみましょう。「C#」とクラス名、型名等と合わせて、詳細をしりたいメソッド名や、やりたいこと等をキーワードにして検索してみましょう。

戻り値

メソッドを実行した結果で返される値を戻り値と言います。読み方は「もどりち」です。

戻り値を受け取って変数に代入する場合は、以下の様にメソッド呼び出しの左側に受け取り用の変数と代入演算子の = を記述します。

メソッドの戻り値を変数に代入する例

Sum = addends.Sum();

また、以下の様に戻り値のクラスのメソッドを続けて呼び出すこともできます。

戻り値から更にメソッドを呼び出す例

List<int> addends = Enumerable.Range(1, 10).ToList();

この例では、最初に以下の部分が実行されます。


Enumerable.Range(1, 10)

続く以下の部分で、上記の戻り値のクラスが持つToListというメソッドを呼び出しています。


.ToList()

結果として、最後のメソッドの戻り値を変数addendsに代入しています。これは以下のコードと同じ意味となります。


var range = Enumerable.Range(1, 10);
List<int> addends = range.ToList();

どちらの書き方でも問題ありませんので、わかりやすい方を選択してください。

前半終了

メソッド(関数)の使い方は以上となります。前半はここまでにして、休憩にします。

後半は独自のメソッドを作成する方法や、その使いどころを解説します。

プログラミング基礎講座第7回「+」や「-」は演算子の一種。その他にも良く使うものを紹介。前のページ

自前のメソッドを作成する方法とその使いどころ次のページプログラミング基礎講座第8回

コメント
  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

CAPTCHA


ピックアップ

  1. 4Kディスプレイで作業効率UP #3
  2. 4kdisplay for video

最近の記事

  1. recommended pc
  2. おすすめ動画配信サービス3選
  3. 4kdisplay for video
  4. オブジェクト指向の基本概念
  5. basic-knowledge-of-web-app
PAGE TOP