見出し画像

プログラミングを始めてみようという話(第三回:関数の呼び方)


前回からの使い回しサンプル

public class Hello{
    static int count = 0;
    public static void Main(){
        count = count + 1;
        WritenNum(count);
        count = count + 1;
        WritenNum(count);
        count = count + 1;
        WritenNum(count);
    }
    
    public static void WritenNum(int num){
        System.Console.WriteLine("No." + num);
    }
}

もういちどこのサンプルを整理してみましょう。
Helloクラスの中にcount変数とMain関数、WritenNum関数があります。

Main関数からWritenNum関数が呼び出されているのでそこについて深掘りしていきます。
まずはなんの説明もなかった関数の宣言の部分から。

public static void Main(){
public static void WritenNum(int num){

2つの関数の宣言の違いがわかるでしょうか?
2つ目の関数にはカッコの中になにか書いてありますね。
「int num」この書き方に見覚えはないですか?
そう、変数の宣言と同じです。つまりこれはint型のnumという名前の変数が宣言されているんです。
しかしなぜ関数の宣言と同じところで変数の宣言をしているのでしょうか?
では関数を呼び出しているところを見てみましょう。

WritenNum(count);

関数を呼び出すときにもカッコの中になにか書かれていますね。
これも関数の宣言で使われたものと同じint型の変数「count」です。

つまりどういうこと?

関数の宣言の仕方

変数の宣言の仕方は説明したのに関数の宣言の仕方を説明していませんでした。
ここまで読んでもらっておいてなんですがあんまり意味ないですね。
とりあえず新しいサンプルを用意しましょう。

public class Hello{
    static int count = 0;
    public static void Main(){
        count = WritenNum(count);
        count = WritenNum(count);
        count = WritenNum(count);
    }
    
    public static int WritenNum(int num){
        System.Console.WriteLine("No." + num);
        num = num + 1;
        return num;
    }
}

「count = count + 1;」が三行も書かれていたのがいまいちだったので整理しました。
少しスッキリしましたね。
では関数の宣言について説明しましょう。相変わらずpublicとstaticにはまだ触れずに行きます。

関数の宣言は
戻り値 関数名(引数){}
となります。
順番に説明します。

戻り値

「public static int WritenNum(int num){」この部分ですね。
関数の処理が終わったあと、呼び出し元に返却される値の型を宣言しています。
呼び出し元も書き方が変わっていますね。

count = WritenNum(count);

「count =」とあるようにcount変数に何かを代入しようとしています。
それが「WritenNum(count)」の処理が行われたあとに戻ってくる値です。
もう一度WritenNum関数を見てみましょう。

    public static int WritenNum(int num){
        System.Console.WriteLine("No." + num);
        num = num + 1;
        return num;
    }

「return num;」の一文が追加されていますね。
「return ~」で戻り値を指定します。
このとき必ず関数の宣言で指定した型と同じものを返却してください。
(関数の宣言でint型を指定したので返却するものは必ずint型である必要があります)
戻り値がない場合は「void」と記載します。(Main関数参照)

関数名

その名の通り関数を表す名前です。
同じクラス内で他の関数と同じ名前を使うことはできず、Mainなどのシステムで使用されている名前とも被ってはいけません。
クラス名と同じ名前も特殊な関数として扱われるため意図しない場合は避けなければなりません。
何よりどんな処理をする関数なのか誰にもわかるようにわかりやすく簡潔な命名を心がけてください。

引数

関数の呼び出し元から渡される値です。
関数の宣言に必要な要素の中で唯一複数宣言できます。
引数はなくても構いません。
(Main関数のように)
戻り値などと同じように宣言した型と渡す値の型は同じでなくてはなりません。

複数引数がある場合の例

public class Hello{
    static int count = 0;
    public static void Main(){
        count = WritenNum(count, 5, "nemuru");
    }
    public static int WritenNum(int num, int limit, string name){
        System.Console.WriteLine("No." + num);
        num = num + 1;
        return num;
    }
}

渡した値を使ってないけどまあ渡せるってことで。

まとめ

  1. 関数の宣言は 戻り値 関数名(引数)

  2. 戻り値と引数の型は必ず合わせる

  3. 戻り値と引数はなくても良い(戻り地がないときはvoid)

  4. 関数名は考えてつける!!!!!!!!


この記事が気に入ったらサポートをしてみませんか?