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

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

数値-文字列間の変換と入力された型の判別について

みなさんこんにちは

"ヒトは飢えれば飢えるほどご飯を買い過ぎてしまう"

ブルーノです。今回はちょっとおさらいも兼ねて型の変換や判別の仕方についてまとめていきます。

 

Parseメソッド

今回は型変換の中でもよく使われるParseメソッドについて紹介します。例えば入力された値を計算に使いたい時、入力された値をそのまま使おうと思っても文字列型のため、うまく計算できません

Console.WriteLine("二乗したい数字を入力してください");

str nijou = Console.ReadLine();

このまま ReadLine で nijou を取得してもstring型なので加工できませんね。

じゃあ最初からintで代入させて

int nijou = Console.ReadLine にすればいいんじゃないか?って思ったんですがどうやらReadLineメソッドは文字列型しか返さないので入れる先は必然的にstring型になるようです。

そこで Parse メソッドを中に入れることで、任意の数字の型にしていれることができます。こんな風に

Console.WriteLine("二乗したい数字を入力してください");
int nijou = int.Parse(Console.ReadLine());

int.Parseの後の()に文字列型を入れることで左辺の用意した数値型の変数に変換できるのです。これで入力内容を数値型にできますね。では次に入力された内容が何型であるかを判別する方法に行きたいと思います。

 

Char.Is〇〇〇(str)について

先ほどは変換する方法についてやりましたが、そもそも入力された内容が必ず変換できるとは限らないのです。ユーザーの入力とは様々なのでそれを全てカバーする必要があります。今回はよく使われる

・Char.IsNumber()

・Char.IsDigit()

についてまとめます。この二つ、それぞれ()内に入力された内容が数字か、10進数かを求められます。返す値はbool型なので、主にif文で使われそうですね。

例)

 

f:id:covory10101101276:20170526142228p:imagef:id:covory10101101276:20170526142342p:image 

一桁でない場合や数字でない場合は弾かれるようにしました。にしてもアプリの仕様上インデントがすごく見づらくてスミマセン(汗

でも野球ファンの方は2桁がお気に入りの可能性があると思います。じつはTryParseメソッドというのを使えば2桁でしかももっと短くできるようです。c#内蔵のメソッドには便利そうなものがたくさんありますね。もっと勉強が必要そうです。

ArrayListクラスについて(既存のクラス)

みなさんおはようございます

梅雨に入りかけているのでしょうか雨の日が多くなってきてテニスがあまりできない日々が続いております。私はテニスを2日もやらないと感覚が狂ってしまう超不安定体質なので筋トレでなんとか運動している感覚をごまかしています。さて今回は既存の、用意されているクラスを使ってみたいと思います。

 

既存のクラスとは?

今までは自分でクラスをこしらえ、メソッドを定義してきましたが、実はC#にもともと入っているクラスというものがあるのです。Microsoftのホームページにはその中身が全部載っているのですがとても個人では定義しきれません。そんな膨大なクラスを内蔵してくれているおかげで我々はその一部を呼び出し使うことができるんですね。今回はその中でも便利なArrayListクラスについてやっていきましょう。ArrayListクラスはその名の通り列のリストを作るクラスで、Addメソッドで中にデータを格納し、Countプロパティでその要素数を確認します。

ArrayList インスタンス名 = new ArrayList(); でインスタンスを生成し、

Addメソッド:インスタンス.Add(格納するデータ);

Countプロパティ:int 変数 = インスタンス名.Count;

f:id:covory10101101276:20170526083155p:plain

f:id:covory10101101276:20170526083207p:plain

Addメソッドでarという名前のArraListクラスに数字を入れていき、ar.Countで要素の数を取得して平均値を出し表示するというものです。これも少し穴があり、入力画面で数字以外を入力するとスローされてしまいます。今度はそこらへんのケアの仕方も書いていきたいと思います。以上でArrayListクラスの説明を終わります。

コンストラクタとデストラクタ

みなさんこんばんは

給料日を迎えて少しウキウキしているブルーノです。しかしお金を貯めても使うのがもったいなくて結局ご飯くらいしか高いものを買えない貧乏性なのです(笑)さて今回は少し特殊なコンストラクタとデストラクタというメソッドについてやっていきます。

 

コンストラクタとは?

コンストラクタとは、インスタンスフィールドの初期値を設定したり、そのほかのものの初期設定をするためのものです。全てのクラスはコンストラクタ(constructor)というメソッドを持っています。ん?今までそんなメソッド定義した覚えないぞ?どうやら自分でコンストラクタを書かない場合、引数を取らないコンストラクタが自動で作成されているそうです。この自動で作成されているコンストラクタをデフォルトコンストラクタと言います。コンストラクタには以下の特徴があります。

・戻り値はなし(voidという意味ではない)

・クラスと同じ名前になる

・パラメータ(引数)を持つことができる(自分で書く場合は)

オーバーロードができる

・オブジェクトが生成されると同時に勝手に呼び出される

 4番目の中二感溢れるかっこいい名前のは後で書きます。

単純な例を書いてインスタンスフィールドの初期設定をしてみます

f:id:covory10101101276:20170525000519p:plain

f:id:covory10101101276:20170525000529p:plain

24行目でshowxメソッドしか呼び出していないのに実行時にコンストラクタ部分が呼び出されていますね。これは23行目でオブジェクトを生成した時に自動でコンストラクタが呼び出され、xに10を代入しその旨を伝えたからなのです。このようにクラス内で生成した変数の初期設定をするのに主に使われるようです。では次に先ほどでたオーバーロードについて説明します。

 

オーバーロードとは?

とってもかっこいいですよね。オーバーロードオーバーロードとは、その引数のデータ型や数が違う同名のメソッドを定義することです。ん?どういうこと?ちょっと言葉じゃ難しいですね。実際に作ってみます。

f:id:covory10101101276:20170525230312p:plain

f:id:covory10101101276:20170525230318p:plain

f:id:covory10101101276:20170525230323p:plain

19, 27, 35行目において同じ名前のコンストラクタを3つ定義しています。これらの違いは引数の組み合わせで、渡す引数によってどのコンストラクタが呼び出されるかが変わるわけです。この引数とメソッドの名前の組み合わせをシグニチャと呼びます

ちなみに13,14行目の〇〇◯.ToStringとはその前のデータを文字列(string型)に変換するメソッドです。

このように同じ名前のメソッドを多重に定義することをオーバーロードと言います。そして最後にデストラクタについて説明します。

 

デストラクタとは?

new演算子の役割はオブジェクトを生成することだと前回説明しました。オブジェクトを生成するにはメモリ容量の空きが必要です。C#では、不要になったオブジェクトのメモリ容量を自動的に解放する機能がついています。この機能をガベージコレクションというのですが、ガベージコレクションが行われる前にデストラクタというメソッドが実行されます。これはコンストラクタと同じように定義しなければデフォルトコンストラクタが自動で実行されます。メソッドではありますが他の普通のものに比べてパラメータリスト(引数)はありませんし戻り値もありません。普通の言語では生成したオブジェクトの後始末をこのデストラクタで色々書くようですがC#にはガベージコレクションがあるのであまり使われることはありません。短い説明になってしまいましたがこんな感じです。

 

いかがでしたでしょうか。インスタンス変数を初期化する目的で主に使われるコンストラクタ、そして呼び出し元が渡す引数によって初期設定を変更できるオーバーロードについて今回はやりました。だんだん難しくなってきました。外では雨続きで楽しみのテニスもできない分こっちに専念したいと思います。

 

【お絵かき】初デジタル!【遊戯王?】

f:id:covory10101101276:20170525205700p:plain

サークルの先輩に進められて勢いでintuos drawを買ってみました。そして早速初デジタルに取り組んでみたのですが絵も素人ながらデジタルなんてやったこともないので見るに耐えない第一号作品ができました!なんかかっこいいポーズが思い浮かばなかったので独特なポーズに定評のある遊戯王スタイルで書いてみました!この方は本当に思いつきだけで生まれてきました。飽きないように続けていけたらいいなーと思います笑

【お絵描き】ソラ、キングダムハーツ

f:id:covory10101101276:20170525055925j:image

キングダムハーツFinal Mixのタイトル画面のソラです。サークルの先輩にアタリというものを教わったので書いてみました。でもパーツをよく見ると勝手に補完してる部分が多いんですよね。ちゃんと本物に似せないと笑

キングダムハーツを最初にプレイしたのは中1か2の時で最初のはbbsでした。最初にbbsをやったためストーリーは分かんない演出が多々ありましたが世界観とアクションの多彩さに感動して一気に3人分やり込みました笑 その後すぐに友達に1と2を借りてコレもやり込みました。2の方がスピーディーでカッコよくて派手さもあるんですがゲーム全体の雰囲気は1の方がディズニーっぽくて好きですね。もちろん2や358/2のスクエニらしいスタイリッシュな雰囲気も大好きです笑 キングダムハーツ3が発表されてからもうずいぶん経ちますが未だに楽しみで仕方ありません。2.8も1.5+2.5も買ったし、ブラウザ版のxもストーリーを最後まで見ましたので予習はバッチリです👍

早くでてくれえー😭😭

メソッドについて

みなさんこんにちは

評判を聞きつけてPS4FFX,X-2を買ってやってみたところあまりのハマりっぷりに時間を取られてしまうブルーノです。ティーダの心中を考えると色々切なかった....僕はFFはシリーズ通して半分くらいしかやったことのないにわかですがやっぱりターン制だと落ち着いてなおかつじっくり考えられるので楽しいです。最近だとバイオハザード7の「21」にも通ずる点がありました。さて今回は、クラスの中身の機能の部分、メソッドについてまとめていきます。

 

メソッドとは?

メソッド(method)は英語で「方法」とか「方式」、「道筋」なんて意味がありますが、プログラミングではまさしくクラスがどう動くかについてを記述するものがメソッドになります。メソッドは次のように定義します。

アクセス修飾子 復帰型 メソッド名(パラメータリスト)

例)public void SimpleMethod(int x, int y);

 

今回見覚えがないのは復帰型パラメータリストですね。

復帰型:メソッドが返すデータの型(種類)です。中で加工したものがどんなデータで出てくるかを表します。ちなみに出てくるデータのことを戻り値と言います。データを返さない場合は例のように void を指定します。

パラメータリスト:メソッドを呼び出す(使う)際のメソッドへ送る変数をここに記述します。この変数をパラメータ、もしくは引数(ひきすう)と言います。例ではどうやら int x と y がどこか別のクラスかメソッドから送られてこのメソッドに代入されるようですね。

 実際にメソッドを定義したプログラムを作ってみます

f:id:covory10101101276:20170524195602p:plain

f:id:covory10101101276:20170524195611p:plain

5行目のAdd(足し算)メソッドで引数xとyを足すことを定義して、それを変数zに代入しています。この最後のreturn文がメソッドの返す値になります。そして17行目、Mainメソッド内でBruno009クラスを生成し、19行目では a.Add(200, 300) でAddメソッドに200と300を渡して加工しています。今までは「クラス.インスタンス」だったのがインスタンス.メソッド」になっていますね。ややこしいのでまたまとめておきます。

今回の例でのそれぞれの用語のポジション

クラス:Bruno009, Bruno010

インスタンス:a (17行目でBruno009クラスのインスタンスaが作られた)

メソッド:Add (中で足し算を定義している)

 

こまめに用語の整理をしておかないと私はあまりよくできた頭ではないので...

 

いかがでしたでしょうか。だんだん複雑になってきたのでちゃんと整理しながら進めていきたいと思います。うーん。やっぱりプログラミング楽しいなあ

クラスとは

みなさんこんにちは

ナダルのフォームは他の男子プロと比べても独特で力強くてかっこいいですよね。技のフェデラー、力のナダルみたいで見ていて惚れ惚れしてしまいます。さて今回は、C#言語のもっとも大切だというクラスについてやっていきます。

 

クラスとは?

我々が知るクラスという名前はせいぜい学校のクラスくらいですよね。もしくはレベルみたいな意味合いの”最強クラス”とかそこらへんですね。C#言語におけるクラスとは、色々な説明を照らし合わせると「設計図」とか「レシピ」のような意味合いで使われているようです。そしてそのレシピを元に実際に作られたものを「オブジェクト」もしくは「インスタンス」と言います。

今までは簡単にMainメソッドのみのクラスを定義してきました。

f:id:covory10101101276:20170524095715p:plain

こんな具合に。このpublic static void Main()の中だけでやってきましたね。これはMainメソッドを含むBruno008クラスを定義していたわけです。「定義する」とは「中に記述する」ことです。

メソッドのようなクラスを構成するもののことを「メンバ(member)」と言います。メンバはメソッドのように機能を記述するものデータを記述するものの2つに大別されます。データを記述するものを「クラス変数(class variable)」と言います。もっとも単純なクラス変数は「インスタンスフィールド」と呼ばれます。次のように宣言します。

アクセス修飾子 データ型 変数名;

例)public int ScoreOfTest;

 

アクセス修飾子とはそのメンバへのアクセス制限です。基本的な2つを紹介しておきます。

private修飾子....(私的な)という意味で、そのクラスのみからしかアクセスできないようにします

public修飾子.....(公的な)という意味で、どこからでもアクセスできるようにします(つまり無制限)

 ちなみにこの修飾子を省略した場合はprivateとみなされます。

インスタンスフィールドしか持たないクラスは次のように作ります。

class クラス名

{

     アクセス修飾子 データ型 インスタンスフィールド名1;

     アクセス修飾子 データ型 インスタンスフィールド名2;

     ......;

}

例)

class Bruno

{

     public int myage;

     public string myname;

     public double myweight;

}

 

publicなインスタンスフィールドを3つもつBrunoクラスを定義してみました。これだけでは設計図だけなので作られてはいません。生成するには配列などの時のようにnew演算子を使います。

クラス名 インスタンス名;

インスタンス名 = new クラス名();

例)

Bruno b;

b = new Bruno();

 

なんかすごいややこしいですね。例によって宣言と生成を同時に行ってみましょう。

Bruno b = new Bruno();

メンバにアクセスするには大きい単位から順に . (ドット)を使って書いていきます。

インスタンス名.メンバ

例)

b.myage

 では簡単なクラスを作ってそのインスタンス変数に代入するプログラムを組んでみます。

f:id:covory10101101276:20170524103459p:plain

f:id:covory10101101276:20170524103509p:plain

Bruno008 クラスで定義されている public なインスタンス x に Bruno009 のMainメソッドが生成を行ってから10を代入して、それを映し出しています。12行目で新しくオブジェクトを生成していますね。

いかがでしたでしょうか。とりあえず今回はクラスと簡単なインスタンスフィールドの生成をまとめてみました。次回は実際の動き(機能)を定めるメソッドについてまとめていきたいと思います。