ブルーノのC#プログラミング & unity勉強日記

プログラミング素人、ブルーノの自主勉強ノートです。他のプログラミングを勉強したい方の助けになれば幸いです。その他趣味の雑記もしていきたいです

制御文(if, switch)

みなさんこんにちは

試合の疲労で1日だけ休むつもりでしたがそん後もゴタゴタしてしまい投稿をサボってしまったブルーノです。このペースじゃ間に合わない....頑張って行きたいと思います。

 

制御文とは??

プログラムは基本的に文の上から順番に実行されていきます。しかし時にはある文を実行したくない場合や一つの文を何十回も書かずに繰り返し行って欲しい場合もあります。そんな時にプログラムの流れを制御するための文を使い、それを制御文と言います。制御文を使いこなすことで見やすく、容量も節約したスマートでクールなプログラムが作れるのです。今回は2~3種類の制御文のうちの条件選択文という種類についてまとめていきます。

 

if文

if とは英語で「もし」という意味ですよね。プログラミングでもそんな感じで「もし〜〜なら〜〜する」といった感じの文を書くことで条件によって実行する文を選択できます。

if文の書き方

if (条件式) {
文1;
文2;
文.....;
}

(条件式)の中が true になる時は {  } 内の文1、文2....たちが実行され、false の時は実行されません。条件式が偽の時に実行したい文を指定することもできます。

 if (条件式) {
文1;
文2;
文.....;
} else {

文a;

文b;

.....;

}

 else は英語で「または」とか「もしくは」という意味ですよね最初の文が条件に合っていなければ「もしくは」という感じで実行されると覚えると楽そうです。2つ以上の種類の条件式を同時に設けることも可能です。例として

if (条件式a) {

文1;

文2;

....;

}  else if (条件式b) {

文a;

文b;

....;

} else {

文α;

文β;

.....;

}

といった具合になります。どの条件にも当てはまらない場合に最後の文が実行されます。

 

switch文

switch文は実行する選択肢が( )内の式に応じて複数ある場合に使います。式は整数型string型です。先ほど紹介したif文でもいくつも何重にも { } で囲んだり else if を使えば同じようにできますがメンドくさいですよね。形としては下のようになります

switch (式)

{

 case 定数式:

       文1;

       break;

 case 定数式2:

       文2;

       文3;

       break;

  default:

       文4;

       break;

}

まず case に続く定数式により条件を設定し、その下に実行する文を記述していきます。そのケースで実行する文が終わる場合は break でこのswitch文から抜け出します。

式がどの case にも当てはまらない場合は default が実行されます。この文はなくても構いません。

 

 

この2つが制御文の中の条件選択文と呼ばれる種類になります。これができればプログラムっぽく見えますね。

全然更新できなかったんでスキマ時間を縫って投稿していきます。頑張らねば😠

演算子について

みなさんこんにちは

何を食べてもあまり太らないのに米だけはおにぎり一個で急に太ってしまうのが悩みのブルーノです。

今回は演算子についてのメモをまとめていきたいと思います。

 

演算子とは

演算子はプログラミングの世界ではオペレータ(operator)という名前で呼ばれることがあります。式で説明するなら

x = 10 + y

とかの式の = とか + の部分が演算子にあたります。演算子にも色々種類があり、算術演算子関係演算子条件演算子などがあります。普段我々が言葉で使っているものを記号で表しているだけなので、覚え易いと思います。

算術演算子

我々にとても身近なものが多い演算子です。

+, -, *, /, %, ++, -- 

これらが算術演算子です。なんか見慣れないのもありますが、そんなに難しくはないです。ちなみに * は×(かける)、/ は ÷ (割る)と読んで問題ないようです。 %は余りを求めます

ex) 10 % 3 = 1

3*3 = 9なので余りは1となります。この余りをつかうことができる演算子です。

++と--は見慣れませんがそれぞれインクリメント演算子デクリメント演算子と言います。この二つはそれぞれ値に1足したり引いたり出来ます。なんの意味があるのかと思いますが、後にやるループを使う場合など、これらを使うことで一つずつ処理していくことができます。書き方は

x++ もしくは ++x

のようになります。この二つの違いは、実行されてから足されるか、実行後に足されるか、です。

これもなんの違いがあるのかと思いますが、ぶっちゃけ現時点では私もそう思います笑 きっと役に立つ時がくるはず😭

 

関係演算子

関係演算子は数学とかでやった等しいとか大きいとかの不等号などのことを言います

==, !=, >, <, >=, <= etc...

==についてですがC#プログラミングではただの = は「代入する」という意味になるので「等しい」という関係を表すことにはならないそうで、等しいを表すにはこちらを使うそうです。逆に != は「等しくない」を表します。あとは誰でもわかると思うので割愛します。

 

論理演算子

論理演算子には && と || があります。&& は「かつ」|| は「または」と覚えるとわかり易いです。

 

代入演算子

= (イコール)のみが代入演算子です。先ほども言った通りC#プログラミングではこの = は「右の値を左に代入する」という意味になります。普通の = の他に複合代入演算子というものがあります。たとえば

x = x + 10;

という式は

x += 10;

と言った風にできます。この形はよく使われるので覚えておきます。

 

いかがでしたでしょうか。演算子はよく覚えておかないと式をパッと見たときにややこしくなりそうなので整理しておく必要がありそうです。

数学をもっと中高でやっておけば良かった....orz笑

 

 

変数について

みなさんこんばんは。

早朝ランニングを日課にしているのですがサボるとその日一日中体がだるくなるようになってしまったのにここ二日サボってしまっているブルーノです。暖かくなって日も早く登るようになったのでランニングには最適な季節ですね。

今回は変数についてのまとめを上げていきたいと思います。

 

変数とは?

前回の後半で少し取り上げた変数ですが、変数とは、データを格納しておく入れ物のようなもののことを言います。あまり名前からは想像しにくいですね。

宣言(declaration)

f:id:covory10101101276:20170502211413j:plain

前回実はこの宣言というあまり馴染みのないワードに青色を付けておいたのですが、プログラミングにおいてこの宣言という行為は必要不可欠になって来るようです。

変数を用意するためやメソッドを使う場合など新しく何かを使用する際は宣言をしないといけません。なんか慣れるまでは少し違和感がありますね。大げさな気がするからかな?

宣言の仕方

データ型 変数名;

ex) int x; 

変数名は前回でも触れたとおり数字が頭に来なければ好きな名前を付けられます。データ型というのはその変数が格納できるデータの種類のことです。整数を格納したければ int 型や ushort 型、文字を格納したければ char 型や string 型など。これらの種類はこれから先少しずつ使いながら覚えていきたいです。さて、今あげたこれらのデータ型はC#言語に最初からあるデータ型で、それらのことを組み込み型というそうです。これに対して、型を自分で自由に定義することもできるそうで、それをユーザー定義型というそうです。入れられるデータの型を自分で自由に定義できる?そんなことができるのかー。

前回使った変数はどれもMainメソッドの中で使いましたが、メソッドの中で宣言された変数のことはローカル変数と言います。変数に初めて値を代入することを初期化と言い、その値は初期値と呼ばれます。ローカル変数についてですが、ローカルな変数というだけあって、どこからでも見えるわけではなく、その変数が宣言されたブロックもしくはその内側のブロックでしか見えません。ブロックとは、{ から } で囲まれてる範囲のことを言います。

const

変数とはデータの入れ物なので自由に入れ替えたり上書きできるようになっているのですがうっかり変更したくないデータの場合はこの const キーワードを使って定数にすることができます(読みはコンストでいいのかな?)。コンストは宣言と同時に初期化しなくてはなりません。

値型と参照型

変数には大きく2種類あり、値型と参照型があります。先ほど変数はデータの入れ物と説明しましたが、値型についてはそのイメージでよいそうです。しかし、参照型は直接入るわけではなく、メモリのどこかに保存されたデータのアドレスが入っているだけで、それを参照することによってデータを引き出すことができます。箱の中にお菓子は入っておらず、お菓子のしまい場所が書いてあるイメージですかね。

値型の中でもかなり重要なものの一つに、論理型(bool型)というのがあるんですが、少し後にこの論理型は多用されるのでメモしておきます。

と言ってもこの論理型は難しくはなく、true(真)と false(偽)しかありません。なんか急に中二チックになりましたが、簡単に言えば ON か OFF かってことらしいです。昔弟に借りてやっていたDSソフトのメイドイン俺というゲームの中にこんな感じの要素があった気がします。

暗黙の型指定

なんかかっこいい響きの言葉ですね。私は好きです。変数を宣言する際に var キーワードを用いることで、暗黙の型指定ができます。例えば、

var x = 10;

と宣言すると、

int x = 10;

 というように、値に応じたデータ型に勝手に変換してくれるのです。便利ですね。でもまだ私は知識が足りないのであまりこれは使わず、手動でデータ型を指定していきたいです。

オブジェクト型

C#の特別な型にオブジェクト型というのがあります。先ほど値型と参照型の違いについて書きましたが、このオブジェクト型は値型でありながら参照型のような仕組みでどんな型でも格納できます。オブジェクト型は値を入れるのがメモリ内のどこかではなく、マネージドヒープ領域という特別なエリアにデータを保存しておき、オブジェクト型の変数にはそのアドレス、ありかが入れられます。名前がかっこよかったので色を変えておきました。

この様々な値型をオブジェクト型変数に代入することをボックス化と言います。オブジェクト型変数に格納したデータを値型変数に代入するには型キャストというのを使います。この際のオブジェクト型変数→値型に代入することをボックス化解除と言います。

ボックス化    値型変数 → オブジェクト型変数

ボックス化解除  オブジェクト型変数 → 値型変数

型キャスト

f:id:covory10101101276:20170503001335j:plain

これしか思いつきませんでした(イメージ図です)。

オブジェクト型は全ての型を入れられる万能な大きな入れ物なのでそのまま突っ込めば良いですが、値型はそれぞれ入れられるものが細かく決まっており、そのまま突っ込むことができません。今回のオブジェクト型から値型への代入は、その中身はこの値型へ入れられますということを明示することで初めて変換することができます。この明示する行為を型キャストと言います

型キャストの仕方

object x;

int y;

int z = 100;

x = z;         //ボックス化

y = (int)x;   //ボックス化解除(型キャスト)

 下から2番目の行でオブジェクト型変数 x に int 型変数 y を代入(ボックス化)し、最後の行で別の int 型変数 y にオブジェクト型変数 x を型キャスト(ボックス化解除)しています。言葉で表すと少し長いですが、こうやってプログラミングするとその行為はスッキリしますね。

 

いかがでしたでしょうか。ひとまず今回はベースのベース部分であるこの程度にまとめておきます。変数というのはこれから先絶対に使って行かなければならない要素なので慎重に理解していきたいと思います。途中の画像は完全に趣味なのですが、イメージ図として捉えておいてください。もっとペース上げないとこれはダメですね。次からは頑張ります。

C#って? 書く際のルール等

みなさんこんにちは

まとめるとは書きましたが、あんまり忠実にメモして掲載すると著作権的なものに触れる気がしたので、具体的な内容ははっきり書かないことにしました。ネットでも調べられるような簡単な見出しで自分なりにここに綴っていきます。

その前にスクリーンショットってこう取ればいいのかな?

f:id:covory10101101276:20170501163535p:plain

おおー。あ、ちなみにパソコンは祖母に資金提供していただいて購入したMac book proを使用しております。てかこれスクショ元のサイトも載せとかないと怒られるんですかね(汗

Macでスクリーンショットを撮る5つの方法 – iBitzEdge

話が逸れるんですがこの本の開発状況はVisual C# 2010 Expressというのを使っているそうなのですがこれはWindowsのソフトらしいので私は代わりに同じくC#プログラミングができるMacの「Xamarin studio community」という無料のアプリ(ソフト?)を使っています。

www.xamarin.com

 

C#言語とは何か

どうやらC#言語はオブジェクト指向プログラミングという手法が使われており、これが他の言語に比べて中々長けているようです。なるほど、さっぱりわからん。つまり他の古い言語に比べて、原始的な基礎的な部分を使いやすくまとめてある、ということでいいのかな。

テキスト

プログラマーがカタカタやっている画面についての書く際のマナーだとかルールについて。どの言語でも最初に作るプログラムは「Hello! World!」と表示することのようです。

f:id:covory10101101276:20170501174835p:plain

f:id:covory10101101276:20170501175152p:plain

コメントの覚え書き

//

/* ...... */

これらで囲んだ記述はプログラム内では実行されないプログラマーがプログラムを見直す時にコメントとして残すために使うようです。

 

名前空間(name space)

using System;

この行はプログラムが「System」という名前空間(name space)を使うことを宣言しています。現時点ではよくわかりません。のちに分かるようになるそうです。

 

クラス(Class)

class Bruno001

の下の { から } までの記述はBruno001というクラスであることを宣言しています。どうやらC#言語の重要な要素がこのクラスというもののようです。

 

Mainメソッド

public static void Main()

なんか色々書いてありますが、とりあえず重要なのはC#プログラミングではこの一番右に書いてあるMainというメソッドからクラスの中身は開始されます。メソッドというのもクラスの構成要素の一つです。

public

MainメソッドがBruno001クラスの外からでも呼び出せることを表す。

static

Mainメソッドには必ずつける

void

Mainメソッドが呼び出し元に値を返さないことを表す。

 ; (セミコロン)

プログラムの行の記述の最後には必ずセミコロンを入れなければならない。とても忘れやすいので注意。「。」や「 (スペース)」等はプログラミングにおいては他の文字同様に扱われるので終わりの区切りにはならない。

Console.WriteLine("  ");

この " と " の間の記述がコンソールに映し出される。コンソールっていうのは2枚目の画面のこと。

Console.Write(" ");

上のWriteLineメソッドと似ているが、違いは上が文の最後に改行をするのに対し、こちらは改行をしないため、連続して文字列を表示する。

Console.ReadLineメソッド

コンソールで改行が入力されるまでの内容を文字列として返す。つまりコンソール画面で入力された文字列を読み取るメソッド。これを使えば入力された内容を変数にしまえる。

変数

int x;

x = 7;

変数というのは何か値をしまっておく箱のようなもの。intがその入れられる値の種類(intは整数型の変数)で、この種類をデータ型という。C#プログラミングの際は使う前にこうやって何を使うのかを宣言しなければならない。その後のxは自分でつけた変数の名前。つまり「x」という名前のint型の箱を使いますよという意味。何でxなんだろうというのは気にしない。数学の時も適当な値にxとかyとか使ったからそのノリ。

= はプログラミングではイコールではなく右のものを左に入れることを表す。(←)こんな感じのイメージ。なので2行目の x = 7 は「x」という名の変数に7をしまいますという意味。

そして変数の名前をつける際の注意として、特定のパソコン関係っぽいキーワードは変数名にできない(extern, operator, overrideなど)。また、数字で始めるのも禁止されている。よってアンダースコア(_)かアルファベット(aBc など)で始めるのが良い。

 

いかがでしたでしょうか。自分なりにわかりやすくまとめてみました。しかし本来ならとても分厚くなるであろう内容を短く綺麗にまとめたものをさらにまとめているので、それこそ必要な箇所が削られている可能性もあるため、この分野に精通している人以外はあまり鵜呑みにしない方が良いです。同じくC#を勉強しようとしてる方は参考程度にみておきましょう。

ところでどこまでが著作権に触れるラインなのか分からないので、一応できるだけ伏せて書きましたが、もしマズイようでしたら書き方を考え直そうと思います。

 

おさらい(いきなり)

みなさんこんにちは

今日からブログに投稿していきたいと思います。

いきなりですが、今までの私の学習状況、つまり現在の知識量についてまずは投稿していきたいと思います。まず「猫でもわかる」本の方についてですがまだ全部読み終えておらず、半分までしか読み終えておりません。次に「unityで神になる本」についてですが、これに関してはスクリプト関係の欄をバーっと流し読みしただけ。

はい、

全然やっておりません。

プログラミング経験もないのにこんだけしか下準備もしてないってやる気あるのかと不安になりますが、頑張っていきます(震え声

というわけで初めの方はunityではなく、「猫でもわかるC#プログラミング」の本の内容を大まかに大事そうな項目を自分なりにまとめたものをできるだけ早く投稿していきます。そこから読破に向けて記事を投稿していきます。unityの勉強をいち早く見たい方、申し訳ありません。今がGWなのでバイトが夕方は多々あり、今日中に今までの全てのおさらいは私のスペック上難しいのですが、可能な限り頑張っていきます。

自己紹介

みなさんこんにちは

ブルーノと申します。田舎に住む大学生(男)で今日からプログラミングの勉強の一環としてこのブログを書き始めることにしました。私はプログラミングに関してはドがつく素人で、ゲームの裏技やバグの記事くらいしかプログラミングといった事項は触れたことがありませんし、こういったブログを書くといったことも生まれてこのかた一度もしたことがありません。

この度unityというゲームエンジンでアプリを自主作成できるレベルまでコンピュータに強くなり、将来に役立てたいということになりました。とても厚かましいことは重々承知ですが、勉強の過程を公開することでブログを閲覧の方にアドバイスをもらいつつ、アプリを配信したら、ぜひプレイしていただきたいな、ついでに私と同じようなunityでアプリとか作ってみたいけど素人という同じ境遇の方の手助けになればいいなというのが心情です。

使う教材についてですが、どうやら調べたところこの2冊が良いと評判なので、まず「猫でもわかるC#プログラミング」を中心に勉強しつつ、「unityで神になる本」をパラパラ読み、あとはチュートリアルなどでunity関する知識を蓄えていこうと思ってます。何かオススメのサイトや資料があれば教えていただけると幸いです。

Amazon CAPTCHA

amzn.asia

作るアプリというものですが個人的にはゲームを作りたいなという思いが強いです。しかし、このブログを書き始めるちょっと前からすでに少しプログラミングを勉強していたのですが、その途中でこれらの機能を使って便利なアプリケーション(例えばマルチタスク機能を充実させた日記帳やスケジュール帳等実用的なもの)を出してみたいなという気持ちも少し湧き上がってきた今日この頃です。まあどうなるかはわかりませんが頑張ってやっていきたいと思います。そして、休憩がてら好きなゲーム(主にスクエニ)の雑談とかを交えていきます。

初心者のブログ特有の文字ばっかりの記事になってしまいましたが、どうかぜひ見ていってください。まだ広告の掲載の仕方とか文を見やすくする工夫とか知らないので、そちらも少しずつ学習していきたいです。

どうかよろしくお願いします!