今週の話題

販売本数ランキング 今回トップも「スーパーマリオブラザーズ ワンダー(Switch)」GO!
12月17日開催「Indie Developers Conference 2023」チケット販売開始―インディーゲーム開発にまつわる様々なノウハウを共有 GO!
Gaijin社の新たなる試み?11周年迎えた『War Thunder』などで使用される独自のゲームエンジン「DagorEngine」がオープンソースに GO!
日テレグループYouTube MCN「C+」、カプコンとの著作物使用許諾契約書を締結―ゲーム利用のコンテンツ投稿/収益化が可能に GO!

サイバーエージェント通期業績、大幅減益―『ウマ娘』の反動大きく GO!
人間が苦手なステージはAIも苦手―「AAAゲームバランス調整の次元の呪い」セッションレポート【CEDEC2023】GO!
『テラビット』へ集まった批判―サイバーステップ2割超の減収、MSワラントによる調達へ GO!
「あおぎり高校」が誹謗中傷対策委員会を設置…「ぶいすぽっ!」運営との連携で誹謗中傷への対策、抑止、根絶に挑む GO!

前回のコメント

・難しかったけど前回よりは理解できました。

 何よりです。

・値型の使い分けが難しそうだと思った

 基礎コースでは「基本的にintとdouble、他は特殊用途」ですので、
 あまり気にせずに、大づかみで理解してください。

講義メモ 第3章 変数とデータ型

p.37 変数の初期化

・p.23で説明したとおり、変数の宣言と同時に値を代入できる。これを初期化という。
・初期化に用いる値を初期値という
・intは整数用のデータ型、stringは文字列用のデータ型で、変数の大きさや特性を決める。
・なお、データ型はint、stringのようにC#が提供する「組み込み型」と、プログラマが自由に定義できる「ユーザ定義型」がある
・Main()メソッドの「{」から「}」の中で宣言した変数をローカル変数といい、この中でのみ有効。
 ※ プログラマが自由にメソッドの定義を行い、その中で宣言した変数もローカル変数
・ローカル変数は宣言した段階では値は不定であり、これを使おうとすると(通常)エラーになる

p.39 定数

・変数の初期化において、先頭に「const」と付けることで、その変数の値の変更を禁止できる
・プログラマや、プログラムを引き継いだ技術者が誤って書き換えてしまうことを防ぐのが目的
・このような変数を定数といい、値に名前をつけて扱う場合にも用いる
 例: const int tax = 110; //税率は110%
・定数への代入はエラーになる。また、初期化しない宣言のみもエラーになる

ミニ演習 mini039.cs

・p.35 readline01.csをアレンジしよう
・文字列"あなたのお名前は何ですか--- "を、string型の定数に格納して用いるようにしよう

作成例

//ミニ演習 mini039.cs
using System;
class ReadLine01 {
    public static void Main() {
        string name; //文字列型の変数nameの宣言(コンソール入力用)
        const string q = "あなたのお名前は何ですか--- "; //【追加】入力ガイドを定数にする
        Console.Write(q); //入力ガイドなので改行しない(定数の表示)
        name = Console.ReadLine(); //コンソールから入力し変数nameに格納
        Console.WriteLine("あなたのお名前は{0}さんですか",  name); //変数nameの値を表示
    }
}

p.40 値型と参照型

・変数はデータ型によって実際の大きさが決まる。例えば、int型変数や定数は1個32ビットになる。
・このような型を値型という。
・対して、決まらない型もある。例えば、string型は大きさが不定(何文字でもOK)
・このような型を参照型といい、ユーザ定義型は基本的に参照型。
・参照型は変数が指す位置とは別の場所にデータを格納し、場所の情報を変数に格納することが多い

p.41 データ型

・組み込み型には、数値型・文字型(文字列ではない)・論理型がある
・通常、C言語/C++などから引き継いだint、stringなどの型名を用いるが、C#が含まれる.NETフレームワークで定めた
 .NET型名を使うことも多い。特に、コンソールから得られるメッセージには.NET型名が用いられる。
・例: 通常型「int」は、.NET型では「System.Int32」
※ C言語では「実装は処理系依存」とすることが多く、int型の大きさなども処理で異なる

p.43 整数型

・C#などでは整数型の基本はintだが、int型で扱える値の範囲はプラスマイナス21億程度で32ビット
・これより大きな値を扱いたい場合や、小さい値をより狭い領域で扱いたい場合、また、負の数が不用の場合などに合わせて、
 intに加えて7種類の整数型がある
・intより小さい値をより狭い領域で扱いたいための型が、sbyte(8ビット)、short(16ビット)。
・intの範囲を超える整数を扱うための型が、long(64ビット)
 ※ 同じVisual Studioで動作するVC/VC++では、int型とlong型は同じ扱いになっているので注意
・負の数を用いない場合、int⇒uint、short⇒usort、long⇒ulong、sbyte⇒byte とすると、負の数が代入できない変数になり、
 正の数の有効範囲が倍になる
 例: intは約-21億から約+21億。uintは0から約42億の範囲
・各整数型の最大値、最小値は「型名.MaxValue」「型名.MinValue」で得られる。

p.44 Type01.cs

//p.44 Type01.cs
using System;
class Type01 {
    public static void Main() {
        Console.WriteLine("sbyte :{0}~{1}", sbyte.MinValue, sbyte.MaxValue);
        Console.WriteLine("short :{0}~{1}", short.MinValue, short.MaxValue);
        Console.WriteLine("int   :{0}~{1}",   int.MinValue,   int.MaxValue);
        Console.WriteLine("long  :{0}~{1}",  long.MinValue,  long.MaxValue);
        Console.WriteLine(); //改行(行明け)
        Console.WriteLine("byte  :{0}~{1}",  byte.MinValue,  byte.MaxValue);
        Console.WriteLine("ushort:{0}~{1}",ushort.MinValue,ushort.MaxValue);
        Console.WriteLine("uint  :{0}~{1}",  uint.MinValue,  uint.MaxValue);
        Console.WriteLine("ulong :{0}~{1}", ulong.MinValue, ulong.MaxValue);
    }
}

p.45(Parseメソッドについて)

・文字列型変数などの値がそのまま整数に変換できる場合「int.Parse(文字列)」で変換結果が得られる。
 例: string s = "123"; int i = int.Parse(s); //数値123が得られる
 例: string s = Console.ReadLine(); int i = int.Parse(s); //入力を数値化できる(出来ない場合エラー)
・int以外の整数方も指定可能で、例えば「ushort.Parse(文字列)」なども可能
・ただし、変換できないと実行時エラーになるので注意。

p.46 Type02.cs

//p.46 Type02.cs
using System;
class Type02 {
    public static void Main() {
        Console.Write("整数を入力してください--- "); //入力ガイドなので改行しない
        int x = int.Parse(Console.ReadLine()); //コンソールから入力し整数変換し変数xに格納
        Console.WriteLine("今の数字を2倍すると{0}ですね。",  x * 2); //変数xの2倍の値を表示
        Console.Write("あなた年齢を入力してください--- "); //入力ガイドなので改行しない
        ushort age = ushort.Parse(Console.ReadLine()); //コンソールから入力し符号なし短整数に変換し変数ageに格納
        Console.WriteLine("あと{0}年で100歳ですね。",  100 - age); //変数xの2倍の値を表示
    }
}

p.47(メソッドの引数にメソッドを指定する)

・Type02.csの「int x = int.Parse(Console.ReadLine())」を分解すると:
 ① int x; //整数型変数の宣言
 ② string work; //文字列型変数の宣言
 ③ work = Console.ReadLine(); //コンソールから文字列を入力
 ④ x = int.Parse(work); //文字列を整数に変換して代入
・本来であれば一旦、文字列型変数に置く必要があるが、コンソールから文字列を入力するメソッドそのものを、
 整数に変換するメソッドの引数にすることで省略できる
・一般的に、途中で使う作業用の変数(上の例のwork)を用いずにシンプルにすることが望ましいが、分かりづらければ、
 このように分解して考えると良い
・なお、int.Parseメソッドの引数には、文字列や文字列を返す式やメソッドであれば、どんなものも記述できる

p.47(Convertクラスのメソッド)

・C#が提供するConvertクラス(クラスの説明は後述)には、文字列型から.NET型への変換を担うメソッドが型ごとに提供されている
 例: Convert.ToInt32(文字列) //文字列型からint型への変換
 例: Convert.ToUInt16(文字列) //文字列型からushort型への変換

p.47 Type03.cs

//p.47 Type03.cs
using System;
class Type03 {
    public static void Main() {
        Console.Write("整数を入力してください--- "); //入力ガイドなので改行しない
        int x = Convert.ToInt32(Console.ReadLine()); //コンソールから入力し整数変換し変数xに格納
        Console.WriteLine("今の数字を2倍すると{0}ですね。",  x * 2); //変数xの2倍の値を表示
        Console.Write("あなた年齢を入力してください--- "); //入力ガイドなので改行しない
        ushort age = Convert.ToUInt16(Console.ReadLine()); //コンソールから入力し符号なし短整数に変換し変数ageに格納
        Console.WriteLine("あと{0}年で100歳ですね。",  100 - age); //変数xの2倍の値を表示
    }
}

p.48 浮動小数点数型

・実数(小数点がある値)の表現方法として、C#では浮動小数点数型を採用している
・浮動小数点数型には単精度のfloatと、倍制度のdoubleがあり、基本的はdoubleが優先される
・単精度のfloatは1個32ビットである代わりに、有効桁数が少なく誤差が出やすい
 ※ Unityでは扱う実数値の数が多くなりやすいので、精度より容量を考えてfloat型を用いることが多い
・倍精度のdoubleは1個64ビットである代わりに、有効桁数が多く誤差が(floatより)少ない
・それぞれの最大値、最小値は、.MaxValue、.MinValueで得られる
・これをConsole.WriteLineなどで表示すると、指数表記が用いられる
・指数表記は実数を「●×10の■乗」で表す方式で、表記は「●E■」となる。0が長く並ぶ値をシンプルに表現出来る
 例: 123456000000 ⇒ 1.23456×10の12乗 ⇒ 1.23456E13
 例: 0.0000123456 ⇒ 1.23456×10の-5乗 ⇒ 1.23456E-5

p.49 Type04.cs

//p.49 Type04.cs
using System;
class Type04 {
    public static void Main() {
        Console.WriteLine("float :{0}~{1}", float.MinValue, float.MaxValue);
        Console.WriteLine("double:{0}~{1}",double.MinValue,double.MaxValue);
    }
}

実行結果:
float :-3.402823E+38~3.402823E+38
double:-1.79769313486232E+308~1.79769313486232E+308

p.49 Math.Powメソッド

・C#が提供するMathクラスには、べき乗を返すPowメソッドがあるが、このメソッドの2引数と結果(戻り値)の型はdouble型になっている
・このことを「double Math.Pow(double, double)」というように表記する
・例:Math.Pow(2.0, 3.0) ⇒ 8.0が得られる

p.50 type05.cs 解説

・肥満度の指標であるBMI=体重(kg)÷(身長(m)の2乗)を求めるプログラム
・身長がcm単位ではなくm単位なことに注意

p.50 Type05.cs

//p.50 Type05.cs
using System;
class Type05 {
    public static void Main() {
        Console.Write("身長(m)--- "); //入力ガイドなので改行しない
        double bl = double.Parse(Console.ReadLine()); //コンソールから入力し実数変換し変数blに格納
        Console.Write("体重(kg)--- "); //入力ガイドなので改行しない
        double bw = double.Parse(Console.ReadLine()); //コンソールから入力し実数変換し変数bwに格納
        //体重÷身長の2乗を、小数点以下1桁まで表示
        Console.WriteLine("BMI = {0:##.#}",  bw / Math.Pow(bl, 2.0));
    }
}

アレンジ演習:p.50 Type05.cs

・メートルではなくセンチメートルで身長を入力するように改良しよう
・ヒント: BMI=体重(kg)÷((身長(cm)÷100.0)の2乗)

作成例

//アレンジ演習:p.50 Type05.cs
using System;
class Type05 {
    public static void Main() {
        Console.Write("身長(cm)--- "); //入力ガイドなので改行しない
        double bl = double.Parse(Console.ReadLine()); //コンソールから入力し実数変換し変数blに格納
        Console.Write("体重(kg)--- "); //入力ガイドなので改行しない
        double bw = double.Parse(Console.ReadLine()); //コンソールから入力し実数変換し変数bwに格納
        //体重÷m単位にした身長の2乗を、小数点以下1桁まで表示
        Console.WriteLine("BMI = {0:##.#}",  bw / Math.Pow(bl / 100.0, 2.0));
    }
}

p.50 decimal型

・decimalは10進数のことで、実数を内部的2進数で扱うfloat/double型に比べて、誤差が出づらい
・ただし、1個に128ビット用いるのでメモリの消費量に注意
・初期化に用いる実数値も同じ扱いをする必要があるので、末尾にMまたはmを付けて示す必要がある
 例: decimal d = 3.14M; //decimal型扱いの値で、decimal型の変数を初期化
・扱える値の範囲はdecimal.MinValueからdecimal.MaxValueで、float型より狭いが、long型より広い
・符号なしdecimal型は無い

p.51 Type06.cs

//p.51 Type06.cs
using System;
class Type06 {
    public static void Main() {
        Console.WriteLine("decimal:{0}~{1}",decimal.MinValue,decimal.MaxValue);
        //【以下参考】
        float   f = 3.141592653589793238264643F;
        double  d = 3.141592653589793238264643;
        decimal m = 3.141592653589793238264643M;
        Console.WriteLine("f :{0}", f); //f :3.141593
        Console.WriteLine("d :{0}", d); //d :3.14159265358979
        Console.WriteLine("m :{0}", m); //m :3.141592653589793238264643
    }
}

提出:アレンジ演習:p.50 Type05.cs「メートルではなくセンチメートルで身長を入力」

講義メモ

・p.36「練習問題」を済ませて、第3章に進みます

p.35 ユーザの入力を知る【再掲載】

・ここまでのプログラムは実行すると常に同じ結果を表示したが、実行してからコンソールから文字列を渡すことができる
・この処理には文字列型の変数が必要
・宣言書式: string 変数名;
・そして「変数名 = Console.ReadLine();」とすると、コンソールから文字列を渡すことができる
・しかし、これだけでは分かりづらいので、その直前にConsole.Writeで「何を入力して欲しいか」を表示すると良い
例:
string n:
Console.Write("好きなキャラは:");
n = Console.ReadLine();
・文字列型の変数はそのまま表示しても良いし、連結に用いることもできる

p.35 readline01.cs

//p.35 readline01.cs
using System;
class ReadLine01 {
    public static void Main() {
        string name; //文字列型の変数nameの宣言(コンソール入力用)
        Console.Write("あなたのお名前は何ですか--- "); //入力ガイドなので改行しない
        name = Console.ReadLine(); //コンソールから入力し変数nameに格納
        Console.WriteLine("あなたのお名前は{0}さんですか",  name); //変数nameの値を表示
    }
}

p.36 練習問題 仕様

・p.35 readline01.csとほぼ同じだが、入力ガイドは不要。
・また、文字列型の変数の内容を表示するのみでよい

作成例

//p.36 練習問題
using System;
class ReadLine01 {
    public static void Main() {
        string name; //文字列型の変数nameの宣言(コンソール入力用)
        name = Console.ReadLine(); //コンソールから入力し変数nameに格納
        Console.WriteLine(name); //変数nameの値を表示
    }
}

今週の話題

販売本数ランキング 今回トップは「スーパーマリオブラザーズ ワンダー(Switch)」GO!
『スト6』売上本数250万本間近!カプコンが最新の決算発表―『ロックマンエグゼ』コレクションも140万本突破、『モンハンNow』も人気に GO!
GOTYの栄光を手にするのは?「Golden Joystick Awards 2023」最も栄誉ある賞のノミネート作品が発表! GO!
任天堂が“コミュニティ大会”に関するガイドラインを公開…スポンサー禁止や出場、入場料、出場者数の上限などが細かく設定される GO!
最先端のAI技術でゲーム開発/グローバル展開を強力サポート―Keywords StudiosのCEOが語る世界的ソリューションプロバイダの強みとは GO!

チート・海賊版対策を「内製化」し技術という名の「武器」を手に入れた…カプコンがセキュリティへの取り組みを明かす GO!
ドリコムが赤字転落―新規ゲーム不調で未発表タイトルが開発中止へ GO!
過去にはカプコンも情報流出の被害に…ランサムウェア集団「ラグナロッカー」ついに中心メンバー摘発―国際警察機関の共同捜査が実を結ぶ GO!

講義メモ 後半

p.27 WriteLineメソッドとWriteメソッド

・Console.WriteLineメソッドはカッコ内に(引数として)指定された内容を表示して改行する
・改行の必要がなく、次の表示をその後ろからにしたい場合はConsole.Writeメソッドを用いると良い
例:
Console.Write("円周率は");
Console.WriteLine(3.141592653258979); //「円周率は3.141592653258979」と表示して改行
・また、改行だけを行うにはConsole.WriteLine();を用いると良い

p.27 text03.cs

//p.27 text03.cs
using System;
class Text03 {
    public static void Main() {
        Console.Write("あ"); //文字列を表示(改行しない)
        Console.Write("い"); //文字列を表示(改行しない)
        Console.Write("う"); //文字列を表示(改行しない)
        Console.Write("え"); //文字列を表示(改行しない)
        Console.Write("お"); //文字列を表示(改行しない)
        Console.WriteLine(); //改行のみ
    }
}

p.28 フォーマット指定子を使った変数の表示

・連結によって文字列を編集して表示する手法は「+」を連結に用いるために見づらくなる
・そこで、予め値を埋め込む穴を番号付きで指定して、第2引数以降で値や式を記述できる
・これに用いる書式をフォーマット指定子といい、穴は{0},{1},{2},…といくつで指定できる
・例: Console.WriteLine("1 + 2 = {0}", 3); //「1 + 2 = 3」と表示
・例: Console.WriteLine("{0} + {1} = 3", 1, 2); //「1 + 2 = 3」と表示
・例: Console.WriteLine("{0} + {1} = {2}", 10, 20, 10 + 20); //「10 + 20 = 30」と表示
・例: Console.WriteLine("{0}倍速い!", 3); //「3倍速い!」と表示
・穴の番号は必ずゼロからにすること。なお、再利用も可能。
・例: Console.WriteLine("{0}倍速いので{0}倍先に行ける!", 3); //「3倍速いので3倍先に行ける!」と表示
・穴の番号のことを「引数の番号」ともいう

p.28 text04.cs

//p.28 text04.cs
using System;
class Text04 {
    public static void Main() {
        int x = 10;
        Console.WriteLine("x = {0}", x); //「x = 10」を表示
        Console.WriteLine("x = {0}, xの10倍は{1}です", x, x * 10);
        Console.WriteLine("{0}は{1}ですが、{2}は{1}ではありません", "猫", "哺乳類", "トカゲ");
    }
}

p.29 桁数の指定

・フォーマット指定子で引数の番号の後に「,表示桁数」を指定できる。ただしこれは「最低桁数」であり、表示する値がこの桁数を上回ると
指定は無視される(エラーにはならない)
・つまり「表示において確保してほしいスペースの大きさ」を示す
・桁数を下回る場合、前にその数のスペースが挿入される
・例: Console.WriteLine("{0, 5}", 123); //「  123」と前に空白が2個入る
・例: Console.WriteLine("{0, 5}", 123456); //「123456」となり、桁数指定は無視される
・桁数に負の数を指定すると、桁数を下回る場合、後ろにその絶対値の数のスペースが挿入される
・例: Console.WriteLine("{0, -5}", 123); //「123  」と後ろに空白が2個入る

p.30 text05.cs

//p.30 text05.cs
using System;
class Text05 {
    public static void Main() {
        int x = 10, y = 123456789;
        Console.WriteLine("1233456789012345678901234567890"); //30桁のゲージを表示
        Console.WriteLine("{0, 10}", "abc"); //桁数超過なので桁数は無視
        Console.WriteLine("{0, 5}",  "def"); //前に空白が2個入る
        Console.WriteLine("{0, 0}",  "ghi"); //桁数ゼロなので無視
        Console.WriteLine("{0, 10}{1, 10}",  "あ", "い"); //共に前に空白が9個入る
        Console.WriteLine("{0, -10}{1, -10}",  "あ", "い"); //共に後に空白が9個入る
        Console.WriteLine("x = {0, 5}, y = {1, 3}",  x, y); //10の前に空白が3個入る
    }
}

p.30 標準書式指定文字を使った書式の指定

・桁数の指定において、桁数の次に「:標準書式指定文字」を付けることで、予め用意されている書式への変換や編集をしてくれる
・ただ、あまり利用されいないものや仕様が複雑なものもあるので、ここでは抜粋して説明のみとする
① 16進数に変換 :{引数の番号, 桁数:X} 例:123 ⇒ 7B
② 指数形式に変換:{引数の番号, 桁数:E} 例:123.456 ⇒ 1.23456E+002(1.23456×10の2乗の意味)
③ 通貨形式に変換:{引数の番号, 桁数:C} 例:123456 ⇒ \123,456
④ 百分率に変換 :{引数の番号, 桁数:P} 例:0.05 ⇒ 5.00%

p.32 カスタム書式指定文字を使った書式の指定

・桁数を「0」または「#」によるプレースホルダで指定する手法で、小数点の位置と3桁カンマ区切りも指定できる
・ここでは抜粋して説明のみとする
① ゼロサプレス 例:"{0, 7:0000.00}",1.2 ⇒ 0001.20 (前と後ろに0が入る)
② 空白     例:"{0, 7:####.##}",1.2 ⇒    1.2  (前と後ろに空白が入る)
③ カンマ区切り 例:"{0, 7:#,#}, 1234546 ⇒ 123,456(3桁区切りでカンマが入る)

p.35 ユーザの入力を知る

・ここまでのプログラムは実行すると常に同じ結果を表示したが、実行してからコンソールから文字列を渡すことができる
・この処理には文字列型の変数が必要
・宣言書式: string 変数名;
・そして「変数名 = Console.ReadLine();」とすると、コンソールから文字列を渡すことができる
・しかし、これだけでは分かりづらいので、その直前にConsole.Writeで「何を入力して欲しいか」を表示すると良い
例:
string n:
Console.Write("好きなキャラは:");
n = Console.ReadLine();
・文字列型の変数はそのまま表示しても良いし、連結に用いることもできる

提出:p.35 readline01.cs

講義メモ

・p.23「変数を使ってみる(代入とデータ型)」から再開します

提出フォロー:アレンジ演習:p.17 myname01.cs

・Console.WriteLineメソッドはMainの中にいくつでも記述できる
・2つ記述すると2行表示される
・そこで、「私の名前は●●」の下に「またの名を●●」と表示するようにしよう

作成例

//アレンジ演習: myname01.cs
using System;
class MyName01 {
    public static void Main() {
        Console.WriteLine("私の名前はシャア");
        Console.WriteLine("またの名を赤い彗星");
    }
}

p.23 変数を使ってみる(代入とデータ型)

・C#では、整数用であるint型の変数に実数(小数点のある値)は代入できない(エラーになる)
・なお、宣言と同時に値を代入する「初期化」が可能で、誤って何も入っていない変数を使ってしまわないにように、初期化が推奨される
 場合がある
・初期化の書式: データ型 変数名 = 初期値; //宣言と同時に値を代入
 例: int hp = 100; //int型の変数hpを値100で初期化
 ※ 他の変数の値や式の結果で初期化することもできる
・複数の同型の変数を同時に宣言し、その全部または一部を初期化することもできる
 例: int hp = 100, mp; //int型の変数hpを値100で初期化、変数mpは宣言のみ
 例: int hp = 100, mp = hp, level = hp / 10; //int型の変数hpを値100で、mpはhpの値で、levelはその1/10で初期化
・変数名のルール:英大文字小文字、数字、「_」、2バイト文字(漢字)が利用可だが、先頭は数字不可。また、2バイト文字(漢字)や
 先頭の「_」はチームルールによっては推奨されない。
 ※ 他の言語では「-」「@」「$」などが利用可能な場合があり、コンバートでは注意。
・プログラムの文法上、変数名などに使えない単語がキーワード(予約語)で、C#のキーワードはすべて小文字。
・なお、予約語と同じ綴りで大文字にしたものは利用可能だが、チームルールによっては推奨されない。
・また、予約語の前に「@」を付けると変数名に使えるとあるが、推奨されない。

p.25 変数のデータを表示する

・Console.WriteLine(変数名) とすると、変数に格納されている値が表示される
 例: int hp = 100; Console.WriteLine(hp); //「100」と表示
・Console.WriteLine(式) とすると、式の計算結果が表示される
 例: int hp = 100; Console.WriteLine(hp + 20); //「120」と表示
・加算が可能な式で「+」を指定すると加算になるが、どちらかまたは両方が"文字列"だと連結になる
 例: Console.WriteLine(3 + "倍速い"); //「3倍速い」と表示
 例: Console.WriteLine("HPは" + hp + "です"); //「HPは100です」と表示

【演習ガイド】前回USBメモリに格納したC#プロジェクトをVisual Studioで開くには

① Visual Studio起動
②「プロジェクトやソリューションを開く」
③ 保存済のプロジェクトのフォルダ(例:Project1)にある「プロジェクト名.sln」をクリックして「開く」

※画面上に「0個の参照」というCodeLensメッセージが表示されて邪魔に感じたら、下記の手順で非表示にできる
 ①「ツール」「オプション」
 ②「テキストエディタ」「すべての言語」「CodeLens」
 ③「CodeLensを有効にする」のチェックを外して「OK」
※Visual Studioの画面構成を初期状態に戻したい場合①「ウィンドウ」「ウィンドウレイアウトのリセット」「はい」

p.25 text01.cs

//p.25 text01.cs
using System;
class Text01 {
    public static void Main() {
        int a = 10, b = 20, total; //int型の変数a,bを初期化し、cを宣言
        total = a + b; //変数aと変数bの値の和を変数totalに代入(この"+"は加算)
        Console.WriteLine(a + " + " + b + " = " + total); //3変数値と文字列を連結し表示
    }
}

p.26 変数のデータを表示する(式の値を表示)

・計算結果の値を連結することもできる
・この場合は先に計算する必要があるので、式をカッコで囲むこと
・例: 10 + " - " + 3 + " = " + (10 - 3) ⇒ "10 - 3 = 7"となる("+"はすべて連結)

p.26 text02.cs

//p.16 text02.cs
using System;
class Text02 {
    public static void Main() {
        int a = 10, b = 20; //int型の変数a,bを初期化
        Console.WriteLine(a + " + " + b + " = " + (a + b)); //2変数値と式の値を連結し表示
    }
}

アレンジ演習:p.26 text02.cs

・p.26にある通り「a + " + " + b + " = " + a + b」とすると誤った結果になることを確認しよう
・理由は:
 ①「a + " + "」で連結されて「"10 + "」となる
 ②「a + " + " + b」で連結されて「"10 + 20"」となる
 ③「a + " + " + b + " = "」で連結されて「"10 + 20 = "」となる
 ④「a + " + " + b + " = " + a」で連結されて「"10 + 20 = 10"」となる
 ⑤「a + " + " + b + " = " + a + b」で連結されて「"10 + 20 = 1020"」となる

作成例

//アレンジ演習:p.16 text02.cs
using System;
class Text02 {
    public static void Main() {
        int a = 10, b = 20; //int型の変数a,bを初期化
        Console.WriteLine(a + " + " + b + " = " + a + b); //2変数値とaとbの値を連結し表示
    }
}