エンジニアもどきの雑記

メモ帳です。きっと。macアプリ配信windowsでもできるようになるまで絶対にメイン機にしないマン。特筆しない限り環境は【win10home,i5-7200u,8g,64bit,巨乳が好き】

【C#】UnityのためにC#を一から学ぶpart2【変数】

前回

dddpga1.hateblo.jp

とりあえず前回、一行書いただけだけどC#を動かしたんだ。 それだけでもうプログラミングだ。きっと。俺はそう信じてる。じゃなきゃまだ俺はプログラマーじゃない。

さて、細かいことは相変わらず抜きにして、とにかく分かるように進めるよ。

よく0と1でデータは全部できてるってきくよね。
それはまじで、電気が流れてる瞬間を1、流れてない瞬間を0として扱って、それをすごい数並べてパソコンはいろいろ判断してる。
プロセッサがどう、とかそこらへんは自分で学んでね。個人的には【コンピュータはなぜ動くのか】って本がわかりやすくておすすめだよ!
初現場の先輩に教えてもらった。いまだに愛用してる。

まぁ、とりあえず、パソコンで扱うデータは画像だろうが動画だろうが、何だろうがすべて0と1でできてるってこと。

今みてもらってわかる通り、数字であり、文字なの。
だからプログラマって仕事は文字列をひたすら操作する仕事なの、極端に言ってしまえば。
俺は現場に初めて出るまでまじで何するかわかってなくてここら辺の説明超ほしかった記憶がある。

あと、メモリ、ストレージくらいはわかっていてほしいかな。
それくらいは調べよう!



さて、変数からやるよ。

前回のCSharpLearnを開いて、前回書いたConsole.writ~を消そう。


そして、次を記入。

static void Main(string[] args)
{
  int x;
  x = 100;
  Console.WriteLine(x);
}


で、前回の通りデバッグなしで実行を押してみると、

100

と表示されたかと思います。

Console.WriteLine();
は前回の通り、コンソールに出力するもの。
今回は前回Hello CSharpと記入した箇所に対してxと記入してます。
つまり、xを表示してます。


え、xじゃなくて100じゃん! と思ったあなたはバカです
とりあえずコードなんとなく読んでみて理解できないとちょっとまずいです。

x = 100だからxは100なんでしょ?
くらいがちょうどいいです。はい。

自分の後輩に教える側になりたいっていってる奴がいますが、自分は違うので、まじでxじゃないじゃん! なんて言ってきた人が出てきたら絶句します。


とりあえず解説。一行ずつ。

int x;


これは、まずいうと【int型のxという変数を宣言している】です。

先ほどメモリくらいは理解していてね、と記述しましたが、そこが関係してきます。
ちょっと想像するとわかってしまうかもしれませんが、
例えばdbやapi、つまりはこのコード以外の場所から、データが来た時。


{user_id:100, name: hogehoge, age:25}

みたいな形で送られてきたりします。(これはあくまで一例です。
まずはそれを受け取り、変数に入れてやることで操作ができるようになるのです。
少し仕事をしたり勉強したりしてると当たり前のことになって考えもしないのですが、これが基礎中の基礎です。
受け取った値は変数にぶちこむのです。

今回は100という数字が飛んでくるので受け取り側でxという変数を用意しておきます。
100がくるので、xにぶち込むのです。良く変数は箱、と表現されますがまさにこれです。ぶちこむのです。
値をぶち込む箱、それが変数。

ではintとは何か。
これは箱の形を示してます。ってよく言われますが、まぁそうです。


100は数字です。
前回出力したHello CSharpは文字列です。


はい。そういうことです。
intとは整数を受け入れられる形なのです。細かいことはもっとあるんだけど、今はとりあえずそう覚えてておk
細かいものも含めたり、c#だけじゃなくてvc#も含めると相当な数の型がありますが、使っていく内に、そして自分で勉強していく内に覚えるので大丈夫。


今回は100という数字をぶち込むための変数(箱)を用意しているのです。
なので一行目は、

int x; //100(っていう数字が)くるんだろ? 俺が受け止めるぜ!


ということです。
余談ですし細かいこともないですが、行は必ずセミコロンで締めます。
これもやってれば覚えます。

では二行目。
二行目は飛んできた100を待ち受けていたxにぶち込んでいます。

x = 100;

x = 100の=(イコール)は、数学のイコールとは少し違います。
プログラミングのイコールは、右辺を左辺に代入です。

もう少しかみ砕いていいうなら、100をxにぶちこむ、です

一行目でxはすでに私はint型であって数字(整数)を入れられます! と宣言していたので、
この行で型を宣言しなおす必要はないわけです。じゃないとxが出てくる度、私は整数です! って連呼されるからね。


実際、宣言をした時点でintは値型なのでスタックメモリ上にint分の容量が確保されます。その確保されたスペースがxなのです。
スタックメモリはロケットエンピツのように先出後入れで……
って、こんなこといきなり聴いても絶対わからない。だからこの記事は初心者にわかりやすくしてる。
それも踏まえてもっとわかりやすい説明があったり、ここを詳しく! とかあれば意見ください。

まぁ結局、一行目の説明でしてしまった通りで、xに対して100という値を入れたわけです。
で、三行目の

Console.WriteLine(x);


で、xを出力したわけです。xという文字ではなく、xという変数を表示しているのです。

なので100と表示されます。


仕事につながる話として、
とりあえず先ほど例に出した
{user_id:100, name: hogehoge, age:25}
で考えてみよう。


あなたはとあるサイトに会員登録しました。いかがわしいサイトですが気にしません。
そこで、名前と年齢を登録しました。名前はhogehoge、年齢は25。入力エリアに入力して送信、登録ができました。


ここまでした時点で大体はそのサイトのデータベースという文字列を記録しておくエクセルのようなものが入ったサーバーにその情報が登録されます。
100人目の登録者なので自動で付与されるuser_idは100。nameはhogehoge、ageは25。と。


で、あなたがまたそのサイトへと訪れた時、自動ログインがなかったら自分で登録した情報を再度入力してログインするよね。

そういうことです。

少し実際に近い話に寄せると、
あなたがまたこのいかがわしサイトへとやってきて名前hogehogeと年齢25を入力してログインします。(実際だとidとpasswordだよね)
すると、システムはあなたが入力したhogehogeと25を受け取り、実際にデータベースに登録があるか、数字や文字が一致しているか見に行きます。
この時、データベースではあなたが入力した情報を条件としてデータベース内に登録された情報を検索してます。
で、合致するものがあればそれを返します、なければ空です。


つまり、今回でいう100です。同じ値があれば100を返します、なかったら何も返しません。


あなたはそのシステムを作ります。とりあえず100が返ってくるのでぶち込むためにxを用意します。


といった具合。
かなり現実とはかけ離れてるし、実際もっともっと複雑だし、面倒だし、なんでこのフレームワークやねん、ってなることもしばしばだけど、
そういったことをするのがプログラマです。


イメージつかめるかな。

制御までやりたかったけど長くなったのでここまで。


次回

dddpga1.hateblo.jp