*F700isさんによるC#チュートリアル [#a337d410] #contents *はじめに [#idd81ac4] -wiki書くの初めてだからいろいろと許してください>< -僕はF700isさんではないです>< *プログラミングとは何か [#wce3cd26] プログラミングとはコンピュータに対して命令をする事です。プログラミングを学ぶことによってコンピュータでできるものは全部作ることが出来ます。 *プログラミング言語とは何か [#pd0b363c] コンピュータは0か1の2進数の言葉しか理解することは出来ません。これを機械語といいます。人間がこれを理解するのは限りなく難しいです。そこで人間と機械の橋渡しをしてくれるものがプログラミング言語です。丁度人間の話す言葉と機械語の中間のような存在です。 *C#の特徴 [#i065a934] C#は先進的な文法を取り入れた比較的新しい言語です。すばやくアプリケーションを作れる事が特徴です。またCやJavaの文法に近く親しみやすく、すぐになれることができるでしょう。 *IDEの導入 [#iee08282] プログラミングはメモ帳だけでもすることはできますが、いろいろと不便です。プログラミングするにあたって便利な道具を詰め合わせたものが開発されています。それがIDE(統合開発環境)です。C#にはVisual StudioというIDEがあります。Express Editionは無料ですので是非導入しましょう。[[プログラミング言語/C Sharp]]のページに解説があります。以下VSを前提として解説します。 *GUIアプリ編 [#b6cf50eb] **プロジェクトをつくる [#z3c64e4b] 何か作るときはプロジェクトを作らなければいけません。作ったものはプロジェクトへ保存されます。 「ファイル」→「新しいプロジェクト」→「Windowsアプリケーション」 プロジェクト名は好きな名前を入れてください。でおk そうするとForm1と書かれたウィンドウが出ると思います。 F5または緑の矢印ボタンまたは「デバッグ」→「デバッグで開始」でプログラムを実行できます。たったこれだけで何もしないプログラムの出来上がりです。 簡単だね☆ **C#ツールボックスを使おう [#p4a99afe] 右側にツールボックスがなかったら「表示」→「ツールボックス」で表示しよう さてツールボックスからボタンをドラッグ&ドロップで好きな位置に置こう 実行すると好きなだけ押せるボタンが作れるぞ!~ できたらいろんな部品をぽとぺたしよう! **プロパティをいじくろう [#ke65c07d] 設置した部品を選択しよう 右下にプロパティが表示されてるかな? ボタンを選択したらTextのところを探して好きな文字に変更してみよう。 BackColorやFontも変えてみよう! **イベントを作ろう [#f74dfa99] さていきなり作ったボタンをダブルクリックしてみよう。 いきなりテキストエディタに飛ばされるはずだ。 意味はそのままでボタン(button)が押された時(Click)ここに書かれたコードが実行されるんだ。 そこに private void button1_Click(object sender, EventArgs e) { MessageBox.Show("働け"); } と書いて実行しよう そうしてボタンを押すと… **ラベルを追加しよう [#f54a8884] ラベルは好きな文字を表示できる部品(コントロール)です 表示する文字はTextプロパティで変更できます さて実行する前は変更できるようになったね? 次はボタンを押したらラベルの内容を変更されるようにしよう。 さっき MessageBox.Showを書いたとこの一行下に書こう。 label1.Text = "うほっ"; これはlabel1(ラベルの名前)のTextプロパティに"うほっ"を入れるという意味です。 文字は""で囲んであげる必要があります。 =は等しいという意味ではありません 右のものを左へいれるという意味で、代入といいます~ *コンソール編 [#y4c9ca8b] **エントリポイント [#k14b84a6] ここからはプログラムの基本を学びます。そのためコンソールアプリというものを作ります。今までのようにボタンとか出てきません。真っ暗な画面に文字が表示されるだけの質素なものです。つまらないかもしれませんが大切な課程です。 「新しいプロジェクト」から「コンソールアプリケーション」を作りましょう。 今度はフォームが現れずにコードが表示されましたね? using System; using System.Collections.Generic; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { } } } いきなり沢山書かれて戸惑うかも知れませんが一度に全て理解する必要はありません。 まずstatic void Main~の部分はエントリポイントと言ってプログラムが実行されたとき一番最初に実行される部分です。 次からコードはこの{}の中に書いていきます。 **文字を表示する [#d2c96225] 画面に表示する命令はSystem.Console.WriteLine();という命令です。 ちょっと長いですね^^ でも省略する方法があります。 それがコードスニペットです ctrl + k , xで候補がでます。 cwと打って決定するとあら不思議。(System.は無くてもかまいません) さてスニペットを使って入れたWriteLine()の()の中に表示したいものを入れましょう。 例えば"HelloWorld!"と入れてみましょう~ static void Main(string[] args) { System.Console.WriteLine("ぬるぽ"); } さて先ほどと同様に実行しても実行結果が見えない早さで閉じてしまうので「デバッグなし」で実行を選びましょう。またはCtrl+F5でおkです。 確認したら次へ進みましょう ~ **計算をする [#gab7aee2] 目の前の箱は電子計算機なんですから計算をさせてみましょう。 先ほどの()の中身を書き換えます。 計算はそのまま(3+5)や(4*5)と書けば結果が表示されます ""は文字じゃないので今回は使いません~ 加減算よりも剰余算が優先されます 普通の式と一緒です。 ()も使う事ができます。 WriteLine((3+5)*2)のように書けます 掛け算は省略できません。 ちょっと注意なのは割り算です 記号は/です~ でも(10/3)とかやっても変な結果が出ると思いますが まあ後でやりましょう。 Console.WriteLine(2+3); Console.WriteLine(3-5); Console.WriteLine(3*2); Console.WriteLine(10/3); //変な結果が表示される **変数 [#i750bb84] さて電卓にもメモリー機能があるようにコンピュータも情報を保存することができます。 ちなみにファイルに保存とは違います。ちょっとだけ保存です。 情報を保存するには場所を確保しなければなりません 。の場所のことを''変数''といい 確保することを''変数の宣言''といいます。 宣言するためには型を指定する必要があります。型とはどんな情報であるかという種類を表しています。 例えば文字を格納する変数の型は string です。 整数を格納する変数の型は int です 整数の英語integerの略です。 変数を確保するときはその場所に名前をつけます 名前はかぶってはいけません。 数字で始めることはできません。できるだけアルファベットを使いましょう。 日本語も使えますがやめたほうがいいです。 変数の宣言は以下のようにします。 型名 変数名; 例えば整数を格納する変数seisuの宣言は~ int seisu; となります。 **変数への代入 [#ud6b6ec3] 変数に値を入れることを''代入''と言います。文法は 変数名 = 値; です =は等しいと言う意味ではありません。 右から左へ値を代入することを意味しています。 先ほどのseisuに10を代入しましょう。 seisu = 10; ちなみに先ほどのintと宣言しましたので''整数以外を入れる事ができません''。 seisu = 12.3; はエラーになります **変数の表示 [#p3eefba4] 変数の中身を表示する事もできます。 Console.WriteLine(seisu); と書けば変数の中身が表示されます また Console.WriteLine(seisu*seisu); とやることで変数を利用して計算することもできます Console.WriteLine(seisu + 5); とかももちろんできます static void Main(string[] args) { int seisu = 10; Console.WriteLine(seisu); Console.WriteLine(seisu*seisu); Console.WriteLine(seisu + 5); } 上記のように変数は初期化と同時に代入できます。 **時計の表示 [#e6fd3cfe] 日付と時間はDateTime構造体を使えば取得できます。構造体が何かはひとまず置いておきましょう。 ちなみにC#の説明書みたいなのはMSDN Libraryにあります msdn DateTime などで検索すると説明が探せます。(最初は読めないと思いますが慣れてくれば大丈夫です) さて日付と時間を格納する変数の型はDateTimeです。 現在の時間を取得するのは以下のようにします。 DateTime jikan = DateTime.nowTime; DateTime.nowTimeには現在の時間が入っています。表示は WriteLine(jikan); で表示できます これで時間と日付が表示できるはずです^^ static void Main(string[] args) { DateTime jikan = DateTime.Now; Console.WriteLine(jikan); } **関数(メソッド) [#x6ec72d7] プログラミングにおいて欠かせないもの、それが関数です。メソッドとも呼ばれます。関数はちょうど数学の関数と同じようなものです。たとえば f(x) = x^2 という中学校でよくやったような関数があります。xに1を入れれば1、2なら4が答えになります。プログラミングにおける関数でxの事を''引数''(ひきすう)と言い、返ってくる答えを''戻り値''(返り値)といいます。 関数は''関数名()''で表されます。 ''()がついてないものは変数''ですので区別できますね。 引数は()の中に書きます どんな引数を取るかは関数によって変わります。VSなら引数の情報が自動的に表示されて便利です。 実際の使い方ですがWriteLine()という関数は文字列を引数にとります。(実際はだいたいなんでもおkなんですけど)なので使い方は Console.WriteLine("働け"); となります また累乗を求める関数Math.pow()は引数に数字(double)を2つとります。double型は実数を格納できる型です(少数も格納できる) 書き方は Math.Pow(2,3); のように,で区切ります。もちろん答えが返ってきます。結果を利用するにはdouble型の変数を利用して double kotae = Math.Pow(2,3); とします これで2の3乗ができました **関数を作る [#we9de9ef] さて今まではstatic void Mainというところに書いていました。 よく見たら()がついてますね? 実はこれも関数なんです。 Mainという関数は特別で1番最初に実行される関数です。 なので今まではMain関数を作ってきたことになります。 このように自分で好きなように関数を作る事ができます。書式は アクセス修飾子 戻り値の型 関数名(引数のリスト){} です 今度はわけわからん感じですがとりあえずアクセス修飾子はひとまず置いておきましょう(ststicがこれにあたります。) さて、はじめてなので与えられた数字を倍にする関数を作りましょう。数学で表すとf(x)=2xですね。 場所はMain{}の外の下にしましょう。 今回はintを受け取ってintを返しましょう。なので static int bai(int a){} が関数の宣言部になります。C#は慣例的に最初の一文字目は大文字で始め動詞をつけます 動作が解りやすいように名付けましょう。 aは好きな名前をつけることができます。最初のintが戻り値の型で、()の中のintが引数の型です。関数は{で始まり}で終わります。処理は{}の中に書くようにします。(staticは気にしないで下さい。とりあえずつけておきましょう) 次に2倍する処理を書きます int kotae = a * 2; 与えられた数字はaに入っているので2をかけて倍にします 次に答えを返します 返すには''return''キーワードを使います。答えはkotaeに入っているので return kotae; と書きます returnしたら関数は処理を終了します。 では作った関数をMainから使ってみましょう Mainの中に int x = bai(10); Console.WriteLine(x); とすると10と表示されるはずです。 今回のソース class Program { static void Main(string[] args) { int x = bai(10); Console.WriteLine(x); } static int bai(int a) { int kotae = 2 * a; return kotae; } } どのようにプログラムが流れていくかしっかり理解しましょう。 **省略記法 [#g8a3bd12] さてint型変数iがあるとしよう。 これに何が入っているかわからないが1を足したい。 どういうコードを書けばいいだろうか?。 頭を働かして考えて欲しい。 答え i = i + 1; i = i + 1;はなんとなく気持ち悪いかも知れない。数学的に矛盾しているからだ。でも慣れて欲しい。 さてC#はCの血が流れていて省略の美学というものがある。いくつかよく使うものを紹介しよう。 i += 1; これは上式とまったく同じ意味。この方が見やすいかな? そして''1''を足す場合にだけはさらに特別に省略できる。 i++; これも同じ意味である 1を足す場合は良くあり使われるので覚えておこう。 ちなみに足し算だけでなく i -= 1; i *= 1; i /= 1; なども同様にできる。 ちなみにi--もある。 **Powを作ろう [#l5d20745] 累乗を計算する関数Powを自分で作ってみよう。 まず引数を決めよう。今回は簡単のためint型変数を2つとろう。 2.1の0.86乗とかなるとめんどくさいので 2の3乗のようにします。 返り値は整数の掛け算だから答も整数になるのでint型でいいだろう。 これを元に関数の宣言を自分で書いてみよう 答え static int Pow(int x,int y) { } **繰り返し構文 [#o2a70e67] さて累乗をするPow関数を作成しよう。引数x,yを使いxのy乗を計算する。 例えば2の3乗なら2*2*2で、単純に繰り返せばいい事がわかる。 つまり引数を使ってx*x*x…をy回やればいい事になる。 ではこのように繰り返しを表現するにはどうすればいいのだろう? C#には''for構文''が用意されている。これを使おう。 さて書式は for(初期化式;繰り返し条件;繰り返し式){} であるけどこれではよくわからないので単純に10回繰り返すサンプルを書いてみる。 for(int i=0;i<10;i++){} まずint i=0はforが始まる前に一回だけ実行される。iは慣用的に使われる名前で何回繰り返したか数えておく変数である。 i<10はiが10未満という条件が満たされている間繰り返しなさいという意味である。 i++は一回繰り返す度に実行される 1回繰り返すとiに1足していくので数えられる。 これがfor文の基本系だ しっかり理解しよう ちなみに0から始めるには理由があるのでそんなもんかとおもっておこう。0から始めるので条件は10''未満''である。気をつけよう。 さて今回はy回繰り返したい。基本系をちょっと変えてy回繰り返せるように考えよう。 答 for(int i=0; i<y; i++){} **Pow関数の実装 [#f58727be] さてy回繰り返す方法を学んだ。これを使ってPowを計算しよう。 今回は負数は考えない。繰り返すたびに掛け算をすることがポイントだ。 答え class Program { static void Main(string[] args) { int x = Pow(2, 16); Console.WriteLine(x); } static int Pow(int x, int y) { int result = 1; for (int i = 0; i < y; i++) { result *= x; } return result; } } **魔法使いかどうか判定する [#i549d509] 童貞は30を迎えると魔法使いになれるといいます。 年齢を尋ねて、魔法使いかどうか判定しましょう。 ***年齢を取得する [#h3ac86dd] まず、年齢を入力してください。と表示します。 Console.WriteLine("年齢を入力してください。"); 次に年齢を入力してもらうのですが、どうすればいいのでしょうか?ここは想像力を働かせましょう。WrteLineがあるのですからReadLineもありそうですね。早速MSDNで検索しましょう。 [[ReadLineメソッド>http://msdn2.microsoft.com/ja-jp/library/system.console.readline(VS.80).aspx]]が見つかりました。 標準入力ストリームから次の 1 行分の文字を読み取ります。 と書いてあるのでこれでよさそうです。標準入力ストリームは通常画面を指します。 構文のC#の部分を見ると public static string ReadLine () と書かれています。publicは習ってませんが無視してください。これを見るとstringを返す関数であることが分かります。引数は何もありませんね。なので string age_str = Console.ReadLine(); でage_strに入力された文字を取得することができます。 ***数字へ変換する [#se0e6fe7] これで年齢は取得できましたがstring型であることから分かるように文字列です。つまり直接''数字として扱うことは出来ない''のです。 そこで文字列の中の数字をint型へ変換してくれる関数があります。 それがConvert.ToInt32()メソッドです。32とかついてるけど気にしないで下さい。 早速MSDNで調べてみましょう。[[Convert.ToInt32 メソッド (String)>http://msdn2.microsoft.com/ja-jp/library/sf1aw27b(VS.80).aspx]] 指定した String 形式の数値を、それと等価な 32 ビット符号付き整数に変換します。 なのでこれでよさそうです。いろいろと注意事項なども書いていますがまあいいでしょう。使い方は引数に変換もとのage_strを入れましょう。 int age = Convert.ToInt32(age_str); これで年齢が取得できました。 ***30以上かどうか判定する [#mb8e17c3] 年齢が取得できましたので今度は30以上かどうか判定します。 このように条件によって処理を変える必要があるとき使うのが''if構文''です。もし~だったら~するを表現します。 if(条件式) { //条件が真の時 } else { //条件が偽の時 } elseは違えば~するです。 ***完成 [#tf6100c3] class Program { static void Main(string[] args) { Console.WriteLine("年齢を入力してください。"); string age_str = Console.ReadLine(); int age = Convert.ToInt32(age_str); if (age > 30) { Console.WriteLine("あなたは魔法使いです"); } else { Console.WriteLine("あなたは魔法使いではありません"); } } }