Minaminの日記

趣味を記事にしてる。

初見のC#入門

こんにちは。みなみんです。
筆者の備忘録も含めて参考になるような記事を書きました。

 

今回は、C#について基本的な事を記事にしました。

目次

 

本記事について

どういう人向けか?
  • プログラミングについてほとんど「分っかんねぇ」っていう方
  • 他のプログラミング言語は知ってるけど、C#は初めてっていう方
難易度

個人的にはそんなに難しくはないかなぁ。むしろ、C++の方が難しいと思う。

筆者自身について

・職業
大阪府内の大学に通っている大学1回生です。
情報系の学部なんですけど、私のような文系出身の方も多いです。

・趣味
プログラミング、ゲーム制作、楽曲制作、ゲーム

・この分野に興味をもった経緯
コンピューターを使うのが好きで、コンピューターを使って何かを作るのも好き。
それで、こういった類の分野に入ったんですね。

・プログラミング歴
企業とかの実践的な活動は除き、趣味・アマチュアとしてのプログラミング歴は小6から遊びで始めて現在まで、5〜6年ですかね...ガチで学び始めたのは中3からです。少なくとも3年以上はプログラミングに手出してるって事ですよね。

 

・プログラミング学習歴
大学に入る前まで、プログラミングの学習はほとんど独学ですかね。片っ端からググって情報得ていた感じ。高校は文系の学校で情報系の教科とかあるはずもなく。。
プログラミングスクールに通ったりとかは全然してなかったです。(塾に行くのが嫌なガキでした。)
公文、ピアノなど様々な習い事の塾に通っていた時期はあったけど、すぐやめてしまいました。

この記事を書こうと思ったきっかけ

筆者の備忘録として

覚えた事をすぐ忘れてしまうので、備忘録をつけておきたい。

これからプログラミングについて知識を得たい方々の為

私がプログラミングについてググって調べるけど、わかりやすい記事がなかなか見当たらない時があるんですね。(わかりやすい項目の記事もあります)
わかりやすい記事を見つけるまで、結構大変な思いをするんです。
そんな思いをしないように、どこよりもわかりやすい記事を目指して書こうと思いました。
また、
私の大学で行われるプログラミング授業って教授にもよるけど説明がややこしくて、友人で前期の授業について行くだけで精一杯でちんぷんかんだわっていう人がいるんですね。
とりあえず講義資料配って、課題やっといてねーみたいな教授もいるので、なかなか大変です。
(大学の授業・講義では基本、自分で調べるっていうスタイルが多い)

そういう方々のためになるような記事を書こうとも思いました。

準備

使用する開発環境

Visual Studio Community 2019, C# (Visual C#), テンプレートのConsoleApp

基本的な関数

Console.WriteLine("文字列");

ConsoleApplicationプロジェクトを作成した初期の状態はこれ。

Console.WriteLine("Hello World!");

実行すると”文字列”(Hello World!)の部分がコンソール上に表示される。
また、変数を入れるとその変数の中身を表示する。
変数の中身を確認したい時に使える関数。デバッグでもよく使う。
この記事でも頻繁に使う関数なので覚えておこう。

f:id:Minamin1234:20210802201146p:plain

プロジェクト作成後に実行した所

C#入門

変数の宣言

変数を使うには最初に宣言をしなければならない。
実際でも、何かを入れるために箱を用意しておくのと一緒。

変数の宣言は以下のように記述する。(Gist)

 変数の宣言の記述は以下である。

アクセスレベル 型 変数名; 

アクセスレベル 型 変数名 = 初期値;

「アクセスレベル」とは、後の記事でも紹介する予定だが、簡単に言うとクラス外からでもその変数にアクセスができるかどうかってことだ。
実際に、誰にでもパブリックな情報とプライベートな情報はあると思うのです。触れられたくない話、触れても良い話とか、、っていう感じ。
それと一緒です。

変数にも触れてほしい変数と触れられたくない変数っていうものがあるのですね。

 

「変数名」には変数に好きな名前を名付ける事ができる。

また、変数の宣言と共に初期値の代入もできるんですね。

 

コメント

これは、C#に限った話ではなく、ソースコード系全般の話です。

ソースコードにコメントをする事ができます。

C#でコメントするには以下のように書きます。(Gist)

これで、このソースコードはどういうものなのかを説明する事ができるのですね。
もちろん、コメントの部分は実行されません。

変数の代入

変数の代入は以下のように記述する。(Gist)

 

 代入とは、数学で聞いたことがありますよね。まさにそれです。
数学で一次関数のy = 5x+1とかも変数yに代入しているんですね。(現時点では、値は決まってない。)
それと全く一緒なんです。
さらに、そのxに代入したら、yの具体的な値が決まるって感じ。

例外もあるのですが、ソースコード
=が含まれていたら基本的に「代入」という処理ってことですね。

もちろん、代入というのは「数値」だけではなく、オブジェクトを代入することも可能なんですね。

具体的には、以下のように記した通りである。(Gist)

 

 ここでは、Sample型のPersonという変数に新しくSample型を代入し、初期化したところである。
(Sample型とかの意味は現時点では気にしない)

 

演算/算術演算子

演算と聞くと「四則演算」を連想するだろう。
それで間違いないですね。

加減乗除って事です。

念の為、表にまとめてみました。

算術演算子 演算の種類 内容(C#での演算の例)
+ 加法、足し算 y = x + z; , a = 1 + 1;
- 減法、引き算 y = x - z; , a = 1 - 1;
* 乗法、掛け算 y = x * y; , a = 1 * 1;
/ 除法、割り算 y = x / y; , a = 1 / 1;

 

剰余演算子

あと一つ大事な演算子を忘れていました。
それは、剰余演算子%です。

簡単に言うと「余り」を求めるんです。例えば

100 % 80

って書くと、100を80で割った余りを求める事ができるんですね。
くれぐれも、割った値ではないので注意です。
答えは「20」です。
もちろん、割り切れる時は答えは「0」です。

ちなみに、

80 % 100

って書くと、どうなると思いますか?
答えはそのまま「80」です。

左辺の数が右辺の数より少ない場合はそのまま左辺の値が答えとなります。

x < yのとき、

x % y = x

演算の裏技

演算でxに1だけ足す時、どう書きますか?

x = x + 1;

って書きますよね。(ここまでの知識で行くと)
間違いではないんです。でも、いちいち面倒じゃないですか。省略できないんっすか。。?

>>できるんです。

1加えるだけなら、

x++;

って書けるんです。逆に1減らしたい時は、

x--; 

と書く。x = x - 1;と同じ事。

1以外にある数だけ足したい時、例えばxに3足したい時

x += 3; 

と書けるんですね。x = x + 3;と同じ

減らす時も同様に。3引きたい時

x -= 3; 

と書ける。x = x - 3;と同様

変数の型

変数には型というものがある。
現実でも例えば、USBに形状があってそれぞれが異なるUSBの型は挿せない。
(Type-A,Type-C,MicroUSBなど、、)
同じ型のUSBでないと差さらない。それと一緒。
基本的に変数には同じ型の変数にしか代入ができないんですね。

 

内容 値の例
int 整数型 1 2 3...
float 浮動小数点型 1.5f 5.0f 3.14f...
string 文字列型 "HelloWorld!", "おはよう"...  
bool ブール型(真偽型) true,false
enum 列挙型 Position.Left, Position.Bottom
Sample サンプル型(クラス型) Sample(), Sample.Name...

列挙型とクラス型は使用するにはあらかじめ定義しておく必要があります。

・列挙型の定義と列挙型変数のサンプル(Gist)

 

 ・クラス型の定義とクラス型変数のサンプル。(Gist)

 

上記で紹介したように変数を使うのです。
(列挙型やクラスの定義の方法は後の記事で紹介します。)

関数

関数とは、一連の処理をまとめるものです。また、処理に必要な値を受け取る事もできる。

「準備」の見出しで紹介した、

Console.WriteLine();

このコードもれっきとした関数である。

 

ここで、他の関数を紹介する。(Gist)

これは、数学関数の一種でルートxを求める関数である。
ここでは、√10の値を求めている。

Math.Sqrt(x) = √x

このように、関数には括弧の中に値を入れる関数もあって、
その括弧の中に入れる値を「引数」という。

もう一つ、数学関数を紹介する。

これは、xのy乗を求める数学関数。
要するに、10の2乗を求めているということだね。

Math.Pow(x,y) = x^y

この関数には2つの引数が指定されている。

もちろん、最初に紹介した、

Console.WriteLine("文字列")

これも、引数が指定されているんですね。

 

条件式・比較演算子

if文やfor文、while文などで必要になってくるのが条件式である。
条件式について、めちゃくちゃ初歩的な話から始める。

条件式というのは、数学の不等式を想像して頂けるとわかりやすい。

x < 10  //xは10未満である

これの式のxに何らかの値を代入してみてほしい。筆者が適当に20を入れたとしよう。

20 < 10

あれ、20は10未満(10より小さい)っておかしいだろ。ってなりますよね。

これが条件式。
条件式の真偽値はこう表す

おかしいだろ→false(偽)

合ってる→true(真)

また、それぞれの条件式の真偽値を表すと、

10 < 100 → true

10 < 10 → false

10 <= 10 → true

条件式に出てくる「>」や「<=」という記号はプログラムにおいては「比較演算子」という。
比較演算子は左右の値を比較する記号ってことなんですね。

 

・比較演算子の表

比較演算子 意味
== 右辺は左辺と等しい x == 10
< 左辺は右辺より小さい x < 10
> 左辺は右辺よりも大きい x > 10
<= 左辺は右辺以下である x <= 10
>= 左辺は右辺以上である x >= 10

比較演算子による条件を満たすとtrue、満たさないとfalseを返す。

 

論理演算子

先ほどの条件式は数値の比較による演算がメインだった。論理の世界には「true」か「false」の2通りしかない。

この分野というのは、高校か大学で情報数学というもので習うだろう。
それを知らない方の為にも超絶丁寧に解説する。

論理演算子には基本的に「and」、「or」、「not」の三つである。

・and

日常でよく、

「イケメンで背が高い」、「大金持ちで、しかもやさしい人だ」

とか言いますよね。
これらは、「and」にあたります。(論理積ともいう)
「〜でかつー」「〜でそしてー」
与えられた全ての条件を全て満たす事で成り立つって事ですね。

どちらの条件も満たせば論理値は「true」。
どちらか一つでも条件を満たさなければ論理値は「false」
「ブサイクで背が高い」というのは女子達が求める彼氏の条件には合わないですからね。
(なかなかハードルが高い彼氏ですね。)
論理的に言い表すなら、

イケメン and 背が高い、大金持ち and やさしい

になります。
英語でandは「〜と」、「そして」っていう意味でしたよね。
そのままですね。

 

・or
とあるホスト界の帝王が

「俺か俺以外か」

という名言がありますよね。まさにこれです。(論理和
「〜かー」

彼女A「可愛い か 大金持ち」、彼女B「趣味が会う人 か 優しい人」

与えられた条件のどれかを満たす事で成り立つって事ですね。
どちらかの条件を満たした彼女なら付き合いたくなりますよね。
「可愛いけど貧乏」でも、めっちゃ可愛いから付き合ってもいいかな。っていう感じ。
「ブスだけど大金持ち」大金持ちなら付き合ってもいいかな。
(お金目当てですかね)
これが「or」です。
もちろん、どちらの条件を満たしてても論理値は「true」
実際でも、どちらも満たしてたらその彼女は最高(=true)ですよね。
逆に、どれも満たしていない人は「ごめんなさい(=false)」って感じになりますよね。

論理的に表すのなら

可愛い or 貧乏、 趣味が合う or 優しい

という感じです。

 

・not

この論理演算子は先ほどのような使い方ではなく、論理値に対して付け加えるものです。否定の意味を持つ
日本語では「〜ない」、「〜ではない」、「〜じゃない」

肯定語に否定するとき、

「イケメン じゃない」→「イケメンじゃない」、「お金持ち ではない」→「お金持ちではない」

否定語に否定するとき、(二重否定)

「イケメンじゃ無い ことはない」→「イケメン」、「可愛く無い ことはない」→「可愛い」

要するに、その論理値を反転させるっていう事なんですね。

※例題の話はあくまでも例題の為です。偏見や差別する意図はございません

 

だいぶ話が逸れた気もするが、論理演算子の表をまとめてみました。

論理演算子 C#での論理演算子 条件
and && 与えられた全ての条件を満たすとtrue
or || 与えられたどれかの条件を満たすとtrue
not ! 論理値を反転させる

 

実際にプログラムで書いてみましょう。(Gist)

 

条件分岐/if文,if-else文

朝、学校に行く時に雨が降ってもいないのに傘を持って行きませんよね。
逆に、雨が降っているのに傘を持っていかないというのもおかしいよと。

この場合、傘を持って行くか持っていかないかを判断する材料は天候ですよね。

もし、天気が

晴れだった時

雨だった時

傘は

持って行かない (晴れだった時)

持って行く (雨だった時)

 こんな感じで、条件・状況によって行動が変わる。
プログラムでも全く一緒。

プログラムではこう表します。(Gist)

書き方は以下のように書きます。

if(条件式){
 処理;(条件式がtrueの場合)

}

条件式がtrueの時だけの処理なら上記でOKです。
一方で、falseの場合の処理も書きたい時は

if(条件式){

 処理; (条件式がtrueの場合)

}else{
 処理; (条件式がfalseの場合)

}

ちなみに、波括弧{}で囲まれたひとかたまりを「ブロック」と呼ぶ人もいる。
(筆者も含めて)
これはif文のブロックなので、「ifブロック」と呼んでいる。

とりあえず正統なif文のサンプルを紹介しておく。(Gist)

 

for文

日常の動作で、繰り返すような事ってありますよね。例えば、
ドアを数回ノックするとか、野菜を細かくみじん切りにしたりとか。
プログラムでも全く一緒。

プログラムでは繰り返しの構文はこう書く。(Gist)

(朝からこんなに言われたらイラッとしますね。。)

このfor文は公式パターンであり、

for(i = 0;i < 回数 ;i++){
 処理;

}

「回数」に入力した回数、実行される。

また、for文の構文は

for(変数の初期化; 条件式; 代入式){

 処理;

}

要するに、変数が用意されてその「代入式」をもとに値を増減し、その変数が条件式を満たされなくなったら処理を終える。(ループを抜ける)

ここで別のパターンを紹介する。(Gist)

iはforの「変数の初期化」で作られた「変数」なので、コンソールに出力ができるんですね。

「変数の初期化」で変数iは0で0から始まります。
そこから、「代入式」は「i += 3」なので、iに3ずつ加えるんですね。
「条件式」は「i < 15」なので、15未満という条件を満たしている間はiに3を足しつつ繰り返し処理する。

i < 15を満たす「i += 3」での値は

0,3,6,9,12 ,15

※「i < 15」という条件は「iは15未満」なので15は含まれない。よって、iは14までの数字である。

 

while文/do-while文

・while文

実は、while文とfor文って似ているんですよ。

簡単に言うとwhile文は、ある条件に達するまではずっと繰り返し実行するという事なんですね。
とりあえず、サンプルを見てもらいましょう。(Gist)

 while文の構文は以下ようになっています。

while(条件式){

 処理;

}

for文よりはだいぶシンプルですね。

ただし、条件式で使う変数の選択はくれぐれも間違えないように。
値が全く変化しない変数を使うと、無限ループになってしまいますからね。

無限ループの例を紹介します。(Gist)

 

・do-while文

while文との違いは「無条件に最初の一回を実行する(do)」って事です。

とりあえずサンプルを見てもらいましょう。(Gist)

上記で最初の1回目、条件式を満たしていないにもかかわらず、「10」と出力されていますね。

これがdoです。
最初の1回目は無条件にdoする。

do-while文の構文を確認しておきましょう。

do{

 処理;

}while(条件式);

これは、とりあえず一回は実行しておきたいときに使います。

 

for文とwhile文の違い

この二つの構文を見てきて気づいた事があるかもしれない。

やってる事は一緒だと言う事。

そこで、筆者がイメージするこの二つの構文の違いについてまとめてみました。
(個人的意見)

 

  • 決まった条件の範囲で、決まった回数だけ繰り返す。
  • 新たに変数を作って、代入する処理を書かずに済む。

 

  • 特に決まった回数はないが、条件の範囲内なら何回でも繰り返す
  • 新たに変数を作る必要性が出てくる。また、代入する処理も書く必要も出てくる。

 

最後に

記事としては、長々と書いてしまった所です。
C#のプログラミングについて、超基本的な事は一通り書いてきたつもりだ。
だが、ほかにも用法や紹介していない部分もある。

次回から書いていくつもりだ。

ここで紹介した事はC#をメインだった。だが、他の言語でも通じるところも多々あるので、参考にしては損はないかと。

 

電卓アプリケーションを作ってみる(予定)

minamin37345.hatenadiary.com

 

この記事に誤りがあるかもしれません。その辺はご了承ください。

本記事で紹介されている方法・手法はあくまでも個人的なものです。