トマシープが学ぶ

Unity/VR好きのミーハー初心者 記事内容は自分用のメモ。何も求めないで

C#の本をやる:イディオム(Chapter4)

 実戦で役立つ C#プログラミングのイディオム/定石&パターン

イディオムとは、いろいろなコードの書き方がある中で先人たちが選んだ一番いい方法らしい。

 

初期化

var age = 25

ローカル変数の初期化

squmarigames.com

  var langs = new string[] { "C#" ,"VB","C++",};

最後コンマを付けてもつけなくても通るけど、付けたほうが追加が簡単だからよい

 

オブジェクトの初期化

 

            var person = new Person
            {
                name = "トマシープ";
              PhoneNumber = "012-3456-7890";
            };

判定

if ( age <= 19) {} 年齢は19以下

× if ( 19 >= age) {} 19が年齢以上か

 

if(MinValue <= num && num <= MaxValue){

 

bool

if( isStart ){}

× if( isStart == true ){}

私はわかりやすい下のほうが好きなのに。。。

 

returnするときは式を直接

return a==b;

return true;

 

繰り返し

配列のfor文を回すときはiから

for(var i=0,i<=5,i++){

item[i]

}

 

配列やリストのすべての要素を回してすべての要素に対して同じ処理をするならforeach

         var items = new[] { 1, 2, 3, 4, 5, 6, 7, 8 ,};
            foreach(var n in items)
            {
                Console.WriteLine(n);

            }
            var nums = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8 };
            nums.ForEach(n => Console.Write(n)); ///ListならList.ForEachでかける

ループを抜けるときは

if(line.Length>40)

break;

 

ループから抜けると同時に呼び出し元のメソッドに戻る場合はreturn

            int Sin() { 
            foreach(var n in items)
            {
                if (n > 6)
                    return n;

                Console.WriteLine(n);

            }
            return -1;
            }

三項条件演算子

条件演算子

var num = isStart ? 1 : 0;

trueの時は:の左側、falseの時は右側が入る。

docs.microsoft.com

null合体演算子

var message = GetMessage(code) ?? defaultMessage();

nullだったら「??」の右側が入る

 

null条件演算子

return sale?.Product;

----------------------------------------------------------------------------------

こういうのは知っておかないと絶対読めないし、??とか:?とかググりづらいから知っておくべき。書くかどうかは別

読み取り専用プロパティ

public string GivenName{get; private set;}

params

数が決まっていない配列を受け取るとき

public double Median(params double[] args)

1を足す

++count

count++

後ろに置くのは知ってたけど前に置いてもいいんだ。

その他

path=@"\D:\CSharpPractice\CSharpPhraseBookAnswer\Chap04\Exercise1";

 

入れ替える

var temp = a;
a = b;
b = temp;

 

C#の本やる。

この本をばらばらとやっていく

 実戦で役立つ C#プログラミングのイディオム/定石&パターン

c#プログラミングのイディオム/定石&パターン

演習問題の解答は本には載ってないけど、下からコードをダウンロードできる。

https://gihyo.jp/book/2017/978-4-7741-8758-7/support

環境構築

ファイル>新規作成>プロジェクトでコンソールアプリを作る

f:id:bibinbaleo:20190710130105p:plain

プロジェクト名がnamspaceに自動でつく。

program.csが自動でできる。

この中に

static void Main(string[] args)
{}

が書いてある。

f:id:bibinbaleo:20190710130133p:plain

自分でスクリプトを追加するときはソリューションエクスプローラーのソリューション名右クリック>追加>クラスでできる。もしくはShift+Alt+C

f:id:bibinbaleo:20190710125611p:plain

名前を付ける

f:id:bibinbaleo:20190710125607p:plain

ファイル名がクラス名になる。

ソリューションエクスプローラーを消してしまったら上の「表示」から表示できる。

 

コンソール

Console.WriteLine("MyClass: ({0},{1})", myClass.X, myClass.Y);

Console.ReadKey();

値型と参照型

値型は変数に直接値を入れる

参照型は参照してるメモリのアドレスを入れている。

構造体は値型、クラスは参照型

大きいサイズのオブジェクトを入れるときは参照型。値型だと変数を代入するたびに中身をコピーしないといけなくて大変。

逆に小さいサイズのオブジェクトは、値型に入れたほうがメモリ効率がいい

構造体を自分で作ることはまずない。

 

static 静的メソッドはインスタンス化せずに使える

名前空間

namespace Tomasheep{

}

using Tomasheep;

継承

public class Enemy : Person{

}

クラスの頂点はObjectクラス

 

 

Clusterの会場アップロード機能使ってみる。

 

SDK

ここからSDKをダウンロード。

clustervr.gitbook.io

上に詳しいことは全て書いてある。

Unity 2018.3.14f1

WindowsBuildSupport / MacBuildSupoort コンポーネントが必要

アバターをアップした時と同じように(記憶はないけど)、Clusterの自分のページからAPIゲットして入れる

https://cluster.mu/

f:id:bibinbaleo:20190709125736p:plain

f:id:bibinbaleo:20190709125733p:plain

clusterSDK>VenueUpload

f:id:bibinbaleo:20190709165302p:plain

いろいろサンプルシーンが入っている!

f:id:bibinbaleo:20190709130015p:plain

スクリーンとか゚コメントのプレハブもあるので自由に使えてすごいですね。ランキングって何だろうと思ったら投げ銭量かな。

f:id:bibinbaleo:20190709130019p:plain

プレビュー

メニュバーから clusterSDK>VenueUpload

Clusterを入れた状態でプレビューボタンを押すと、Clusterの左上にPreviewSceneというボタンが出てきた。

f:id:bibinbaleo:20190709130005p:plain

入れた。

f:id:bibinbaleo:20190709130010p:plain

アップロード

メニュバーから clusterSDK>VenueUpload

ここでサムネとか゚名前とか決める。そしてアップロード

f:id:bibinbaleo:20190709165812p:plain

アプロード出来たあと、ルームを作るとある!

f:id:bibinbaleo:20190709170747p:plain

入れた。

f:id:bibinbaleo:20190709170754p:plain