クラスについて深堀するコーナー のバックアップ差分(No.4)


  • 追加された行はこの色です。
  • 削除された行はこの色です。
&size(24){RPGで覚えるC#の基本構文とオブジェクト指向};
&size(24){ポケモンで覚えるC#の基本構文とオブジェクト指向};
#contents
*はじめに [#a19367a9]
C#の基本的な構文についてポケモンで例えてわかりやすく説明する試みです。あくまで例えであって本家ポケモンの実装を説明するものではありません。
正確ではない情報が含まれます。ある程度プログラミングのわかる人や読解力のある人は公式ドキュメントの参照をお勧めします。
https://learn.microsoft.com/ja-jp/dotnet/csharp/programming-guide/
#br
*クラス [#db82c3d7]
クラスはC#の一番基本的なものです。クラスは「データ」と「アクション」をまとめたデータ構造です。
ポケモンのクラスを作るとすれば、クラスの中にはタイプやレベルなどの「データ」と、技を使う、技を覚えるなどの「アクション」を書けば良いわけです。
#br
試しにポケモンクラスを作ってみます。
#br
クラスを作るには
#geshi(csharp, number){{
class クラスの名前 { クラスの中身 }
}}
のように書きます。
#geshi(csharp, number){{
class Pokemon
{

}
}}
{}のなかは見やすいように改行してあります。何行改行しても処理に変化はありません。Pokemon のあとの{の位置にも決まりはありません。class クラス名 {の順番で書かれていればどんな形でもクラスと認識されます。
{}のなかにポケモンに必要なものを書いていきます。
#br
*変数、コメント [#qacf0a07]
まずはポケモンに共通するデータを考えます。
ポケモンの種類で見れば、タイプ、つかえるわざ
個々のポケモンで見ればレベルなどがありそうです。
#br
データはクラスの中に「変数」として書きます。変数はデータを保存しておく入れ物みたいなものです。「数」とありますが、中身が数とは限りません。
C#で新しい変数を定義するときは、
#geshi(csharp, number){{
型 変数名}}
のようにして書きます。型とは、例えばその変数の中に入るのが文字なのか?数字なのか?ということをあらかじめ決めておくためのものです。
C#では型を決めておかないと変数を定義できません。
#geshi(csharp, number){{
class Pokemon
{
    //レベルを作るよ
    int level;
}
}}
ポケモンにレベルを作ってみました。
//以降は「コメント」といって、プログラムで処理されない部分になります。
これを使ってプログラムにメモを残すことができます。
intは整数型なので、変数「level」には整数の値しか入らなくなります。小数を使いたいときはfloatにします
intのまえに半角スペースが4つありますが、見やすいように入れているだけです。何個入れても処理に変化はありません。
処理が終わったら、どこまでが処理かわかるように;で区切ります。これで次の処理と分けることができます。
ポケモンによってレベルは違うので、まだlevelのなかには何も入れていません。
#fold{{{
コラム:セミコロン;のルール
いやちょっと待てclass Pokemon {}は処理じゃないのかと。
C#ではひとつひとつの処理をステートメントと呼び、ステートメントは、セミコロンで終わるか、1 つのブロック{}で構成されます。
{}のあとには;は要らないことが多いですが、例外もあります。
(かなり語弊があるので正確な情報は↓で確認してください。)
https://learn.microsoft.com/ja-jp/dotnet/csharp/programming-guide/statements-expressions-operators/statements
よくわからなければ、とりあえず;をつけておけば大丈夫です。;;;;;;;と;をたくさん書いてもエラーにはなりません。
}}}
#br
タイプも書き入れます。
#geshi(csharp, number){{
class Pokemon
{
    //レベルを作るよ
    int level;
    //タイプを作るよ
    string type;
}
}}
stringは文字列型です。文字や文章が入ります。
#fold{{{
コラム:セミコロン;のルール
いやちょっと待てclass Pokemon {}は処理じゃないのかと。
C#ではひとつひとつの処理をステートメントと呼び、ステートメントは、セミコロンで終わるか、1 つのブロック{}で構成されます。
{}のあとには;は要らないことが多いですが、例外もあります。
(かなり語弊があるので正確な情報は↓で確認してください。)
https://learn.microsoft.com/ja-jp/dotnet/csharp/programming-guide/statements-expressions-operators/statements
よくわからなければ、とりあえず;をつけておけば大丈夫です。;;;;;;;と;をたくさん書いてもエラーにはなりません。
}}}
#br
*配列 [#r7a5819a]
ここで先に技のクラスを作ってしまいます。
#geshi(csharp, number){{
class Pokemon
{
    //レベルを作るよ
    int level;
    //タイプを作るよ
    string type;
}

class Skill
{
    //技名
    string name;
    //技のタイプ
    string type;
    //威力
    int damage;
}
}}
Pokemonクラスの下に新しくSkillクラスが作られました。
作った技をポケモンが持てるようにPokemonクラスを改良します。
#geshi(csharp, number){{
class Pokemon
{
    //レベルを作るよ
    int level;
    //タイプを作るよ
    string type;
    //技を持つよ Skillは型名, skillが変数名
    Skill skill;
}
}}
自分の作ったクラスもこのように型として使うことができます。
ところで、ポケモンは複数の技を持っています。
技ごとに変数を作っても良いですが、同じ型の変数がいくつも欲しいときは配列が便利です。
配列は
#geshi(csharp, number){{
型名[] 変数名;
}}
のように書きます。
#geshi(csharp, number){{
class Pokemon
{
    //レベルを作るよ
    int level;
    //タイプを作るよ
    string type;
    //複数の技を持つよ
    Skill[] skill;
}
}}
このようにすると、配列変数skillにはSkill型のものをskill1, skill2 ...のように並べて入れることができるようになります。