たくのろじぃのメモ部屋

プログラミング(C#)の基礎やそれを応用した技術情報をメモしておくブログです。

【C#】WPFアプリケーション入門 #6 関数

はじめに

前回は配列 (多次元配列) についてやりました。配列を使うことで同じ型を扱う、あるいは同じようなグループに所属している要素を 1 つの変数にまとめるやり方でした。今回はガラッと変わって関数についてです。いくつかの処理をまとめておき、使いたいときに呼び出すことができます。

お品書き

今回やる内容はこちらです。

  1. 関数
  2. 関数を自作して動かす
  3. 引数を2つ以上渡す

1. 関数

数学で関数といえば y=ax がありますね。これは一次関数というもので、比例を表す式です。a の値はあらかじめ決まっており、x に値を代入するだけで y という解を得ることができます。

つまり、入力に対して解を返すのが関数であるということです。極端な例を挙げると、お金を入れて飲み物が出てくる自動販売機も関数なのです。

関数はこのように作ります。

int Function (int x)
{
    int y;
    y = x * 2;

    return y;
}

Function は関数名、その関数が扱うデータの型は int 型です。入力を受け付ける変数は (int x) と宣言することで、ここに値を代入させることができます。これを引数といいます。処理内容は代入された x を 2 倍させて y に代入します。そして、この y を解として返します。これを返り値といいます。これで関数を作ることができました。

関数を作ると何が嬉しいのでしょうか?
何度も同じような処理をさせるとき、その都度プログラムを書いていては面倒です。あらかじめ、何度も同じような処理をさせそうなときに関数としてまとめておけば、その関数を呼び出すだけで済みます。

Function( ) 関数を呼び出すとき

MessageBox.Show(Function(2).ToString);

関数を指定し、( ) の中に代入する数値や変数を入れます。この関数自体は y という答えが返ってきます。それも int 型なのでメッセージで表示するには String 型に変換する必要があります。実行例はこのようになります。

f:id:takunology:20190704222621p:plain

Function ( ) に 2 を代入すると Function の x に 2が代入され、処理の中で2倍されます。そして y に解が代入され、それが返ってくるので "4" と表示されています。
このようにして関数を作り、必要な時に呼び出すことができます。複雑な処理は関数にまとめておけば、プログラムが分かりやすくなりますね。

2. 関数を自作して動かす

実際に関数を自作して動かしてみましょう。先の例でもいいですが、新しく作ってみます。
入力された数値を 2乗、3乗するような関数を作って呼び出してみます。使用するコントロールはこちら

  • Button 1つ
  • TextBox 1つ

これを適当に配置して、TextBox には x:Name、Buttonはダブルクリックしてロジックに処理を生成してください。XAML はこんな感じです。

<Window x:Class="WpfApp1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp1"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <Button Content="ボタン" HorizontalAlignment="Left" Margin="71,118,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click"/>
        <TextBox HorizontalAlignment="Left" Height="23" Margin="51,90,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="120" x:Name="text"/>
    </Grid>
</Window>

ロジックはこのようにします。

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        //文字を整数に変換する
        int value = int.Parse(text.Text);

        MessageBox.Show(Square(value).ToString());
        MessageBox.Show(Cubic(value).ToString());
    }

    int Square(int x)
    {
        return x * x;
    }

    int Cubic(int x)
    {
        return x * x * x;
    }
}

ここで、int.Parse ( ) というものを使っています。これはint 型に変換してくれる関数です。なので、引数には整数型にしたいものを入力します。この場合はテキストボックスからの入力なので、text.Text が入ります。数値を計算するのにテキストそのままでは、ただの文字列なので意味がありません。というか、文字列の状態で処理させようとするとエラーを吐かれます。

これで実行してみるとメッセージが2種類表示されます。1回目は2乗、2回目は3乗した値になります。

3. 引数を2つ以上渡す

さて、ここまで引数が1つの関数を扱ってきました。が、場合によっては2つ以上扱うことがあります。そんな時は ( ) の中の変数をカンマで区切っていくつか宣言すればよいのです。例えば2つの値を受け取って、その和を返す関数はこんな感じです。

int Function (int a, int b)
{
    return a + b;
}

こんなこともできます

int Function (string moji, int x, int y)
{
    if (moji == "Add")
    {
        return x + y;
    }
    return x - y;
}

これは引数が3つあり、moji の部分で "Add" という文字を受け取ったら x と y の和を返します。そうでなければ、x と y の差を返します。このようにして引数をいくつも用意して、その関数に処理させることもできます。

おわりに

関数はよく使います。関数といえば、ボタンの処理部分も関数っぽく見えます。しかし、ボタンは関数ではなくメソッドと呼ばれます。何が違うのかは今後明らかになっていきます。

関数使えるとちょっとカッコいい