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

まりんちゃん
- 広告 -

漫画は今回お休みです。。。

– 登場人物 –

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

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

アプリっぽいものを作ってみよう

プログラミングのルールがわかったところで、実際にアプリを動かしてみよう。

プログラムの書き方は、実際にプログラムを書いてみるのが一番わかりやすいし、目に見えた方が楽しいので。

 

 

そろそろプログラムを書いてみよう

コーディングルールがわかったところで、そろそろプログラムを書いてみたくないか?

書きたい書きたい!!

じゃあ、前に作ったTestAppを改造してみよう。

はーい。

わかりやすく表示を変えてみよう〜。
MainPageが最初に表示される画面の中身だって話は覚えてる?

(覚えてないけど…)うん!

(覚えてなさそうだな)じゃあ、そのMainPage.xamlっていうファイルを開いてみよう
「ソリューション」にあるファイル名のところをダブルクリックすると開くよ

本当だ。で?

xamlの書き方については説明してたら進まないから、今使うものだけ説明するよ。

<Label Text="Welcome to Xamarin.Forms!" HorizontalOptions="Center" VerticalOptions="CenterAndExpand" />
5行目のこの部分が、アプリに表示されている文字だよ。「Label」っていうのが、文字列を表示するパーツだ。
この「Text」ってのが表示している文字列だ。こういった変数のことをプロパティって言うんだ。このプロパティをここで直接書き換えても変更できる。
例えば
<Label Text="まりんちゃんがアプリをつくるよ!" HorizontalOptions="Center" VerticalOptions="CenterAndExpand" />

てやると「まりんちゃんがアプリをつくるよ!」と表示される。

なるほどー。「Label」っていうパーツの「Text」っていうプロパティが表示する文字列の変数なんだね。
「HorizontalOptions」とか「VerticalOptions」とかっていうのは何?
これは、ポジションを設定するプロパティだよ。「HorizontalOptions」は水平方向つまり横方向てこと「Center」ってことは真ん中ってこと。
「VerticalOptions」は垂直方向つまり縦方向ってこと。「CenterAndExpand」てのは真ん中にして余白を開けるっていう意味だ。なんで余白がいるのかっていうのは「Center」だけにしてみたらわかるよ。

VerticalOptions

あ、「Center」だけのは上にキュッてなってる!

てな感じで、プロパティをいじると見た目とかが変わるので試してみるのが一番。
ただ、闇雲に試しても仕方ないので、何がどういった意味なのかっていうのは知っておいた方がいいよ。
webで断片的に見るより、書籍や入門サイトなんかでしっかり読み込んだ方が理解しやすい。
ちょっと古い記事だけど、これがわかりやすいと思うよ。
はぁーい。わからないことをチョコチョコ調べるより、一度がっつり読んだ方がいいってことだね。
頑張って読んでみる。

そうだね。基本をしっかり理解しておくと応用できるようになってくるんだ。

うわぁ〜。学校の勉強みたい。。。

どっちも一緒だよ。

じゃあ、この「Label」の文字をボタンで書き換えるアプリを作ってみよう。

おおぉ〜。なんかアプリっぽい!

アプリっぽいって。(^^;
まず、ボタンを作ろう。「VerticalOptions」を元に戻して、「Button」っていうパーツを「Label」と同じように書く。
下側に表示させたい時は 「VerticalOptions」を”End”とすればいいよ。

(MainPage.xamlの一部抜粋)

    <StackLayout>
        <!-- Place new controls here -->
        <Label Text="まりんちゃんがアプリをつくるよ!" HorizontalOptions="Center" VerticalOptions="CenterAndExpand" />
        <Button Text="チェンジ!"  HorizontalOptions="Center" VerticalOptions="End" />
    </StackLayout>

ここで注意が必要なのは、iPhoneとAndroidで見た目が違うんだ。iPhoneはiPhoneの標準的なボタン、AndroidはAndoroidの標準的なボタンで表示される。同じコードなのに、OSによって見た目が変わるんだ。

同じコードを動かしただけなのに、iPhoneとAndroidでボタンのデザインが変わるの!?

そうなんだ。

iPhoneはiPhoneらしく、AndroidはAndroidらしい見た目になるんだ。

Button

でも、これだけじゃ動かない。

本当だ、ボタンタップしても何も起きないや。

ボタンをタップして文字を変えるには、ボタンをタップした時の処理を書いてあげないといけないんだ。
タップした時の処理を入れるプロパティは「Clicked」だ。
途中まで文字を入れると候補が出てくるから「Clicked」を選ぶ。すると、新たな候補が表示される。
それがタップした時の処理を書くメソッドになる。

codeサンプル

候補を選択するとコードビハインド(MainPage.xalm.cs)に切り替わってどこに置くか聞かれるので、上下キーで書きたい場所に移動して「Enter」キーを押す。するとそこにメソッドの原型が作られる!
コードビハインド
するとそこにメソッドの原型が作られる!
メソッド
すごく便利だろ?
ただ、このままだとなんのメソッドかわからないから名前を書き換えておいた方がいいかな。
今回は「ChangeLabel」としておこう。

すごーい。ほとんど自動的にできちゃうんだね。

おーっと、まだ完成じゃ無いよ。
処理自体は何も書いてないからね。

そうだった。

まずは、コードで取り扱えるように「Label」に名前をつけよう。名前は「x:Name」ていうプロパティだ。こうやって名前をつけることで、コードビハインドでラベルを使えるようになるんだ。今回は「TestLabel」って名前にしたよ。

        <Label x:Name="TestLabel"
               Text="まりんちゃんがアプリをつくるよ!"
               HorizontalOptions="Center"
               VerticalOptions="CenterAndExpand" />

ふーん。ラベルに名前をつけなかったら書き換えれないの?

実は違う方法で書き換えるリアクティブエクステンションズ(Reactive Extensions)という手もあるけど、今回は使わないよ。そして、頑張ったらどのラベルを変更するかって調べることはできるけど、面倒だから名前をつけよう。

面倒なのは嫌だから素直に名前つけるよ!

よろしい。
名前をつけたら、コードビハインドで表示の書き換えができるようになる。例えばこう。
TestLabel.Text = "かわったよ!";

「TestLabel」の「Text」プロパティに文字列の”かわったよ!”を入れるんだね!

お!冴えてるな〜、まりん。その通りだよ。
これで、「チェンジ!」ボタンを押したらラベルが書き換わるよ。
かわったよ
ほんとだ!書き換わった!
すごーい!ちょっと書き換えただけで、動くアプリが作れたね!
そうだね、こういったのを組み合わせていくことで、大きなアプリを作り上げていくんだ。
何事も小さなところからの積み重ねなのさ。

お兄、言ってることがおじいさんみたいだね〜。

なんだと〜(怒
もう少し進めようと思ったけど、ここでやめとこうか?
わ〜!待って!!
今のなし!お兄カッコイイ!!

もっとアプリっぽくしてみよう

。。。まぁいいや。
次はもう少しアプリらしさをプラスしよう。
そうだな〜。「おみくじ」アプリとかどう?
わぁー!本当にアプリみたいだね!
やろうやろう!!
いや、本当にアプリなんだけどね。。。
じゃあ見た目ももっと本格的に書き換えてみるか。
まずは、背景を赤にしよう。
背景色は”BackgroundColor”というプロパティだ。背景を変えたいのはページ全体なので、「ContentPage」に入れよう。
1行が長くなると見難いから、プロパティ毎に改行するといいよ。
修正した後の「ContentPage」はこんな感じ。
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:local="clr-namespace:TestApp"
             BackgroundColor="Red"
             x:Class="TestApp.MainPage">
赤はRedだね。”まで書くと候補が出てくるからここから選ぶと楽だよ。

色指定

もっと細かく色を設定したい時は別の方法もあるから、用途によって使い分けるといいよ。

 

へー。

色が出てくるのはいいね〜。わかりやすい!英語読めなくても何色か分かる!!

せっかくだから、タイトルを入れよう。「おみくじ」でいいか。
さっきの「TestLabel」を参考にして、タイトル用のラベルを追加しよう。
画面の一番上に表示する時は
VerticalOptions="Start"

とすると良いよ。

タイトルは大きく表示したいよね。文字の大きさを変えるのは「FontSize」というプロパティだ。大きくしたいから”Large”を入れる。これも途中まで入れたら候補が表示されるからそこから選べば良い。

へー。

候補が選べるのはすごく便利だね。

全部覚えるの大変だもん。

他のテキストも、「TestLabel」は「ボタンをタップしてね」に、ボタンは「おみくじを引く」に変えよう。

おみくじ

わー!すごい!!全然違うものになったみたい〜。

ウンウン。
もう少し変えようか。このままだとおみくじっぽさが薄いからね。
真ん中のラベルを白背景にしたいんだけど、Labelを直接白背景にすると文字の部分しか背景色が変わらない。文字の周りに余白も欲しいよね。
そういう時は他のパーツでラベルを囲ってあげるといいよ。今回は「Frame」を使おう。

囲ってあげるってどういうこと?

HTMLとかをやっている人にはお馴染みなんだけど、開始タグと終了タグで囲みたいパーツを挟むんだ。
「タグ」っていうのは<>で挟まれたひとまとまりのことだよ。
見た方が早いかな。「Frame」の開始タグは<Frame>、終了タグは”/“を入れて</Frame>ってなるよ。これでLabelを囲ってやるとこうなる。
        <Frame BackgroundColor="White"
               HorizontalOptions="Center"
               VerticalOptions="CenterAndExpand">
            <Label x:Name="TestLabel"
                   Text="ボタンをタップしてね"
                   HorizontalOptions="Center"
                   VerticalOptions="Center" />
        </Frame>

「Frame」ってタグで「Label」のタグを挟んだんだね。

こうすると、「Frame」の中に「Label」が入るってことになるの?

そうだ。こういう書き方を「入れ子」とか「ネスト」とか言うこともあるよ。
今回の場合はFrameっていう枠の中に表示したいパーツのタグを、Frameの開始タグと終了タグの間に入れる。中に入れたタグはインデントを一つ下げるルールがあるんだ。
インデントっていうのは字下げのことで、一般的には「Tab」を入れてタグの入れ子がわかりやすいようになっているんだ。

へー。

「Frame」タグの中に「Label」が入れ子になっているから、Labelの段落がインデントしてあるんだね。

お!

飲み込み早いね。そういうことだよ。覚えた言葉はそうやって積極的に使っていこう〜。

まかせて!

Frame

よし。
じゃあ、今度はボタンをタップした後の動きを作ろう。

そういえば、おみくじってどうやって作るの?

そうだな〜。

よく使われるのは乱数だと思うんだけど、今回はちょっと思考を変えてタップしたタイミングからくじを決めようと思う。

乱数って何?

そうなると思ったから今回は使わなかったんだよ。
乱数っていうのは、不規則な数字のことなんだ。
プログラム上で本当にランダムな数字を作ることは難しいから、擬似乱数と言って乱数のようなものを作っているんだ。なので、本当の乱数だと思って使うとちょっと困ったことが起こることがある。
だから今回は使わないことにしたんだ。別に使っても構わないけど、使い方を間違えるとアプリを起動して最初は絶対大吉が出るとかいう偏ったシステムになってしまうこともあり得るんだよ。
へー。乱数だけど乱数じゃないってこと?
この「ちょっと困ったこと」の部分は教えてくれないの?

んー。

 

ちょっと難しい話だからなぁ。

今回のおみくじには直接関係ないけど、興味があるなら後でちょっと詳しく説明するね。

はぁーい。

じゃあ、タップした後の動作はコードビハインド で書くんだったよね。

タップしたタイミングでどうやってくじを決めるの?

んー?

 

そうだな、まずはおみくじの種類を決めようか。

簡単にするためにもあまり多くせずに「大吉」「中吉」「小吉」「吉」「凶」くらいにしておこう。合計5つだね。

「大吉」はいっぱい出て欲しいけど、「凶」は嫌だな。。。

どのくじをどれくらいの割合で表示させるかを重み付けって言ったりするんだけど、これをどんなバランスにするかによってくじの出方が変わってくるんだ。

じゃあ、半分くらい「大吉」にしよう!

それでもいいけど、一番多いのはやっぱり「中吉」「小吉」「吉」あたりにしておこうよ。
「大吉」:「中吉」:「小吉」:「吉」:「凶」=
1:3:3:2:1
みたいな感じでどうだろう?足したら10になるよね。
うんうん。
10%:30%:30%:20%:10%の割合で出るようにするんだね。

そうそう。

それをどうやって振り分けるかというと、タップした時間を使おうと思う。ただし、分とか秒とかだとタイミングを合わせてタップできてしまうから、もっと小さいミリ秒を使おう。

ミリ秒?

あまり聞きなれないかな?

陸上の短距離走とかみてたらコンマ何秒とかって言ってるだろ?それだよ。1秒の1000分の1が1ms(ミリ秒)だ。プログラムで取得するにはこう書けばいいよ。

var now = DateTime.Now.Millisecond;
時間関係の計算はDateTimeっていう標準クラスを使うよ。
Nowっていうのは現在時刻ってことだ。
ミリ秒を取得するにはNowのMillisecondっていうプロパティを見れば分かるよ。

今、何ミリ秒?っていうことなのね!

わかりやすい〜。

そうそう。
で、それをさっきの割合に分けてやる。それをそのまま5つに分けてもいいけど、それでもまだタイミングを図れそうだから、最下位の数字だけで分けよう。
0-999の数字から0-9の1の位だけ取ってくるには、10で割ったあまりを計算すれば良い。これは算数の考え方だね。

なんか習ったことがあるかも。

かもじゃなくて、習ってるからね。絶対。

(しまった、話題を変えよう)プログラムで余りってどうやって計算するの?

四則演算をしよう

じゃあ、ここからプログラミングの基本を勉強しよう。
まずは四則演算について説明しよう。

シソクエンザン?

足し算、引き算、掛け算、割り算のことだよ。

4つの計算方法のことを合わせて四則演算って呼ぶんだ。プログラム上で描くときは、算数で習う書き方とちょっとちがうんだ。

四則演算の記号
足し算 + → +
引き算 - → –
掛け算 × → *
割り算 ÷ → /

そして、あまりを出すときは「%」を使うんだ。

ふーん。

足し算と引き算は変わらないけど掛け算と割り算はちょっと違うんだね。

余りは余りしか計算しないの?

そうだ。

例えば、

var i = 9 % 2

とやると、「i」には「1」が入るよ。

なるほどー。割り算と余りを計算するときは、割り算は割り算、余りは余りで別々に計算する必要があるってこと?

そういうこと!
あと、基本的に計算は算数と同じで左から右に順番に計算する。
ただし、掛け算や割り算があるときは、足し算や引き算よりも先に計算される。
計算の優先順位があるってことだね。他よりも先に計算させたい場合は()を使う。

例えば

(a+b)*(c-d)

と書いたら「a+b」「c-d」の順で計算して、最後に掛け算をする。

この辺も算数と同じだね。

わぁーん。

プログラムの勉強してるのか算数してるのかわかんなくなってきた!

 

ははは。
じゃあもうちょっとプログラムっぽい話をしようか。
プログラムで何かをさせたい時に必要になる制御文で基本的なものが4つある。これはどのプログラミング言語でも用意されている基本中の基本なので、まずはこの4つを覚えておこう。

制御文?

今回のアプリだと、数字によってくじを分けたいだろう?そう言った判別とかをしたい時に使われる命令文のことだよ。

「大吉」を出すとか「小吉」を出すとかを切り替えるってこと?

そんな感じかな。

その前にこの制御文とセットで使われる比較演算について説明しておこう。

比較演算。。。比較するってこと?

そう、言葉の通り比較する演算子のことだよ。
これも算数で習ったから知ってると思うけど、プログラムで使うときは書き方がちょと変わるんだ。

また算数が出た!

比較ってあの大なり(>)とか小なり(<)とかっていうの?

そうそう、それだよ。
表にするとこんな感じ。
大なり > → >
小なり < → <
イコール = → ==
大なりイコール ≧ → >=
小なりイコール ≦ → <=
ノットイコール ≠ → !=
ちなみにニアリーイコール(≒)は無いよ。
他にも色々あるけど、まずはこれくらい知ってたらなんとかなるだろう。
実際の使い方は制御文と合わせてみていこう。

 

4つの制御文

制御文は大きく分けると、条件分けと繰り返しがある。
条件分けにはif(else)とswitch(case)の2つ、繰り返しはforとwhileがある。
書き方は言語によって違ってくるけど、この言葉は同じだ。今回はC#の書き方を覚えよう。

へー。

どのプログラミング言語でもおなじ名前で使われてるんだ。それだけ基本中の基本なんだね。

そうだよ。

これらを使いこなすことでプログラムを書いていくんだ。

ふーん。どうやって使うの?

ひとつづつ説明しよう。ちょっと長くなるけど、頑張ってついてきてね!

if(条件式)else

条件式が真か偽かによって処理を分けたい時に使う。真の場合はif()の処理を行う。偽の場合はelseの方の処理を実行する。
真かというのは条件文が成立している(真)かそうで無い(偽)か、もしくは1(真)か0(偽)かで判断される。
例えば
            if (a > b)
            {
                System.Diagnostics.Debug.WriteLine("aの方が大きい");
            }
            else
            {
                System.Diagnostics.Debug.WriteLine("bの方が大きいかaとbは同じ");
            }
こんな風に使う。
もし[a=10;b=3]なら”aの方が大きい”を[a=1;b=3]なら“bの方が大きいかaとbは同じ”を出力する。
ちなみにSystem.Diagnostics.Debug.WriteLineはコンソールログを出力するメソッドだ。
Visual Stadioで見るときは画面の下の「アプリケーション出力」ってボタンをクリックすると見れるよ。
コンソールログ

switch(条件式)case

条件式がどのcase定義と一致するかによって処理を分ける。一致する条件がない場合は”default”という処理を実行する。
case処理の最後には”break;”を書く必要がある。
例えば変数aの値によって処理を分けたい場合はこうなる。
            switch (a)
            {
                case 1:
                    System.Diagnostics.Debug.WriteLine("aの数は1である");
                    break;
                case 2:
                    System.Diagnostics.Debug.WriteLine("aの数は2である");
                    break;
                case 3:
                    System.Diagnostics.Debug.WriteLine("aの数は3である");
                    break;
                case 4:
                    System.Diagnostics.Debug.WriteLine("aの数は4である");
                    break;
                default:
                    System.Diagnostics.Debug.WriteLine("aの数は謎である");
                    break;
            }
「a」が1だった場合は”case 1:”の処理を、3だったら”case 3:”の処理をする。どれにも当たらない場合、例えば「a」が6だった場合は”default:”の処理、”aの数は謎である”を出力する。

while(条件式)

条件式が真である間、繰り返し処理を行う。
            var count = 5;
            while(count > 0)
            {
                System.Diagnostics.Debug.WriteLine(count.ToString());
                count--;
            }
「count—;」はデクリメントって言って「count = count – 1;」と同じ意味になるよ。
プログラムは1を足したり引いたりすることがとても多いんだ。だから1足すときはインクリメント「i++;」、1引くときはデクリメント「i—;」という演算式が用意されているんだ。
とても便利だよ。
余談だけど、swiftではこの書き方は出来なくなったよ。
繰り返しを中断したいときは”break;”(ブレイク)と書く。
繰り返し処理の途中でスキップしたい場合は”continue;”(コンティニュー)と書く。
            var count = 5;
            while(count > 0)
            {
                System.Diagnostics.Debug.WriteLine(count.ToString());
                count--;
                if(count == 1)
                {
                    System.Diagnostics.Debug.WriteLine("あと一回");
                    continue;
                }
                if(count == 0)
                {
                    System.Diagnostics.Debug.WriteLine("これが本当の最後です。");
                    break;
                }
                System.Diagnostics.Debug.WriteLine("whileの最後の行");
            }
こんな風に書いた場合、出力はこうなるよ。ログ
通常は最後の行まで処理が進むから、countの数字を出力した後に”whileの最後の行”が出力される。
「count」が1になったら”if(count == 1)”の処理に入ってコンティニューするので、その後の処理はスキップされ”whileの最後の行”は出力されない。
「count」が0になったら今度は”if(count == 0)”の処理に入り、ブレイクでwhileのループから抜ける。
whileは条件を満たしている間は終わらない。間違えると延々に終わらない無限ループになってしまう危険があるので注意しよう。
例えば、今回の例で
count—;
を書き忘れると、延々”5”を出力し続けることになってしまう。

for(初期値; 継続条件; 変化式)

指定回数の繰り返し処理を行いたい時に使う。whileと同様に”break;”や”continue”も使用できる。
for文の書き方は少し特殊だ。基本的には変数を使って回数をカウントする。
変数には慣習的にiを使うことが多いな。多分、整数の英語(integer)の頭文字からとってるんだと思うよ。別に他の変数を使っても問題ないけど、わかりやすいものにしよう。
            for(int i = 0; i < 5; i++)
            {
                var n = i + 1;
                System.Diagnostics.Debug.WriteLine(n.ToString() + "回目");
            }
この例だとiが5未満の間、{}内の処理を実行する。
これもプログラミングあるあるなんだけど、数字の初めは1じゃなく0からにすることが多い。これは配列の考え方にも通じるから0始まりの感覚に慣れよう。
処理の手順はこんな感じだ。
最初にiを0に設定して(int i = 0;)、ループの先頭に戻る時にiがプラス1される。(i++;)。i++;した時に5になったら(5未満じゃなくなったら)ループ内の処理はせずに終了する(i < 5;)。

いよいよ「おみくじ」を作るよ

よーし、プログラムのことがわかってきたところで、おみくじアプリに戻ろうか。

ちょ・・・ちょっと待って!頭爆発する!!

今回はこの中の”if”しか使わないから大丈夫だよ。とりあえず、これだけ覚えておいて!

”if”だけでいいなら、覚えられるかも!
よし!やろう〜
現金だなぁ。
じゃあ進めるよ。
まず、「おみくじを引く」ボタンをタップした時に呼ばれるメソッドを変更しよう。

”ChangeLabel”ってメソッドだね!

そうそう。
そこに、現在時刻を取ってくる処理と、ミリ秒の1の桁を取得する処理を入れてみよう。
結果を見るために計算結果を「TestLabel」に表示させよう。
        void ChangeLabel(object sender, System.EventArgs e)
        {
            var now = DateTime.Now.Millisecond;
            var ms = now % 10;
            TestLabel.Text = ms.ToString();
            }
        }

ボタンを押すたびに数字が変わるのがわかるかな?

ミリ秒

本当だ!すごーい!!

よし!じゃあ次は振り分けをしよう。
振り分けにはswitchも出来るけど、今回はマリンの頭が爆発しないようにif文を使うよ。
「大吉」:「中吉」:「小吉」:「吉」:「凶」=1:3:3:2:1
の割合にするから、0を大吉、1〜3を中吉、4〜6を小吉、7,8を吉、9を凶にしよう。
プログラムで書くとこうなる。
        void ChangeLabel(object sender, System.EventArgs e)
        {
            var now = DateTime.Now.Millisecond;
            var ms = now % 10;
            if(ms == 0)
            {
                TestLabel.Text = "大吉";
            }
            else if(ms <= 3)
            {
                TestLabel.Text = "中吉";
            }
            else if (ms <= 6)
            {
                TestLabel.Text = "小吉";
            }
            else if (ms <= 8)
            {
                TestLabel.Text = "吉";
            }
            else
            {
                TestLabel.Text = "凶";
            }
        }

こんなかんじに、if,elseはつなげていくことができるんだ。上から順番に比較していくんだ。

「if(ms == 0)」でなければ「if(ms <= 3)」、それでなければ「if (ms <= 6)」みたいな感じ。一致する条件があればそれ以降の「if」は評価されない。

これを動かして見ると、ほら、ボタンをタップしたらくじの結果が表示されるよ。

大吉

本当だ!

すごーい、「おみくじ」みたい!

おみくじだよ。

でもなんかさみしいかも。。。

そうだな〜。
見た目をもう少し変えてみてもいいかもね。
見た目を変えるのは次回にしようか。

そうしよう!

 

今日はいっぱい勉強してもういっぱいいっぱいだよ。

乱数について
乱数っていうのは不規則な数字のことなんだけど、不規則なものを機械的に作るのはかなり難しいことなんだ。
だからプログラミング言語では擬似乱数と言って乱数っぽい数字を計算で生成するんだ。
C#の場合はRandom()という擬似乱数を生成するクラスが用意されている。
気をつけないといけないのは、擬似乱数は数字を計算で出すので、初期値が同じだと毎回同じ結果が出てしまう。さっき言っていた、アプリ起動後は絶対「大吉」みたいなことが起こってしまうわけだ。
これを回避するには、初期化する値を毎回変える必要がある。
Randomはシードと言って計算の元になる数値を初期化時に入れることが出来る。
var r = new Random(1000);
これを入れて計算させると、毎回同じ結果になるということになる。
逆にシード値を入れずに初期化すると、TickCountという時間経過とともに変化する数字が使われる。
その場合は、毎回同じ結果になることはない。
どちらが良いのかはアプリの中身次第なので、こう言う事があると言う事だけを頭に入れておこう。

 

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

プロパティ:
クラス内部から見るとメソッドのように振る舞い、 クラス利用側から見るとメンバー変数のように振舞うもの。
入れ子(ネスト):
ある構造の内部に同じ構造が含まれている状態のこと。
インデント:
元々は文章の先頭を字下げするという意味。入れ子になっているタグなどを字下げして見やすくすること。
乱数:
一意的ではない、何がでてくるのかわからない数字。
擬似乱数:
乱数のように見えるが実際は計算によって算出された乱数っぽい数字。
四則演算:
足し算・引き算・掛け算・割り算の4つの計算方法のこと。
比較演算:
比較演算子を用いて2つの数字を比較して、真偽を判定する演算。
制御文:
処理の流れを示すために用いるプログラム文。
- 広告 -

コメント