はなちるのマイノート

Unityをメインとした技術ブログ。自分らしくまったりやっていきたいと思いますー!

C#

【C#, IL】C#の中間言語ILを読めるようになりたい(SharpLabの紹介)

C# IL

はじめに 私は普段Unityを触っているのですが、Unityのライブラリとして有名なUniRx・UniTaskを作られたneueccさんはIL単位での最適化も行なっているそうです。www.youtube.comいやはや凄すぎて良く分からない世界になってきました。ただ少しでもC#をうまく…

【Unity,UniTask】TestRunnerでasync/awaitを使った非同期処理のテストはUniTask.ToCoroutineを使うと簡単

はじめに 今回はasync/awaitのテストについて取り上げたいと思います。今までTask.Runを使ってみたりでなんとか対応させていましたが、UniTask.ToCoroutineを使うことでもっとスマートに書けることを後輩に教えてもらいました。github.com一応公式のGitHubに…

【UniTask】AsAsyncUnitUniTaskを使ってUniTaskからUniTask<AsyncUnit>に変換をする

はじめに 今回はAsAsyncUnitUniTaskを紹介したいと思います。突然ですが、UniTaskを利用していて以下のような状態になっとことはないでしょうか。 // 完了済のUniTaskを生成(awaitした瞬間10が返ってくる) UniTask<int> task1 = UniTask.FromResult(10); // 1フレ</int>…

【UniTask】UniTaskCompletionSourceを使って好きなタイミングで結果を確定させるUniTaskを生成する(ついでにUniTask.Voidの紹介)

はじめに 今回はUniTaskCompletionSourceについて紹介したいと思います。github.comUniTaskCompletionSourceを使うことで好きなタイミングで結果を確定させるUniTaskを生成することができます。早速見ていきましょう。 はじめに UniTaskCompletionSource Uni…

【UniRx, UniTask】ReactivePropertyをawaitしたらどうなるか(awaitした後ReactivePropertyの値が変わるまで)

はじめに UniRxを使っていたところ、PeactivePropertyをawaitしたらどうなるか気になりました。そこで今回は実験していきたいと思います。 はじめに ReactivePropertyをawaitする Observableをawaitする さいごに ReactivePropertyをawaitする 結論からいう…

【UniTask】SuppressCancellationThrowを使ってキャンセルを返り値として取り出す

はじめに 今回はSuppressCancellationThrowについて触れていきたいと思います。SuppressCancellationThrowの使い場面は簡単に言うと、タスクがキャンセルされたかどうかを返り値として取り出す場合です。 // 通常 try { await NormalTask(ctx.Token); } catc…

【C#,Unity】DIコンテナを使う前にPoor man’s dependency injectionを検討してみてはどうでしょうか

はじめに UnityでDI ContainerといったらZenjectやExtenject,VContainerあたりが有名ですよね。Dependency Injectionパターンを利用する場合は誰がインスタンスを生成・注入するかが難しい問題になりますが、その解決法の一つとしてDI Containerが利用され…

【C#】C#でAWS Lambda & API Gatewayを使ってWebAPIを作る(Windows)

はじめに 最近知ったのですが,AWS LambdaがC#に対応しているらしいです。C#大好きっ子としては触らなきゃということで簡単なWebAPIを作ってみました。 AWS Lambda はサーバーレスコンピューティングサービスで、サーバーのプロビジョニングや管理、ワークロ…

【C#】ovverrideとnewの挙動の違い(アップキャストしたときに違います)

C#

はじめに overrideとnewの二つのキーワードの挙動の違いについて書いていきたいと思います。詳細を知りたい方は公式ドキュメントを見てみてください↓ docs.microsoft.com はじめに 挙動の違い さいごに 挙動の違い overrideとnewキーワードは派生クラスをア…

【UniRx】IDisposableをまとめてDisposeするためのCompositeDisposableクラスを利用する

はじめに 今回はUniRxのCompositeDisposableクラスについて取り上げたいと思います。UniRx/CompositeDisposable.cs at master · neuecc/UniRx · GitHub具体的な使い方から,実際のコードを見ながらのTipsについても触れていきたいです。 はじめに 使い方 Tip…

【Unity】機能の階層と実装の階層を分けるBridgeパターンを学ぶ

はじめに 今回は機能の階層と実装の階層を分けるBridgeパターンを紹介したいと思います。 クラス図 はじめに 概要 登場人物 実装例 さいごに 概要 wikipedia先輩には以下のように表記されていました。 Bridge パターン(ブリッジ・パターン)とは、GoF(Gang…

【Unity】状態に応じてクラスの振る舞いを切り替えるStrategyパターンを学ぶ

はじめに 今回はアルゴリズムを切り替えるStrategyパターンについて紹介したいと思います。 クラス図 はじめに 概要 登場人物 実装例 さいごに 概要 wikipediaには以下のように表記されていました。 Strategy パターン(ストラテジー -)は、コンピューター…

【C#】最小頂点被覆問題の近似アルゴリズムを実装してみる

はじめに 今回は最小頂点被覆問題の近似アルゴリズムを実装してみたいと思います。最小頂点被覆問題の詳細は後述しますが、NP困難の問題と知られていて多項式時間で解くことできないことが証明されています。そういった解くことが難しい問題に関して、以下の…

【C#】インターフェイスの変換を行うAdapterパターンを学ぶ

はじめに 今回はインターフェイスの変換を行うAdapterパターンについて紹介したいと思います。 クラス図(左 : 継承を使ったもの, 右 : 委譲を使ったもの) はじめに 概要 登場人物 継承を使ったパターン 委譲を使ったパターン さいごに 概要 wikipediaには以…

【C#】命令をクラスにするCommandパターンを学ぶ

はじめに 今回は命令をクラスにするCommandパターンを紹介したいと思います。 クラス図 はじめに Commandパターンの定義 登場人物 Commnad Receiver ConcreteCommand Invoker Client さいごに Commandパターンの定義 Wikipediaにかなりわかりやすくまとめら…

【C#】責任をたらい回しするChain of Responsibilityパターンについて学ぶ

はじめに 今回は責任をたらい回しするChain of Responsibilityパターンを紹介したいと思います。 クラス図 はじめに 登場人物 Handlerのコード ConcreteHandler 動作確認 さいごに 登場人物 冒頭でも述べた通り,Chain of Responsibilityパターンは責任(要求…

【Unity】UniRxで使える自作Subjectを作ってみる

はじめに UniRxにはSubjectというクラスがあり,イベント駆動でコーディングするにはほぼ必須と言っても過言ではないのでしょうか。今回はそんなSubjectへの理解を深めるために,自作Subjectを作ってみたいと思います。 はじめに 自作Subject テスト 最後に …

【C#】nullチェックを不要にできるNull Objectパターンを学ぶ

はじめに 今回はNullReferenceExceptionのスローを防ぐためのnullチェックを減らすことができるNull Object パターンについて紹介したいと思います。 クラス図 はじめに よくあるnullチェック Null Objectパターン適応後 さいごに よくあるnullチェック clas…

【C#】データ構造と処理を分離するVisitorパターンを学ぶ

はじめに 今回はデータ構造と処理を分離する目的で用いられるデザインパターンVisitorパターンを紹介したいと思います。 クラス図 はじめに 登場人物 データ構造側 処理の記述側 データ構造側のコード 処理を記述するコード テスト データの集合を扱うクラス…

【C#】LINQで非同期処理をawaitをする

C#

はじめに 今回はLINQで非同期処理をawaitする方法について紹介したいと思います。 はじめに コード さいごに コード using System; using System.Linq; using System.Threading.Tasks; class Program { private static void Main(string[] args) { _ = Calcu…

【C#】ValueObject、そなたは美しい

はじめに 最近ValueObjectパターンなるものを知ったのですが、DDD(ドメイン駆動開発)で用いられる手法の一つのようです。今回はメリット等には触れず、ValueObjectの作り方だけに注目していきたいと思います。 はじめに 作り方 おまけでEntityについて さい…

【Unity】unity1week「あける」でクラス設計してみたの補足(特にMV(R)Pパターン)

はじめに 先日noteの方にこのような記事を書きました。note.com正直Unityちゃんデスクトップフィギュアが欲しい*1という不純な動機で書き始めましたが、想像以上に多くの方から反応をいただけて嬉しかったです。今回はこちらの記事で紹介仕切れなかったクラ…

【C#】その例外の再スローって必要なの?

C#

はじめに 今回はcatchの中でthrowだけ書かれている再スローについて取り上げていきたいと思います。結論から言うと再スローを書かなくても良いのですが、実験方法をつらつらと書いていきます。 はじめに 実験 手法1 手法2 結果 手法1 手法2 さいごに 実験 手…

【Unity】HttpClient.GetStringAsyncにCancellationTokenを引数で渡せないので対策を考える

はじめに タイトルの通りUnityでHttpClient.GetStringAsyncでCancellationTokenを引数で渡そうと思ったのですが、どうやらバージョンが違うせいでできないみたいでした。公式ドキュメントを見てみると.NET 5.0のみ対応らしいです。 public System.Threading.…

【C#】グラフの連結成分を調べるアルゴリズムを実装してみる

はじめに 今回はグラフの連結成分を調べるアルゴリズムを実装してみようと思います。そもそもグラフの連結成分とは「任意の2点間に道があるグラフのうち、極大な連結部分グラフ」のことをいいます。以下の画像のようなグラフだと{0, 1},{2, 3, 4},{5, 6, 7…

【C#】LINQの「ElementAt(0) vs First()」

C#

はじめに プルリクのレビューをしていたところ、Enumerable.ElementAt(0)を用いてコレクションの最初の要素を指定している方がいました。 https://docs.microsoft.com/ja-jp/dotnet/api/system.linq.enumerable.elementat?view=net-5.0私はいつもEnumerable.…

【Unity】HttpClient,UnityWebRequestにタイムアウトを設定する方法

はじめに Unityで通信を行おうと思った場合、HttpClientもしくはUnityWebRequestのどちらかを使うことが多いでしょう。これらを用いるに当たってタイムアウト処理を設定しておかないと、永遠に処理が終わらないなんてこともあるかもしれません。今回はそれを…

【C#】トポロジカルソートを実装してみる

はじめに 今回はトポロジカルソートを実装していきたいと思います。ja.wikipedia.orgトポロジカルソートとは有向非巡回グラフ(DAG)においてどのノードもその出力辺の先のノードより前にくるように並べるアルゴリズムのことです。 トポロジカルソート アルゴ…

【C#】配列から2つの要素を選び、指定した和になる組み合わせを列挙する

はじめに 今回扱ってみる問題はこんな感じ。 n個の配列Aと整数kが入力として与えられたとき,Aの2つの要素の和がkとなる組み合わせを列挙せよ 例. 入力:A = {1, 6, 4, 5, 3},k = 7 出力:(6, 1), (3, 4) 解き方 まずは2重ループを使った全探索の方法が思い…

【C#】2分探索木を実装してみる

はじめに 今回は2分探索木を実装してみようと思います。ja.wikipedia.org早速みていきましょう。 二分探索木 二分探索木は「左の子孫の値 ≤ 親の値 ≤ 右の子孫の値」という制約を持つ二分木のことを指します。 今回は以下の4つを実装します。 挿入 削除 要素…