次回予告:p.66「3.13 列挙型」から 講義メモ:memo20250525.txt
for trainees of Hirano's class only
次回予告:p.66「3.13 列挙型」から 講義メモ:memo20250525.txt
p.62 dynamic型 ・C#バージョン4.0以降において、型が未確定の変数を定義可能になった。 ・この場合の型がdynamic型で、var型の上位概念に当たる。 ・dynamic型の変数は代入によって型が決まるので、便利だが実行効率はvar型より低くなる懸念がある ・定義済のdynamic型変数に、異なる型の値を代入すると型を変更できる(varとは異なりエラーにならない) ・ただし、内部的に、Microsoft.CSharp.RuntimeBinder.CSharpArgumentInfo.Createを用いるので、 プロジェクトに下記の参照指定が必要 ⇒ Microsoft.CSharp ・手順 ①ソリューションエクスプローラで「参照」を右クリックし「参照の追加」 ②「Microsoft.CSharp」のチェックをオンにして「OK」 ・なお、var型と同様に、初期化によって型を決めることもできる アレンジ演習:p.63 dynamic01.cs ・「z = 1.25;」の前にz.GetType()を実行するとどうなるか確認しよう ・後で、x,y,zに別の型の値を代入できるかどうか確認しよう ・var型、dynamic型の定数が定義可能か確認しよう 作成例 //アレンジ演習:p.63 dynamic01.cs using System; class Dynamic01 { public static void Main() { dynamic x = 10, y = "abc", z; //この時点でxはInt32、yはString、zは未定 //Console.WriteLine("z —- {0}", z.GetType()); //zは未定なので文法エラーになる z = 1.25; //この時点でzはDouble Console.WriteLine("x —- {0}", x.GetType()); //System.Int32 Console.WriteLine("y —- {0}", y.GetType()); //System.String Console.WriteLine("z —- {0}", z.GetType()); //System.Double //【以下追加】 x = 10; y = 'a'; z = 100M; Console.WriteLine("x —- {0}", x.GetType()); //System.Int32 Console.WriteLine("y —- {0}", y.GetType()); //System.Char Console.WriteLine("z —- {0}", z.GetType()); //System.Decimal //const var c = 10; //var型の定数は不可(文法エラー) //const dynamic d = 10; //dynamic型の定数は不可(文法エラー) const dynamic e = null; //ただし、値がnullであれば可能だが……
・p.57 論理型(つづき)から p.57 論理型(再掲載) ・真理値(真偽値)を扱える型で、1ビット分の記憶容量。 ・真理値(真偽値)は真を意味するtrue、偽を意味するfalseの2値のどちらかになる ・真偽には「正しい、ホント」「間違い、ウソ」という意味はなく「あてはまる」「あてはまらない」が近い。 ・論理型はbool型のみで、trueとfalseは論理リテラル。 ※ C/C++では「整数0で偽、0以外で真を表す」ことが可能だが、C#では禁止なので注意 ・論理型変数はフラグ用に用いられることがある。例: bool tested = false; //テスト済フラグをオフ ・論理型変数はtrueとfalseの2値以外を保持できないので、フラグなどの用途に向く ・なお、Console.Write/WriteLineでbool型変数の値を表示すると先頭が大文字のTrue/Falseとなる ・bool型は.NET型ではSystem.Boolean型になる 提出フォロー:アレンジ演習:p.57 bool01.cs ・bool型変数どうしの加算をするとどうなるか確認しよう ・文法エラーになったらコメントアウトすること ・同じ2項+演算子で「文字列 + bool型変数」の場合も確認しよう 作成例 //アレンジ演習:p.57 bool01.cs using System; class bool01 { public static void Main() { bool a = true; bool b = false; Console.WriteLine("a = {0}, b = {1}", a, b); Console.WriteLine("aは{0}", a.GetType()); Console.WriteLine("aは文字列にすると「{0}」", a.ToString()); Console.WriteLine("bは文字列にすると「{0}」", b.ToString()); //【以下追加】 //Console.WriteLine(a + b); //エラー(bool型どうしの加算は不可) Console.WriteLine("x" + b); //文字列とbool型の連結は可能("xFalse"になる) } } p.57 論理型:GetTypeとToString ・GetTypeの詳細はp.59にて ・bool型の変数に対して「変数.GetType()」とすると、.NET型の文字列”System.Boolean”を含むオブジェクトが返される ・Console.Write/WriteLineは文字列を含むオブジェクトを受け取ると、文字列を表示する ・ToStringの詳細はp.326にて ・bool型の変数に対して「変数.ToString()」とすると、.値がtrueならば文字”True”、falseならば文字”False”が返される ・GetTypeとToStringは論理型専用ではなく、基本的に全ての型において利用可能な仕組み p.58 3.9 リテラル ・リテラル:ソースコードの中に記述された値のこと ・整数リテラル、実数リテラル、文字列リテラル、文字リテラル、論理リテラルがある p.58 3.9 リテラル:整数リテラル ・整数値を表すリテラルで、10進数、8進数、16進数が利用可能 ・10進数の整数リテラル:0から9までの1つ以上の数字列で、先頭は1から9。例:123 ・8進数の整数リテラル:0から7までの1つ以上の数字列で、先頭に0を付ける。。例:0123 ・16進数の整数リテラル:0から9とAからFまでの1つ以上の数字列(小文字可)で、先頭に0xを付ける。例:0x1AF ・サフィックス(接尾語)をつけないとint型扱いになる ・サフィックスLまたはlを末尾につけるとlong型扱いになる(※通常「l」は非推奨) ・サフィックスUまたはuを末尾につけるとuint型扱いになる ・サフィックスULまたはulを末尾につけるとulong型扱いになる ・なお、sbyte、byte、short、ushort型扱いを示すサフィックスはない ・サフィックスをつけない整数リテラルが、int型の範囲である±約21億を超えてもエラーにならない。 ⇒自動的に、uint、long、ulongの順に範囲チェックを行い、最初に該当した型で扱われる 例: 2200000000⇒uint型扱い、-2200000000⇒long型扱い p.58 3.9 リテラル:実数リテラル ・実数値を表すリテラルで、通常表記、指数表記(●E±■)が可能。10進数のみ。 ・サフィックス(接尾語)をつけないとdouble型扱いになる(サフィックスDまたはdを指定可だが、推奨されない場合がある) ・サフィックスFまたはfを末尾につけるとfloat型扱いになる ・サフィックスMまたはmを末尾につけるとdecimal型扱いになる p.58 3.9…
ゲームソフト販売本数ランキング:今週1位は「カプコン ファイティング コレクション2(Switch)」 GO! 「MMORPG運営はユーザーの気持ちがわかるのか」運営Dとユーザーを呼んで答え合わせしてみた。 GO! AI活用ゲーム開発ハッカソン、賞金100万円を獲得した作品は?QwenのAlibaba Cloud主催『Tokyo Game Jam』イベントリポート GO! PlayStationロイヤリティプログラム「PlayStation Stars」2026年11月2日サービス終了。新規メンバー受付はすでに終了 GO! トランプ対策!?テイクツー、年次報告の多様性に関する表記を「思考の多様性」に置き換え―LGBTQ支援で授賞の雇用賞も表記せず GO! 米ニュースメディア連合、Google 『AIモード』は記事の「窃盗そのものだ」と非難 GO!
・「char」の他に読み方で意見が分かれる型があるか気になります。 特にないと思いますが…。 そうそう、intのようなC言語由来の型名を嫌って、Int32などの.NET型名のみを使おうという声があるようです。 それも一理ありますので、テキスト中の一部の記述で混在が観られるのは仕方ないことかもしれません。 ・bool型はどのような状況下で使用するのでしょうか。 「はい/いいえ」「ある/ない」「あてはまる/あてはまらない」等の二択データ全般で活用されます。 よって、例えば、なんらかの処理をメソッドなどで部品化して、うまくできたかどうかの返事にもbool型が使えます。 加えて「等しい/等しくない」などの比較結果を変数に保存したい場合の型として使うこともできます、 なお、bool型の変数は次回以降で説明するif文やwhile文で便利な使い方ができますので、活用場面は多彩です。
次回予告:p.57 論理型(つづき) 講義メモ:memo20250518.txt
p.53 文字型 ・1文字を格納するための型で、C#ではUnicodeによる文字コード(文字を表す番号)が用いられる ・charは「キャラ」または「チャー」と読む(どちらでも良いがチームルールで決める場合もある) ・Unicodeは1文字を2バイト以上で表すが、C#では2バイトと規定しているので、char型は16ビット。 ・char型の変数の初期化は文字リテラルで行うことができる ・書式: char 変数名 = ‘文字’; ・Console.Write/WriteLineは文字型の変数も扱うことが可能 ・文字リテラルでは’\u文字コード’形式で、16進数による文字コードによる文字の指定が可能 ・例えば、’猫’は16進数による文字コードが「732B」なので「char a = ‘\u732B’;」と初期化できる ※文字コードはWindowsに付属の「文字コード表」で確認できる ・なお、’\u文字コード’は、’\x文字コード’にしても良い(\xは16進数を示す) ・文字コードを10進数で指定するには、char型へのキャスト(強制変換:後述)を「(char)」で行え良い 例: char d = (char)12431; //12431は16進数308Fで「わ」の文字コード アレンジ演習:type09.cs ・行数を増やさずに「猫でもわかるC#」と表示するようにしよう ※「C#」は文字コードで指定しなくてOK 作成例 //アレンジ演習:p.55 type09.cs using System; class type09 { public static void Main() { char a = '\u732B'; //猫 char b = '\x3067'; //で char c = 'も'; char d = (char)12431; //わ char e = '\u304B'; //か char f = '\x308B'; //る Console.WriteLine("{0}{1}{2}{3}{4}{5}C#", a, b, c, d, e, f); //【変更】 } } p.55 エスケープ文字 ・制御用のコードを文字として扱う仕組みと、特別な意味をもつ文字を通常文字として扱える仕組みを合わせたものがエスケープ文字 ・エスケープシーケンスともいう ・前に\マークをつけた2文字で1文字分の変数になる ・制御用のコードを文字として扱う仕組みの代表が「\n」(改行)で、これ以外の「\r」「\t」「\b」「\v」「\f」の動作は 処理系などに依存するので、何も動作しないことがある。 ・なお「\0」はヌル(ナル、null)のことで「無」を意味する。 ・特別な意味をもつ文字を通常文字として扱える仕組みには「\\」「\’」「\”」があり「\」「’」「”」を文字として扱える ・エスケープ文字は文字列リテラルの中にいくつでも指定可能。例:”A\nB\nC\n”(1文字ごとに改行) アレンジ演習:p.56 escape01.cs ・エスケープ文字を用いて「Let’s go to “SIDE7” by \1234」と画面に表示しよう 作成例 //アレンジ演習:p.56 escape01.cs using System; class escape01 { public static void…
・p.48「浮動小数点数型」から再開します 提出フォロー:ミニ演習 mini046.cs ・p.46 type02.cs を元にして、下記の仕様のプログラムを作成しよう ①コンソールから整数A、Bを入力 ②AとBの和、差、積、商、平均値を表示する ※商と平均値は小数点以下切り捨てでOK 作成例 //ミニ演習 mini046.cs using System; class mini046 { public static void Main() { Console.Write("整数Aを入力してください—"); //改行しない int a = int.Parse(Console.ReadLine()); //文字列として入力し整数化した値で初期化 Console.Write("整数Bを入力してください—"); //改行しない int b = int.Parse(Console.ReadLine()); //文字列として入力し整数化した値で初期化 Console.WriteLine("A + B = {0}", a + b); //整数化したので計算可 Console.WriteLine("A – B = {0}", a – b); //〃 Console.WriteLine("A * B = {0}", a * b); //〃 Console.WriteLine("A / B = {0}", a / b); //〃(整数商になる) Console.WriteLine("平均は{0}", (a + b) / 2); //〃(〃) } } p.48 浮動小数点数型 ・小数点を持つ値を実数といい、小数点の扱い方に固定小数点方式と浮動小数点方式がある。 ・C#では格納効率が良い浮動小数点方式を採用している ・浮動小数点方式による実数を浮動小数点数という ・実数には誤差がつきものであり、特にコンピュータでは全ての値を2進数で扱うため、10進数で無限小数になる値(1÷7、円周率など)は 2進数でも無限小数であり、10進数の0.1なども2進数では無限小数になってしまう。 ・よって、例えば、実数の1.0は1.00000000001かもしれないし0.9999999999かもしれないとみなされる ・この理由により、C#などでは整数と実数の扱いがまったく異なり、例えば2と2.0は違う扱いになる (ただし、Console.WriteLineなどでの表示では「.0」が省略されることが多い ・C#では浮動小数点数に2種類の精度がある ①単精度:精度が低い代わりに占有するメモリが小さい。floatまたはSingleといい1つ32ビット。 ②倍精度:占有するメモリが大きい代わりに精度が高い。doubleまたはDoubleといい1つ64ビット。 ・通常、処理効率は②の方が良いが、Unityなどの大量の座標を扱うツールでは①の利用が多い。 ※テキストp.48下から3行目の記述は、Unityなどには当てはまらない。使い分けがポイント。 ・なお、C#では桁数が多い実数は「3.402823E+38」のような指数表記で示される。 ・指数表記は実数を「0以上10未満の数値×10の●乗」で表すもので例えば「1.2E+3」は「1200」のこと。 ・よって、float型の最大値は3.402823×10の38乗=340282300000000000000000000000000000000 ・なお、「1.2E-3」は1.2×(1/10の3乗)=0.0012 アレンジ演習:p.49 type04.cs ・float型の変数fpiと、double型の変数dpiを、円周率3.14159265358979323846 で初期化する ※文法エラーになるのでfpiの初期値の末尾にはFをつけること(理由はp.59で後述) ・この2つの値を表示して、有効桁数を確認しよう 作成例 //アレンジ演習: p.49 type04.cs…
ゲームソフト販売本数ランキング:今週1位は「ときめきメモリアル~forever with you~ エモーショナル(Switch)」 GO! データイーストIPは死なず! 権利を保持するジー・モードの担当者にライセンス事業戦略を訊く。GO! コナミ新会社「コナミアーケードゲームス」誕生。代表取締役は西村“DJ YOSHITAKA”宜隆氏―果たしてどんな立ち位置に GO! 新作脱出シューター『Marathon』にてデザイン盗用!?Bungieは元スタッフの関与を認め調査 GO! iOS版『フォートナイト』近日復活と意気込むも…「Appleが審査をブロックしている」Epic Gamesが報告 GO!
・型が多すぎて全部覚えられる自信がありません。とにかくintとstringだけでも覚えておくといいでしょうか。 はい、最初から全部を丸暗記する必要はありません。 それぞれの代表選手である、int、double、bool、char、stringの5つをしっかり理解してください。 ・今使っているテキストをすべてマスターしたら簡単なゲームぐらいなら作れますか? ゲームの種類によりますが、6章までで基礎文法が一通りそろいますので、 プログラムとしては何でも組めるようになります。 グラフィックやサウンドを使うゲームでは、それぞれの知識が必要ですが、テキストRPGなどなら十分でしょう。