#7 関数
今回のテーマは関数です.皆さんご存知のアレです.y = f(x)
です.数学で言う関数は「x
を定めると,y
が一意的に出てくる」というもので,言い換えると「x
という入力があって,y
という出力がある」とも言えます.プログラムで言う関数は入力がない関数も出力がない関数もあります.なので,プログラムの関数は一連の処理をひとまとめにしたものという感じです.何はともあれ実際に関数を見てみましょう.
戻り値の型 関数名(引数の型 引数名)
{
処理
}
これが関数の基本形です.戻り値は出力,引数(ひきすう)は入力です.
y = f(x) = 3x + 2
数学の二元一次関数です.これをC#で表すと,
long f(int x)
{
return 3 * x + 2;
}
この関数はint型のデータを受け取って,long型のデータを返します.return
で値を返します.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace FunctionSample
{
class Program
{
static long f(int x)
{
return 3 * x + 2; // 3. xに5を代入して演算した結果を返す.
}
static void Main(string[] args)
{
long y; // 1. yの定義.
y = f(5); // 2. f関数に5を渡す. 4. yに返ってきた17を代入.
Console.WriteLine(y); // 5. yを画面に出力.
}
}
}
Main関数で使うためにはstatic
が必要なので付けといてください.
y = f(5)
を見ると数学の関数と何ら変わりないように見えますね.f関数にはint型ならどんなリテラルも変数も渡せます.
数学で言うような関数もある一方で,Main関数やConsole.WriteLine関数のように戻り値を持たないものもあります.
void PlusOneAndDisplay(int num)
{
Console.WriteLine(++num);
}
受け取った値をインクリメントして出力する関数です.PlusOneAndDisplay(7);
と書くと画面に8
が出力されます.
引数を複数取る関数もあります.
int Add(int num1, int num2)
{
return num1 + num2;
}
使う場合もカンマ区切りでAdd(3, 6)
のように書くと9
を返してくれます.
ここで,便利な関数を紹介します.
string Console.ReadLine()
: キーボード入力を受け付ける関数.
int int.Parse(string)
: string型のデータをint型のデータに変換する関数.
この2つを使うと,
string str = Console.ReadLine();
int num = int.Parse(str);
Console.WriteLine(num + 4);
のようにしてキーボード入力されたものをint型にして4足したものが出力されるような処理が書けます.慣れてくるともっと簡単に
Console.WriteLine(int.Parse(Console.ReadLine()) + 4);
と書くこともできます.まだ他にもMicrosoftが標準で用意してくれている関数があるので,気になる人は調べてみてください.
次回は構造体について説明します.
##練習問題
引数が2つのint型,戻り値もint型で,2つの数値の中で大きい値を返すGetLarger関数を作ってください.
解答例
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ArraySample
{
class Program
{
static int GetLarger(int num1, int num2)
{
return num1 < num2 ? num2 : num1;
}
static void Main(string[] args)
{
Console.WriteLine(GetLarger(5, 7));
}
}
}