LoginSignup
22
25

More than 5 years have passed since last update.

C#プログラミング入門してみる、ただし忍者を実際基軸に、いいね?

Last updated at Posted at 2014-01-13

【C#】魔理沙が計算機の魔法に挑戦 プログラム編
http://www.nicovideo.jp/watch/sm22247112

を参考に、VSでC#のプログラミングに入門してみます。
上記動画はとても理解しやすいので、はじめてのプログラミング入門にもオススメです。
本記事では動画内の"バグ編、0.5パート"には触れていませんが、
非常にためになる内容です。

動画作者さんのオススメ書籍は
オライリープログラミングC#、リーダブルコード、数値計算の常識等。

第1回分 コンソール表示、組み込み型、配列、リスト。
第2回分 if,(分岐) for, while(繰返し)
第3回分 関数(メソッド)
第4回分 クラス、コンストラクタ、プロパティ、多重定義、忍者
第5回分 static,フィールド,readonly,
第6回分 ファイルIO StreamWriter,WriteLine,Dispose,StreamReader,EndOfStream,ReadLine
第7回分 2次元配列(ジャグ配列、矩形配列)、メソッドの抽出、型推論var、デリゲート

■個人的にとりあえずのVSの設定をしておきます。
ツール>オプション
-配色テーマ > 濃色

ツール>設定のインポートで以下のmonokai設定をお借りして適用
http://studiostyl.es/schemes/monokai

-ツール>オプション>フォントと色でConsolas を選択。

コメントには動画で指示されてないものが多く含まれています。

第1回分

VSをインストールし、
コンソール表示、組み込み型、配列、リスト。

 static void Main(string[] args)
        {
        //cw + Tab +Tab で Console.WriteLine(); を呼び出せる。

        //組み込み型
            int a = 2;
            Console.WriteLine(2);

            double b = 1.5;
            Console.WriteLine(b);

            double c = a + b;
            Console.WriteLine(c);

            double d = a * b;
            Console.WriteLine(d);

            string hello = "Hello,world.";
            Console.WriteLine(hello);

            string bye = hello + "Goodbye";
            Console.WriteLine(bye);

            bool e = true;
            Console.WriteLine(e);

        //配列
        //要素の数は変えられない。
            int[] takusan = new int[10];
            takusan[0] = 1;

            Console.WriteLine(takusan[0]);
            Console.WriteLine(takusan.Length);          

        //リスト
        //Addで要素を増やしたり、Removeで減らしたり出来る。
            List<double> list = new List<double>();
            list.Add(4.5);

            Console.WriteLine(list[0]);
            Console.WriteLine(list.Count);

        //Console.WriteLineでの{}の使い方
            Console.WriteLine("Helloの中身は{0}",hello);
            Console.WriteLine("{0}と{1}と{2}",a,b,3);

        }

第2回分

if, for, while.

static void Main(string[] args)
        {

        //if
            int a = 2;
            int b = 2;

            if (a < b)
            {
                Console.WriteLine("aはbより小さい");
            }
            else if (a > b)
            {
                Console.WriteLine("aはb以上");
            }
            else if(a == b)
            {
                Console.WriteLine("aとbは等しい");
            }

        //for
        //整数が増えていく時はfor文を使うと理解しやすい
            double[] hairetu = new double[10];
            hairetu[0] = 1.0;
            Console.WriteLine(hairetu[0]);

            for (int i = 0; i < 10 ; i++)
            {
                hairetu[i] = i + 1.0;
                Console.WriteLine(hairetu[i]);
            }

        //while
            double c = 1.5;
            while (c < 10.0)
            {
                c += 1.0;
                Console.WriteLine(c);
            }

        }

第3回分

関数(メソッド)

static void Main(string[] args)
        {
        //メソッドTwice
                       //↓引数
            int a = Twice(5);
            Console.WriteLine(a);

        //メソッドWriteAll
            double[] vals = new double[4];
            vals[0] = 2.0;
            vals[1] = 0.8;
            vals[2] = 100.0;
            vals[3] = -7.0;
            //メソッドWriteAll(引数vals);
            WriteAll(vals);

        }
                   // ↓戻り値の型 ↓引数の型
        public static int Twice (int a)
        {
            int b = a * 2;
        // return で戻り値を返す。
            return b;
        }

        //メソッド WriteAll 戻り値なし=void 引数の型 double[]
        public static void WriteAll(double[] vals)
        {
            for (int i = 0; i < vals.Length; i++)
            {
                Console.WriteLine(vals[i]);               
            }
        }
    }

第4回分

クラス、コンストラクタ、プロパティ、多重定義、忍者

        static void Main(string[] args)
        {
            string ninja1 = "ニンジャスレイヤー";
            string ninja2 = "ビーフイーター";

            Console.WriteLine("ドーモ、{0}=サン。{1}です。", ninja1,ninja2);
            Console.WriteLine("ドーモ、{0}=サン。{1}です。", ninja2, ninja1);
        }

上記をオブジェクト指向的に表現する。

class Program
    {
        static void Main(string[] args)
        {
        //コンストラクタはnewで新しく作られた時に実行される。
        //名前のついてないニンジャなんて変だと思いませんか?あなた。

        //コンストラクタにニンジャスレイヤーが与えられているのでNameはニンジャスレイヤー。
            Ninja ninjaSlayer = new Ninja("ニンジャスレイヤー");
            Ninja beefEater   = new Ninja("ビーフイーター");

         //.Aisatsu();にNinja型でbeefEaterを引数に与えているので、
         //Ninja型 beefEaterのNameであるbeefEaterがninja.Nameに与えられる。
         //よって{0}= beefEater {1} = 自分の名前 の順で再生される。
            ninjaSlayer.Aisatsu(beefEater);
            beefEater.Aisatsu(ninjaSlayer);
        }
    }

    class Ninja
    {
    //これはコンストラクタなので、新しく作られた時Nameに引数が渡される。
        public Ninja(string name)
        {
            Name = name;
        }
        //プロパティ { get; 値を見てもOK set; 値を書き換えてもOK}
        //{private set; で書き込みが不可能になる。}
        public string Name { get; private set;}

        public void Aisatsu()
        {
            Console.WriteLine("ドーモ、{0}です。",Name);
        }

        //同じ名前の関数で引数の定義が違うものを多重定義(あるいはオーバーロード)と呼ぶ。
        public void Aisatsu(Ninja ninja)
        {
            Console.WriteLine("ドーモ、{0}=サン。{1}です。",ninja.Name,Name);
        }
    }

第5回分

static,フィールド,readonly,

class Program
    {
        static void Main(string[] args)
        {
            Ninja.Prologue();
        }
    }

    class Ninja
    {
        //readonlyで読み込み専用(final)を表す。
        //ニンジャの名前はころころ変わるものではない。
        public readonly string Name;

        //フィールド
        double speed;
        // これは以下と同義
        // private double speed{ get; set; }

        public static void Prologue()
        {
            Console.WriteLine("ニンジャとは平安時代、カラテにより日本を支配した半神的存在である");
        }
    }

第6回分

StreamWriter,WriteLine,Dispose,StreamReader,EndOfStream,ReadLine

        static void Main(string[] args)
        {
        //文章を作成して保存する。
        //Documents > VisualStudio2013 > Projects
        //> "ProjectName" > "ProjectName" > bin > Debug 以下に保存される。

            //false部分は同じ名前があった時の処理。falseで上書きを行う。
            StreamWriter writter = new StreamWriter(
                "test.txt", false);

            for (int i = 0; i < 100 ; i++)
            {
                //StreamWriterが継承したTextWriterクラスのWriteLineメソッドを用いて書き込みを行う。
                writter.WriteLine("{0} {1}", i, i*i);
            }

            //Dispose();で書き込みを終了する。
            writter.Dispose();

            //読み込みするファイルの名前を指定する。
            StreamReader reader = new StreamReader("Test.txt");

            //readerが .EndOfStream(終わってない)限り繰り返す。
            while (!reader.EndOfStream)
            {
                //string line を生成し、readerからReadLineで一行ずつ読み込む。
                string line = reader.ReadLine();
                //コンソールにlineを書き出す。
                Console.WriteLine(line);
            }
        }

第7回分

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//IO
using System.IO;

namespace Array2D
{
    class Program
    {
        static void Main(string[] args)
        {
    //型推論
            //varを用いることで型推論を行う。
            //以下の場合はStreamWriterが入る。
            var writer = new StreamWriter("aaa.txt", false);
            writer.Dispose();

        //メソッド抽出結果
            //arrayTest();

    //2次元配列
            //[4, 3]で4行3列の矩形配列を生成出来る。
            //違いは[x][y] と [x , y]
            double[,] array = new double[4, 3];
            array[0, 0] = 5.0;
            array[1, 2] = 1.0;

            for (int i = 0; i < 4 ; i++)
            {
                for (int j = 0; j < 3 ; j++)
                {
                    Console.WriteLine("{0}行{1}列:{2}", i, j, array[i ,j]);                  
                }
            }
        }

        private static void arrayTest()
        {
            //範囲を選択、右クリック>リファクタ->メソッドの抽出、名前をつけるとメソッドを抽出できる。

            //[][]で二次元配列 配列の中に配列が入る ジャグ配列と呼ぶ。デコボコの配列を作成出来る。

            double[][] array = new double[4][];
            //以下で4行3列を表す
            array[0] = new double[3]; //1行目に3列追加
            array[1] = new double[3]; //2行目に3列追加
            array[2] = new double[3];
            array[3] = new double[3];

            //ジャグ配列に変数を代入。
            array[0][0] = 5.0;
            array[1][2] = 1.0;

            //double a に配列arrayの[1][2]を代入
            double a = array[1][2];
            Console.WriteLine(a);

            for (int i = 0; i < array.Length; i++)
            {
                for (int j = 0; j < array[i].Length; j++)
                {
                    Console.WriteLine("{0}行{1}列:{2}", i, j, array[i][j]);
                }
            }
        }
    }
}
  static void Main(string[] args)
        {
         //デリゲートを用いることでメソッドや関数をモノ扱い出来る。
                //↓引数 ↓戻り値 ↓デリゲートを作成
            Func<double, double> f;

            //Sqrtは平方根を求める
            f = Math.Sqrt;
            Input1(f);

            f = Math.Sin;
            Input1(f);

            f = Math.Exp;
            Input1(f);
        }

        public static void Input1(Func<double, double> func)
        {
            Console.WriteLine("f(1) = {0}", func(1.0));
        }

第8回待ち

22
25
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
25