次回(8/24)予告:p.207「プロパティ」から 講義メモ:memo20250810.txt
for trainees of Hirano's class only
次回(8/24)予告:p.207「プロパティ」から 講義メモ:memo20250810.txt
p.201 引数が可変個のメソッド ・メソッドの引数にparamsキーワードと配列を指定することで、引数が可変個のメソッドになる ・よって、同型の引数をいくつでも指定できる1メソッドが記述できる ・書式: アクセス修飾子 戻り値型 メソッド名(params 配列型[] 仮引数) {…} ・例: public void dispall(params int[] p) {…} ・メソッド内部では仮引数を配列として、各引数はその要素になる ・よって、引数の数は、仮引数.Lengthで得ると良い ・引数が0個でもかまわないが、要素数0の配列になるので、要素を使用すると異常終了する 例: public void dispall(params int[] p) { foreach(var w in p) { //仮引数の配列の全要素について繰返す Console.WriteLine(w); } } アレンジ演習:p.201 params01.cs ・forは前判定繰返しなので、animal.lengthが0の場合、繰返し内容は1度も実行されない。よって、if文は不要なことを確認しよう ・for文をforeach文にしよう ・引数に数値を含むとエラーになることを確認しよう 作成例 //アレンジ演習:p.201 params01.cs using System; class MyClass { public void show(params string[] animal) { //可変個引数 //if (animal.Length == 0) //【削除】 // return; //【削除】 foreach (var w in animal) { Console.WriteLine("{0}さんがいます", w); } } public void show(string animal) { // foreach (var w in animal) { Console.WriteLine("{0}さがいます", w); } } } class params01 { public static void Main() { int[] x = {0,1,2}; MyClass mc = new MyClass(); mc.show(); mc.show("きりん",…
・p.192「refとout:outキーワード」の補足後、p.195「メソッドのオーバーロード」に進みます p.192 refとout:outキーワード ・refキーワードの上位版がoutキーワードで、refの「実引数はなんらかの値が代入されている必要がある」という制限がない ※C#のバージョン7以降では、outキーワードの仕様が強化され、outキーワードで指定する実引数は、 事前の定義が不要になり「out 型 実引数名」とすれば良い。 この実引数は呼出し以降にそのまま利用可能。 参考:配列を渡して最大値と最小値を返すメソッド using System; class MyClass { public void ArrayMaxMin(double[] x, out double max, out double min) { //max,minは参照渡し max = Double.MinValue; min = Double.MaxValue; //仮に最小値・最大値にしておく foreach (var w in x) { //全要素について繰返す max = (max > w) ? max : w; //最大値を更新 min = (min < w) ? min : w; //最小値を更新 } } } class outkeyword01 { public static void Main() { double[] a = {125.3, 16.25, 52.8}; MyClass mc = new MyClass(); mc.ArrayMaxMin(a, out double maxv, out double minv); Console.WriteLine("max = {0}, min = {1}", maxv, minv); } } 提出フォロー:アレンジ演習:p.194 outkeyword01.cs ・変数cの定義を省き、実引数の指定を「out double c」とできることを確認しよう 作成例 //アレンジ演習:p.194 outkeyword01.cs using System;…
ゲームソフト販売本数ランキング:今週1位は「鬼滅の刃 ヒノカミ血風譚2(Switch)」 GO! 釣りゲーに料理シムに…他にもいろんな用途がありそう!Joy-Con 2クランク型はじめとする複数アタッチメントの特許申請情報が公開 GO! AI推論と高速配信の両立でユーザーの「待てない」を解消―Akamaiが打ち出す、AI時代のゲームインフラの新機軸【CEDEC 2025レポート】GO! オンラインゲームの遅延問題に終止符を。―Akamaiが提供する“世界で最も分散したネットワーク”とは?コスト90%削減を実現したDB連携事例も【CEDEC2025レポート】 GO! 「RTA in Japan Summer 2025」が本日8月9日15時より開催!高難度2DACT『Cuphead』から GO! GPT-5はgpt-oss-120b、Claude Opus 4.1とどのくらい違う?―小説執筆とヴァイブ・コーディングで試してみた(CloseBox)GO! ソニーに提訴された『LIGHT OF MOTIRAM』Steamストアページの画像を変更―『Horizon』シリーズとの類似性が目立つものが対象か GO! すべてが文字のみで構成されたテキストADV『文字遊戯』Steam日本語版配信が無期延期に―すれ違うSteam運営との認識 GO!
・以下のエラーメッセージを確認しました。 int z; s.swap(ref x, ref z); 未割り当てのローカル変数‘z’が使用された s.swap(ref x, ref (x + y)); refまたはout値は、割り当て可能な変数でなければなりません s.swap(ref x, ref (200)); refまたはout値は、割り当て可能な変数でなければなりません はい、この通りです。それぞれの意味を理解しておいてください。 ・キーワードの参照により、呼び出し側の引数を入れ替えられたりするとのことですが、refキーワードやoutキーワードなどはどういった場面で使われるのでしょうか。 ref/outキーワードを用いて引数を参照渡しにすることで、 メソッド内で仮引数の値を操作すると、実引数の値に反映します。 よって、本来は最大1つの情報しか返せないメソッドで複数の情報を返すことができます。 また、メソッドへのデータ操作の依頼がわかりやすくなります。 テキストではこのことを利用する一例として、値の入れ替え(swap)を行っていますが、 配列などのデータ構造を渡して最大値と最小値を返すメソッドなどにも便利です。
次回予告:p.192「refとout:outキーワード」の補足後、p.195「メソッドのオーバーロード」に進みます 講義メモ:memo20250803.txt
p.181 メソッドの再帰呼び出し ・C#などのメソッドは内部で自分自身を呼び出すことが可能で、これを再帰(リカージョン)という ・再帰を用いることで、アルゴリズムを単純化できることがある ・なお、再帰を用いる場合は「場合によっては自分自身を呼び出さず、値を返す」処理が必要で、 これがないと無限ループする ※「再帰の終了条件」ともいう p.181 階乗を計算する ・階乗とはある正の整数において、その数から1までの全整数の積のことで「整数!」と表す ・例: 3! = 3×2×1 = 6、4! = 4×3×2×1 = 24 ・階乗は繰返し構文で計算可能だが、n! = n × (n – 1)! であることを用いて再帰でシンプルに記述できる ・例: 3! = 3×2×1 = 6、4! = 4×(3×2×1) = 4×3! ・なお、0の階乗及び1の階乗は1と定められているので、p.182 fact01.csでは0の階乗が1であることを 再帰の終了条件にしている アレンジ演習:p.182 fact01.cs ・0の階乗が1であることを再帰の終了条件にしているが、1の階乗も1であることを加味して効率化しよう ・条件演算子を用いてCalcFactメソッドを簡略化しよう 作成例 //アレンジ演習:p.182 fact01.cs using System; class Fact { public long CalcFact(int n) { //n!を返す再帰を含むメソッド return (n == 0 || n == 1) ? 1 : n * CalcFact(n – 1); //0!=1!=1、n!=n*(n-1)! } } class fact01 { public static void Main() { Fact f = new Fact(); for (int i = 0; i <= 20; i++) { Console.WriteLine("{0}! = {1}", i, f.CalcFact(i)); } } } p.185…
・p.176「既存のクラスを使ってみる」から 補足:thisの用途(コンストラクタからコンストラクタを呼ぶ) ・コンストラクタに「: this(引数,…)」を記述することで、他のコンストラクタに引数を渡して呼び出すことができる ・例えば、public クラス名(int a, int b) {…} があれば、 public クラス名(int a) : this(a, 100) {} とすることで、上のコンストラクタを呼び出せる public クラス名() : this(200) {} とすることで、上のコンストラクタを呼び出せる ・この場合、コンストラクタの本文は空出も構わないが「{}」は省略不可 ・なお、近い構文に「: base(引数,…)」があり、継承時のコンストラクタの扱いに用いる(p.245) 利用例:アレンジ演習:p.169 construct02.cs:コンストラクタからコンストラクタを呼ぶ //アレンジ演習:p.169 construct02.cs:コンストラクタからコンストラクタを呼ぶ using System; class MyClass { private string name; //氏名(外部からの直接利用不可) private int age; //年齢(外部からの直接利用不可) private string address; //住所(外部からの直接利用不可) public void Show() { //表示用のメソッド string toshi; //年齢情報の表示用の変数(このメソッド内でのみ有効な作業変数) if (age == -1) { toshi = "不明"; } else { toshi = age.ToString(); //整数から文字列に変換して代入 } Console.WriteLine("氏名:{0} 住所:{1} 年齢:{2}", name, address, toshi); } public MyClass(string str1, string str2, int x) { //コンストラクタ③(string,string,int) 全て name = str1; //氏名は引数1から address = str2; //住所は引数2から age = x; //年齢は引数3から } public MyClass(string str) : this(str, -1) { }//コンストラクタ①(string) 氏名のみ⇒④を呼ぶ public…
ゲームソフト販売本数ランキング:今週1位も「マリオカート ワールド(Switch2)」 GO! サイバーステップはオンクレ『トレバ』不振で5期連続の赤字、暗号資産事業で活路を模索【ゲーム企業の決算を読む】 GO! 「スイッチ2」全世界売上600万台突破。『マリカ ワールド』も563万本、初代スイッチを大きく上回る GO! 【キャリアクエスト】ツールが便利になる今、プログラマーに必要とされるものとは?アトラスで働くなかで見えてきた「プログラマーならではの仕事」GO! 「東京ゲームショウ2025」ビジネスデイ有料事前登録が開始!SIE社長・西野秀明氏による基調講演も決定 GO! 音楽はAIとの音声対話で作る時代に入った。Riffusion改めProducer.aiのAIプロデューサーと日本語で会話するだけで曲を作ってくれるのだ GO! インディーゲームの祭典「BitSummit the 13th」なんと5万8,000人以上が来場。来年は開催時期5月に、猛暑は回避? GO! 成人向けゲームの規制に揺れるitch.io、寄付すら不可の「無料の成人向けゲーム」に限り表示再開を実施―決済代行業者を経由しないため GO! 「プラチナゲームズ」を名乗る不審なメールに注意喚起―求人募集を装って送付、フィッシング詐欺等の可能性も GO!