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

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

クラスとは

みなさんこんにちは

ナダルのフォームは他の男子プロと比べても独特で力強くてかっこいいですよね。技のフェデラー、力のナダルみたいで見ていて惚れ惚れしてしまいます。さて今回は、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行目で新しくオブジェクトを生成していますね。

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

1次元配列のソート(並び替え)

みなさんこんばんは

遊戯王デザインのハイカットブーツが結構どストライクで買おうかどうかとても悩んでいるブルーノです。デュエルリンクスの方もちょこちょこやっているのですが面白くて懐かしくて私は大好きですね。今回は1次元配列のソートの仕方についてやっていこうと思います。

 

ソートとは?

ソート(Sort = 並び替え)の意味はさすがにわかると思いますが配列において並び替えを行いたい場合はArrayクラスのSortメソッド、もしくはReverseメソッドを使うとやりやすいです。ちなみにArrayは英語で「列」という意味ですね。これは実際にプログラムを組んで見れば一目瞭然だと思います。

f:id:covory10101101276:20170523214919p:plain

f:id:covory10101101276:20170523214927p:plain

ガイアメモリを並び替えてみました。ではこれが日本語だったりするとどうなるでしょうか?

f:id:covory10101101276:20170523215531p:plain

こんな風になるんですねー。

 

いかがでしたでしょうか。入力された内容を配列に入れてそれを整理する場合などに役立てていきましょう。

ジャグ配列

みなさんこんばんは

気づいたらハンターハンターの記事ばかり眺めて一日が終わってしまっているブルーノです。冨樫先生の作品は分かりやすい頭脳戦って感じで私は大好きです。今回はジャグ配列という特殊な配列についてやっていきたいと思います。

 

ジャグ配列とは?

前回、前々回と配列について扱ってきました。そして中でも前回の2次元配列は2行の配列ということを学びましたが、宣言の仕方から少し疑問に思うことはありませんでしたか?

もし要素数がどの行も同じならば2次元でも良いですが、例えば1クラスの人数は学年を通して全クラス同じとは限りません。実際私の小学校6年の時のクラスは30人でしたがそれ以外のクラスは31人でした。その場合、多次元配列だとうまく宣言できませんね。そこで今回のジャグ配列が使えます。この配列は行ごとに要素数を指定できるのです。以下のように宣言します。

ジャグ配列の宣言の仕方

データ型 配列名;

例)string MyClass;

 

そして次に2次元目をnew演算子を使って生成します。

Myclass = new string[2] ;

ここを[3]にすれば3次元目まで生成されます。

また例によって宣言と要素数を同時に宣言しちゃいましょう

string MyClass = new string[2] ;

そして2行まで作ったらそれぞれの配列の要素を生成します

MyClass[0] = new string[30];

MyClass[1] = new string[31];

 

これで要素数30の配列と31の配列を含む2次元配列MyClassができました。なんだか多次元をいちいち宣言するよりもこちらの方が柔軟でいい気がしますね。アクセスの仕方はMyclass[1次元目] [2次元目]のようにアクセスします。さすがに30人分考えるわけには行かないので今回は組むのをやめておきます。

 

いかがでしたでしょうか。実際これだけあれば普通の多次元配列はいらないのでは?と思いました。しかし、ある以上は何か必要性があとで出てくるはずです。もしくは何か知ってる方がこれをみたら是非指摘してください。

2次元配列について

みなさんこんにちは

コーラが大好きで家に1.5Lコーラを3、4本は常備しているブルーノです。今回は前回の配列の進化バージョンの2次元配列をやっていきたいと思います。

 

2次元配列とは?

前回、配列は同じカテゴリをまとめておくものだと説明しました。しかしときには2種類の添え字を使って管理すると便利な場合があります。例えば、1学年2クラスの生徒を出席番号順に並べる場合は一つの配列で全学年の生徒を羅列して別々の番号で保存するより、各クラスごとに保存したいですよね?この例があっているかは微妙なところですが、今回はそういう風に理解していくことにします。まずは書き方からやっていきます。

2次元配列の宣言の仕方

 

データ型[,] 配列名;

例)string[,] MyGrade;

 

 

これでMyGradeという名前の2次元配列ができました。普通の配列と違うところは [ ] の間にカンマ , が入っていることですね。宣言と同時に要素も生成したい場合は配列のように以下のようにします。

データ型[,] 配列名 = new データ型[要素数1, 要素数2];

例)string[,] MyGrade = new string[2, 5];

 

これで2×5の2次元配列ができました。つまり要素数は合計で10個ですね。しかし、配列の時のようにこれだけでは使えません。中に値を設定する、つまり初期化ですね。

ここで色々用語が紛らわしいので一旦整理しておくことにします。自分でもなかなか複雑で覚えづらいので....

配列の宣言 = これから使いますよという宣言(結局唱えただけで何も作っていない)

要素の生成 = 使う配列の中身の数の指定(その配列に何個の入れ物を用意するか)

初期化 = 中身の最初の設定(中に何を入れるかを指定する)

 初期化は配列の時と同じようにいきなり羅列してしまって構いません。

初期化の仕方

MyGradeの例でいうと

string[,] MyGrade = {

{ [0,0の初期値], [0,1の初期値], [0,2の初期値], [0,3の初期値], [0,4の初期値] },

{ [1,0の初期値], [1,1の初期値], [1,2の初期値], [1,3の初期値], [1,4の初期値] }

}

string[,] MyGrade = {

{ 亜位 上男, 柿 久華子, 佐子 周世男, 館 伝手子, 菜二 抜寝男 },

{ 葉火 府経子, 間未 武目男, 屋井 湯絵子, 羅理 留列子, 和井 音 }

}

 

のようになります(50音が10列でよかった...)。括弧の関係が見辛いので改行してみましたが無理にこの形にしなくても構わないです。要素数にアクセスするには以下のようにします

配列名[添え字1, 添え字2]

例)MyGrade[1,3]

 

この例だと羅理 留列子さんにアクセスしますね。では少し長くなりますが、2クラスの生徒の名前にアクセスするようなプログラムを組んでみます。

f:id:covory10101101276:20170523202030p:plain

f:id:covory10101101276:20170523202039p:plain

多分無駄が多いプログラムだと思います。欠点もあって出席番号の質問のときに整数以外を入力すると止まってしまいます。これを改善するにはまた別の方法を使わなければならないのですが今回は簡略化するためにこのようにしました。とにかく!これで2ックラスの生徒の管理ができるようになりましたね。ようは配列の簡単な派生のようなものですね。2次元があるということは3次元も4次元も永久にあるということです。しかしこのまとめでは簡略化するために使用頻度が高い2次元配列までにしておきます。多次元配列も今回の感じは変わらないようです。

 

 

配列について

みなさんこんにちは😃

最近お絵描きにハマりはじめたブルーノです。ヒマな時にあげて記事数を稼ぎたいと思います笑

 

配列とは?

配列という単語、あまり馴染みはありませんね🤔私はなんかの並びのこと?くらいにしか認識がありませんでした。ああジャックスパロウのことか!ってそれはパイレーツやがな!!☠️

茶番は置いといて配列というのはプログラミングでは複数の関連する項目をまとめておける箱の様なものです。変数の変数??みたいな?

配列の宣言の仕方

データ型 配列名;

 

例) string Kudamono;

この例でKudamonoという配列を宣言しました。宣言しただけではまだ配列は使えません。次のように配列に幾つの要素を入れるかを指定する必要があります。

配列名 = new データ型[要素数];

 

例) Kudamono = new string[5];

これで5つのstring型の要素を持つKudamonoという配列が生成されました。上の二つの流れは一度に行うこともできます。下のようになります。

データ型 配列名 = new データ型[要素数];

 

例) string Kudamono = new string[5];

宣言と同時に初期化(配列に初期値を設定すること)するには以下のようにします。果物という名で作られたカテゴリに入れるのはやはり果物ですよね。

データ型 配列名 = { 初期値1, 初期値2, ... };

例)string Kudamono = { Apple, Banana, Orange, Grape, ...};

 

配列の場合の括弧は普通の ( ) ではなく { } なんですね。配列の要素にアクセスするには次のようにします。

配列名[添え字]

Kudamono[2]

 

これで配列Kudamonoの3番目のOrangeにアクセスできます。あれ、2番目はバナナじゃないの?って思いますよね?実は添え字は0から始まるので0から要素の数−1までの番号がそれぞれ振られるのです。この場合はAppleがKudamono[0]になるわけですね。

C#が他の言語と違うところはこの配列がオブジェクトであるため、プロパティが使えるというところらしいです!!何言ってるかわかりませんね。僕もあんまりわかりません。とりあえず、後々わかったときに便利になるようです。

最後に今回の配列の使い方の例を載せます。同じカテゴリの値を名前でまとめて置けるのが配列なんですね。

f:id:covory10101101276:20170522172228p:plain

f:id:covory10101101276:20170522172234p:plain

これが基本的な配列の使い方になります。ゲームの所持品のリストとかをこの配列を使って作ってるそうですね。他に習うことと組み合わせて色々応用できそうなので試してみたいと思います。

 

 

 

制御文(goto, break & continue)

みなさんお久しぶりです🌞

中々更新できない日々が続いております... が、こうしてはいられません。文系の私がプログラミングを習得するには1日たりとも無駄にはできませんからね😡 今回はジャンプ文についてやっていきます。

 

goto文

ジャンプ文とはその名の通り文を飛ばして前後の特定の位置にジャンプすることができる文です。goto文は任意の位置に制御を移動させられます。しかし多くのプログラマはコードが見にくくなってしまうためこのgoto文は極力使わない様にしているそうです。確かに使わなくてもあまり困らなそうですもんね。一応知識として学んでおきましょう💪

goto文の使い方

 

goto ラベル名;

....

....

ラベル名:

~~~

~~~

(goto ラベル名;)とすることでそのラベル名の文までジャンプします。この場合は上の(....)の部分たちが飛ばされ、(ラベル名: )の下の(~~~)が実行されます。

f:id:covory10101101276:20170515115857p:image

f:id:covory10101101276:20170515115906p:image

9行目の文は表示されていませんね。成功っぽいです😇

 

break, continue文

残りのジャンプ文はこの2つなのですがbreak文についてはもう以前やりましたね。制御文内に入れることでその文を抜けることができます。continue文はbreak文とは違い、ループ文の中に挿入するとループの最初に戻ることができます。具体的にどうなるか、文を作って見ましょう

f:id:covory10101101276:20170517103342p:image

f:id:covory10101101276:20170517103411p:image

100までの整数で3の倍数もしくは3のつく数のみを表示するプログラムを組んでみました。これでナベアツのマネができます(かなり古い)。12,13行目ではもしどれにも当てはまらない場合ループの頭に戻る様になっています。

 

いかがでしたでしょうか。最後は条件選択、繰り返し、ジャンプ文全てを使ってみました。これくらいなら意識せずに使えそうですね!

 

 

僕は飲みが大好きで昨日も夜遅くまで飲んでいたせいで投稿が朝になってしまいました....

息抜きに酒を飲むのは忙しい毎日に本当に沁みますよね。 大学の課題が多くそれとは別にプログラミングの勉強をしているのですが大学よりもこちらの方が楽しいんですよね^_^; こっちの方に進路変えた方が良いのかなあ...

 

制御文(for, while)

みなさんこんにちは🌞

スマホからでも投稿できることを知ってやってみてますがスゴくペースが遅いブルーノです。前回に引き続き制御文をやっていきたいと思います。今回は繰り返し文という種類についてです。

ちょっとずつでも投稿していかねば....

 

for 文

 for文は繰り返し同じことを実行したいときに使われます。英語だと「for three years(三年間)」みたいに「〜の間、期間」という意味で使われますね。これでイメージがあっているかはわかりませんが、行うこととその期間を決めることでその間繰り返すという命令ができます。形としては下のようになります。

for (初期化子; 条件式; 反復子;) {

文a;

文b;

....;

}

色々用語が出てきたので説明します。

まず初期化子についてですが最初の値という意味です。つまり最低一つは事前に変数を宣言しておいて、この初期化子でそれに始めの値を代入します。ループによってこの値が変動します。 (ただし、この欄で変数を宣言することもできます)

条件式は前回もやりましたがforループをし続ける条件の式です。この式が真である限りループし続けます。つまり、中の文か反復子でこの条件式がいつか偽になるようにしなければループを抜け出せません。

反復子は、中の文を実行した後に実行され、初期化子の値を変動します。これによってどうにか初期化子の値を条件式の偽になるように変動することでループを抜け出します

説明だけではわかりにくいので例を載せておきます。

f:id:covory10101101276:20170515155955p:plain

f:id:covory10101101276:20170515160006p:plain

こんな感じになります。for文はプログラムを組む上で基本的かつ応用性が高いので使いこなせるとかっこ良さげですね。

 

while文

while文はfor文と違い条件式しかありません。この条件式はbool型でなければなりません。形は以下のようになります。

While文の作り方

While ( 条件式 ) {

~~~

}

 

例をあげるとこうなります

f:id:covory10101101276:20170515162412p:plain

f:id:covory10101101276:20170515162417p:plain

 

do while文

ループ内の文は条件式の中が真の時のみ実行されますが最低1度は絶対実行してほしい!と言う時はdo while文を使います。この文は条件式が偽の場合でも一度実行されます。形は次の様になります。

do while文の書き方

do {

     文1;

     文2;

     .....;

}

while (条件式);

whileの後の条件式が偽であってもdo { }は一度実行されます。

 

以上になります。これらが繰り返し文と呼ばれます。頭がぐるぐるしそうですね笑 僕は数学が苦手だったのでこれから先は更に苦労しそうです....