まりんちゃんが初めてスマホアプリを作ろうとしている話 第4章

- 広告 -

漫画4

– 登場人物 –

万座まりん
万座 まりん(まんざ まりん)
小学6年生
好奇心旺盛で、何でも兄の真似をしたがるお年頃。

万座備一
万座 備一(まんざ びいち)
大学1年生。
子供の時からプログラミングを勉強して、自分でいろいろと作ったりしている。
将来プログラマーになるかどうかは、まだ考えていない

 

プログラミングの基礎の基礎の基礎

前回はプログラムってなんなのかって話と、Xamarinでプログラムを書くことについてちょっとだけ触れてみました。

今回はさらに具体的にプログラムの書き方をXamarin(C#)を中心に勉強していきますよ。

変数と代入と肩宣言

クラスについては前回勉強したよね。
 覚えてるかな?
うん!オブジェクトの設計図だよね。

そうそう。よく覚えてたね!

えっへん!

C#には他にも覚えておかなくちゃいけないルールがあるんだ。

ちなみに、プログラムを書く事をコーディングって言ったりするんだ。そこで、プログラムを書く時のルールのことをコーディングルールって言う事もあるよ。

 

少しずつ覚えていこうね。

はーい。

まず、前回の
MainPage = new MainPage();
を例に見てみよう。
プログラム上にある「=」は算数とかで使う「=」とは意味が違うんだ。

 

算数でいう「=」は「=」の左と右で等しい、つまり計算結果が同じ数字になるという意味になるよね。

 

でも、プログラム上での「=」は左側に右側の内容を「代入」するって意味になるんだ。

「代入」って何?

 

「代入」っていうのはね、「=」の左(左辺という)にある変数に右(右辺という)の内容を入れるってことなんだよ。

 

変数っていうのは何かを記憶させる場所なんだ。
と言うことは、「=」の左には必ず変数があるってことになるね。

ふーん。

変数はよくわかんないけど代入は何となくわかった!

変数はよく空箱に例えられたりするよ。空箱に中身を入れるイメージだね。
例えば
a = 1 + 1;
とあったとするだろ?その時は「a」と言う変数に1 + 1の結果、つまり「2」という値が入るんだ。

「a」って言うのは変数ってことなのね。「a」って変数の箱の中に数字の2が入っているってこと?

そうそう!そう言うこと。変数は数字だけじゃなくて文字なんかも入るよ。
b = “abc”;
ってやると「b」と言う変数の中に「abc」って言う文字列が入るんだ。
C#(他の言語でも)では””で囲うと文字列、つまり文字っていう意味になるんだ。だから”abc”は「abc」っていう文字の並びってことになるよ。
「a = 12;」は数字の12、「b = “12”;」は”1″と”2″と言う文字の並び、文字列って区別するんだ。
変数

変数という箱に値を入れるイメージ

文字列?

文字列っていうのは、文字の並びのことだよ。一文字だけのCharacter(キャラクター)と区別してそう呼んでるんだ。

ふーん。1文字だけは文字で、文字が並んでるのは文字列って言うのね。

大まかにいうと、そうだな。
何でそんなことを説明したかと言うと、C#は変数を使うときに前もって「型」と「変数名」を宣言しておかないといけないんだ。

 

例えば
int a;
(intは整数という意味)とか
string b;
(stringは文字列という意味)とか。

 

宣言に使われる「型」っていうのは、その変数が数字なのか文字列なのか、他の何かなのかってこと。変数は宣言されたのと同じ型しか入れられないんだ。

ふーん。

使う前に変数に何を入れるかを言っておかないといけないんだね。

そういうこと。
「int a;」の変数「a」には1とか2とかの数字しか入れられない。逆に「string  b;」の変数「b」には文字列しか入れられない。
「a = “abc”;」や「b = 1;」ってやるとエラーになるんだ。
代入

宣言した型以外の値は入れれない

ふーん。
「int a」には数字しか入れちゃダメってことなのね。
じゃあ「int b」ってやったら「b = 1;」ってやってもいいの?
もちろんOKだよ。
ただし、「string b;」と「int b;」は同時には使えない。
一つの変数には一つの型しか指定できないよ。

 

 

他にも型宣言で使える「var」っていうのがあるんだ。

「var」?

「var」は型推論と言って、宣言の時に代入する値からその変数の型を推測して決めてくれるんだ。

推測しちゃうの?どうやって??

それは、宣言と同時に代入をするんだ。そうすると代入する右辺の型が変数の型ってことになるだろ?

なるほど〜!

代入をせずに
var c;
とかってやると、「c」が何の型なのか推測できないからエラーになっちゃうんだ。

 

var c = 1;
とか
var c = “xyz”;
ってやると数字なのか文字列なのかが判断できるからOK。
int a = 1 + 1;

var a = 1 + 1;

は同じってこと?

どっちも「a」は整数型ってことになるから、結果同じってことだね。

へー。

型を書かなくても定義できちゃんだ。

 

便利だね〜。

「var」を使うと長い宣言を書かなくて済むというメリットもあるんだ。
intとかstringとかだと短いからあまりメリットを感じないけど、例えば
Dictionary<string, List<int>> a = new Dictionary<string, List<int>>;
とかになってくると、同じ「Dictionary<string, List<int>>」を2回も書かなくちゃいけないから面倒だし、右辺の式をみれば型が分かるよね。
var a = new Dictionary<string, List<int>>;
ってやるとかなりスッキリするだろ?
本当だ!
文字を書く量も減るし、見やすくなるね!
Dictionary<string, List<int>>
の意味は全然わかんないけどね!

だろ?

Dictionary<string, List<int>>

はそんな型もあるんだくらいの理解でいいよ。

 

あれ?

 

でも、「MainPage」には型がないよ?

MainPageはちょっと特別で、Xamarin.Formsが用意している変数なんだ。
だから、ここじゃない別のところで型が宣言されているんだよ。
左辺の「MainPage」にカーソルを当ててごらん。
MainPage

App.xaml.cs

これが「Page」っていう型だってことがわかるね。

へー。

で、「Page」って何の型なの?

「Page」は表示する画面の型だよ。

 

”Gets or sets the root page of the application.”って書いてあるよね。
これは、「アプリのルートページをゲットもしくはセットする」って意味の英語が書いてあるんだ。

 

ルートページっていうのは、アプリが表示するページを入れる変数だってことだね。

 

ということは、「MainPage」にMainPageのオブジェクトを代入してるってこと?

どっちも「MainPage」だからややこしいね。

 

オブジェクトのMainPageをMyPageと置き換えてみよう。

 

 MainPage = new MyPage();

 

アプリの用意しているMainPageっていう変数に「MyPage」っていうオブジェクトを入れているのがわかるかな?

そういう事なのか!

とりあえず、変数と代入と型宣言についてはわかったかな?

はーい。

 

なんとなくわかった気がする!

 

変数の型について

じゃあ、型にはどんな形があるのか見てみよう。よく使われるのはこんな感じかな。

 

意味
int 整数 整数、つまり自然数と0から自然数を引いた負(マイナス)の数字のこと。
float 小数 浮動小数点と言われる実数型。
string 文字列 0個以上の文字を並べたもの。文字コードはcharと同じくUTF-16。
bool 真偽型 true(トゥルー・真)かfalse(フォールス・偽)の2つの値をとる型。

「int」はわかるよね。さっきも説明した通り整数の型だ。とてもよく使われる型だよ。

「string」もわかるよ!さっき教えてもらった文字列だよね!

 

「UTF-8」てのはわかんないけど。

文字コードは説明すると長くなるから、すごく簡略して説明しよう。

 

コンピューターは2進数で動いてるっていったよね。だから当然文字なんて理解できない。だから、文字に一つ一つ番号をつけて「この数字ならこの文字」って関連づけてるんだよ。

 

例えば「a」は61、「b」は62とかって感じにね。実際は2進数だけど、あくまでイメージの話。
その番号のつけ方にいろんな派閥があって、UTF-16もその中の一つだよ。

ふーん。文字に番号が振られてるのか。

 

文字の61番っていったら「a」の事だってコンピューターがわかるって事?

そういう事!

文字だけじゃなくて記号とか絵文字とかにも番号が振られてるよ。

ふーん。じゃあ「float」は?

小数はわかるかな?

うん!

 

点「.」が付いてる数字だよね!

そうそう、ちょっと専門的にいうと整数と整数の間にある数を小数点を使って表したものだ。
整数「1」と「2」の間にある「1.5」は小数だね。

「bool」の真偽ってなに?

boolは2つの値をとる変数なんだ。
その一つを真(true),もう一方を偽(false)って定義してる。

 

真(true)は「正」つまり正しいという意味の時に使うよ。逆に偽(false)は違うって場合に使われる。
この型は条件分岐するときの判定によく使われるよ。
条件分岐については次回にやろう。

へー。色々あるんだね〜。

もっといっぱいあるんんだけど、一度に色々覚えたら混乱するだろうからね。

 

あと、自分で作ったクラスももちろん型になるよ。

 

変数名と予約語

あ!

 

変数名やクラス名をつける時に気をつけなくちゃいけないルールがあるんだ。

まだ何かあるの?

プログラミング言語にはその言語ごとに「キーワード(予約語)」と言ってあらかじめ使い方が決まった文字列があるんだ。

その文字列は変数やクラス名に使っちゃダメなんだよ。

なんで?

その言葉はプログラムで既に使っているんだ。例えば、「Class」とかはクラスの型だろ?だから「Class」は変数名にできないんだ。

そっか。
「Class」って言うのも予約語なんだね!
他にも細かい決まりがあるんだ。詳しくはここに書いてあるから一度目を通しておくといいよ。

えー。

こんなたくさんあるの!?

 

覚えられないよ〜(泣

仕方ないなー。

ちょこっとだけ教えてあげるから、少しずつでも覚えてね。

はぁーい。

まず、キーワードはさっきの
「Class」や「int」みたいに型として使われているもの、
「if」とか「for」とかって言う制御文と呼ばれるもの、
「true」や「false」みたいに演算子として使われるものとか色々あるよ。

 

よく使われるのはこの辺かな。
if else switch do for foreach in while break continue return throw try catch 
namespace using extern
as await is new sizeof typeof true false base this null default 
get set 
ほかにももっとあるけど、詳しくはこっちを見てね。

はーい。

これは変数名とかに使っちゃいけないのね。

 

わかった!!

けど、いっぱいあるね。。。

うっかり予約語を使ってしまっても、VisualStudioが警告を出してくれるから、気づけるよ。

そっか。
だったら安心だね。
ちなみにC#は大文字と小文字を区別するんだ。

 

だから「abc」 と「Abc」は別物になるよ。ただし、大文字小文字はプログラミング言語によって区別される物とされない物があるから気をつけてね。

 

C#でも大文字と小文字を変えただけで別変数にする事は避けるように習慣づけた方がいいね。

んん?

 

大文字と小文字は区別されるけど、それに頼ったらダメって事?

うん。そうそう、そういう事。

 

そして大抵の名前は最初の一文字を大文字にする。複数の単語を組み合わせる場合は、単語の頭文字を全部大文字にするってルールなんだ。

 

例えばさっきの「MainPage」も「Main」と「Pageの」組み合わせだからそれぞれの頭文字が大文字になってるだろ。

へー。

とりあえず頭文字を大文字にしたらいいのね?

ちょっと待った!

 

大抵の名前はそれでいいんだけど、パラメータだけは小文字始まりってなってるよ。

パラメーターって何?

ん?

難しいこと聞くなぁ。。。

 

パラメータっていうのはメソッドに渡す引数を受け取る変数のことなんだけど、意味わかる?

わかんない!!

だよなぁ。

 

メソッドは覚えてるかな?

えーっとぉ。。。

 

どんな時に何をするのかってのだよね?

そうそう。
どんな時に何をするのかを書いてあるプログラムの一つの塊だよ。

 

そのメソッドの宣言するときに、()があったと思うんだけど、そのかっこの中に書く変数のことだよ。
例えば

 

var SumMethod(int a, int b)

 

みたいな感じ。
この「int a」と「int b」がパラメータだ!

なんとなくわかった!

ほっ。。。

 

もっとちゃんと知りたい人はここを見てみよう〜。

 

頭文字を大文字にする書き方を「pascal形式」、最初の一文字を小文字にするのを「Camel形式」って言うよ。

 

C#のガイドラインではパラメータ以外はpascal形式で書くことになっているけど、ローカル変数をcamel形式で書くことも多いね。

パラメータ以外は大文字始まりって覚えておけばいいのね!

そういうことになるね。

 

そのほかにも、メソッドは動詞から始めるとか、プロパティは名詞・名詞句・形容詞を使うとかは初めのうちから習慣づけておいた方がいいね。

はーい。

プログラミングって英語が分かってないと難しいね。。。

うーん確かに。

 

でも逆に、プログラミングから英語を覚えるってこともあるよ。プログラムで使う英単語って割と決まってるからね。
最初はサンプルコードとかを参考にして書いていくのもいいと思うよ。
あと、自分だけのプログラムならいっそローマ字にするって手もあるよ。

ローマ字でもいいの?

仕事でやるなら英語表記の方がいいけど、自分だけならわかりやすい方がいいからね。逆に英語がわからなくて調べたりして時間をかけるくらいならローマ字にした方が良いって人もいる。

 

例えば三角を書くメソッドなら英語で書くと”DrawTriangle()”だけど、”SankakuKaku()”ってしても動くことは動く。

 

ただ、ローマ字って後から見た時に分かりづらかったりするから、できるだけ英語に慣れて行こう。

はーい。

 

頑張る〜。

あと一つ。
先頭文字を数字にするのもNGだよ。

 

変数「int a1;」は使えるけど、「int 1a;」は使えない。これはどの言語でも大抵そうなってるから覚えておいてね。

はーい。

 

.

[メソッドの細かい説明]
メソッドを使う時に引数というものを渡すことができるんだ。引数っていうのはメソッドの中で使う値なんかを渡すための仕組みだ。
例えば、足し算をするメソッドがあるとする。このメソッドには2つの引数がある。その場合
 void SumMethod(int a, int b)
 {
   var C = a + b;
 }
という書き方になる。
このときの、int a, int bをパラメータと言う。
メソッドを呼び出すときはこう書く
 SumMethod(1, 2);
この時の1と2を引数っていうんだ。

 

ここまで出てきた言葉のまとめ

コーティング:
プログラムのソースコードを書くこと。
代入:
変数に値を入れる事。
文字列:
0文字以上の文字の並び。
予約語:
プログラム言語で既に役割が決まっているため、変数名・メソッド名・クラス名などに使用できない字句要素。キーワードとも言う。
パラメータ:
メソッドに渡す引数を受け取る変数。

次はもっとプログラムっぽいことをするよ!

- 広告 -

コメント