自分磨きのITノート

プログラミング(C#、VB.NET)言語やデータベースの役立つ情報を初心者から中級者向けに発信します。

C#でプログラミング入門 ー 変数のスコープ

前回は、関数まで説明しました。

今回は、「変数のスコープ」です。スコープとは、変数の有効な範囲のことです。プログラムからはそのスコープ内にある変数しか使用できません。スコープ外にプログラムが移るとその変数は破棄されたりします。

プログラムでいう範囲の大きさを書きますと、
グローバル変数 > クラス内変数 > 関数内変数 > 条件または繰り返し文内変数・・・
と、なります。

※ クラスの変数は、「アクセス修飾子」で範囲が変わるのでクラスの説明を参照ください。


さっそく例を見てみましょう。

C#

using System;
    class ScopeTest
    {
        public static int glo = 1;/*グローバル変数*/
        private static int mem = 2;/*メンバー変数*/
        static void Main()
        {
            int fnc = 3; /* 関数内だけの変数 */
            for (int i=0; i <= 2; i++)
            {
                int loop = 4; /* 繰り返し内だけの変数 */
                if (loop == 4)
                {
                   int jyo = Hoge(); /* 条件内だけの変数 */
                    Console.WriteLine("jyo={0}",jyo);
                }
                Console.WriteLine("loop={0}", loop);
            }
            Console.WriteLine("fnc={0}", fnc);
            Console.WriteLine("mem={0}", mem);
            Console.WriteLine("glo={0}", glo);
            Console.ReadLine(); // プログラムをここでストップさせるためのもの
        }
        static int Hoge()
        {
            int fnc = 5;
            return fnc;
        }

    }

出力結果

jyo=5
loop=4
jyo=5
loop=4
jyo=5
loop=4
fnc=3
mem=2
glo=1

それほど難しいものではないと思いますが、スコープ範囲外で変数を使おうとすると、コンパイルエラーとなり実行できないと思います。

条件内や繰り返し文内の変数はその中でしか使用することができません。繰り返し文内の変数は2度目プログラムがくると初期化されてしまいます。

同じスコープ内で同じ名前の変数を持つことができません。スコープが別だとプログラム上同じ変数名をつけられます。

簡単ですが以上です。
次回は、構造体を説明します。

C#でプログラミング入門 ー 関数

前回は、配列をやりました。

今回は、関数(メソッド)です。プログラミングの関数は、主のプログラム部分とは別の場所に決まった処理を定義しておき、いつでも利用できるようにしておくものです。算数のように変数に値を渡して、方程式のように使用することもできます。記事の随所にも出てきた数値を文字列にするToString()も関数です(クラスに属する関数)。

構文は以下のようになります。

関数(メソッド)の書き方

戻り値の型 関数名(引数部){
 関数内の処理;
 return 戻り値;
}

早速、関数を使ったサンプルソースです。

C#

public class kansu{
    // 決まった文字列を出力するメソッド
    public static void outputLine(){
        System.Console.WriteLine("=-=-=-=-=");
    }
    // 三角形の面積を計算するメソッド
    public static double calc_menseki_sankaku(int teihen, int takasa){
        double ret = (teihen*takasa)/2 ;
        return ret;
    }
    public static void Main(){
        // 文字列を出力するメソッドの呼び出し
        outputLine();
        // calc_menseki_sankakuを呼び出している
        double kekka = calc_menseki_sankaku(5,10);
        System.Console.WriteLine(kekka.ToString());
        // もう一度 文字列を出力するメソッドの呼び出し
        outputLine();
    }
}

結果

=-=-=-=-=
25
=-=-=-=-=
1つ目のoutputLine()関数は、値を戻さない関数です。main関数と同じく値を戻さない処理だけの関数は頭にvoidを記述します。(publicstaticは、"クラス"の記事などで説明したいと思います)

関数名は、英数字とアンダーバーが使用できます。値を引き渡す(引数部)は、省略したり複数引き渡すことができます。outputLineの処理内容は、単純ですが出力結果に文字列を出力するというものです。main側から呼び出したい時は、outputLine();と記述することで、関数へプログラム処理をジャンプさせることができます。関数呼び出しは、引数がなくても括弧”( )”を忘れずにつけましょう。関数側のプログラム処理が終われば、mainへと戻ってきます。

続いて2つ目のcalc_menseki_sankaku(int ,int)関数は、三角形の面積を計算し、doubleを戻り値としています。第一引数にteihenと第二引数にtakasaの値を引数に渡して、関数内で計算しています。関数の最後で、returnを記述し、関数の戻り値型と同じ型を返しています。


複雑なプログラムをmain関数にずらずらと書いていくと、ソースコードがとても長くなり、重複する処理が多くなります。関数を用いることにより、簡素化やメンテナンス性をよくしていきます。

引数の値渡し、参照渡し

続きを読む

C#でプログラミング入門 ― 配列

前回は、繰り返し構文をやりました。今回は配列です。

配列は、一つの変数に複数の値を入れることができます。
例えば、5つの同じ型を使うとします。5つ変数を用意するのではなく、一つの変数を配列にします。そうすると変数を5つ用意したことになります。

では、ソースコードを見てみましょう。

C#

public class Hairetu{
    public static void Main(){
        int[] suji = new int[3];
        int gokei=0;
        suji[0] = 10;
        suji[1] = 20;
        suji[2] = 30;
        for (int i=0; i<suji.Length; i++){
            gokei += suji[i];
        }
        System.Console.WriteLine((gokei/suji.Length).ToString());
    }
}

結果

20

変数を配列にする場合、型の後に"[ ]"を書き、そのあとにnew int [箱の数]で配列を宣言しています。newという新しいキーワードが出てきましたが、値型の変数とは違いこう書くんだ!と覚えてください。

※ ここでは詳しく説明しませんが、配列は値型ではなく参照型なります。IEnumerableインターフェースが継承されたり、関数(メソッド)が違ったりします。 

サンプルプログラムでは、数値の箱を3つ(int[3])用意しました。
値を入れる場合は、"[ ]"の中に番号(添字)を書いて対象の箱にいれています。ちなみにこの添字は、0から始まります。3つ用意しましたので、使う添字は0~2です。

※ CやC#・VB.NET・javaの世界では、添字は、0から始まります(先頭)。しかし、ExcelのVBA・VB6は1から始まるのでご注意を!

続いてFor文です。suji変数に.Lengthと書くと、配列の数を取得できます。「配列の数だけ繰り返す」というFor条件になります。
繰り返し中では、下記の処理を記述しています。
 gokei += suji[i];
は、
 gokei = gokei + suji[i];
になり、元のgokei変数と配列の値を足して、gokei変数に代入し直しています。"+="は、値を加算したい時などによく使います。減算したい時は、”-=”です。

最後に平均を出力して終わっています。結果の数値を括弧でくくって.ToString()で文字列にしています。計算を括弧でくくっている理由は、計算結果が数値型になるためです。


配列はforeach文が使える

続きを読む
スポンサードリンク
自己紹介
【管理人】
なみやん
【コメント】
プログラムを組むことが大好きな30代男性。IT系の仕事を10年ちょいやっています。このブログを通して知識を人に伝えることによって、自分をさらに磨こうと精進しています。応援よろしくお願いします。
免責事項
当サイトで紹介しているサンプルソースコードは自由に使用いただいても結構が、自己責任でお使いください。また、記事の内容が主観的であったり、努力していますが正しくなかったりする場合がございます。読者本人の判断にお任せいたします。