タグ

ブックマーク / qiita.com/toRisouP (6)

  • 【C#】 拡張メソッドで型によるswitchやif判定をできるだけ消す - Qiita

    今回の話 以前、Visitorパターンで型によるswitchやif判定を消すという記事を書きました。前回のやり方に従えばVisitorパターンを使えばswitch文を消せて型安全にすることができました。 ただ、「じゃあ実際使いやすいのか?」というと正直なところ微妙でした。 そういうわけで今回は「妥協をしてできるだけ安全にしながら使い勝手を保つ」方法を紹介します。 前回のおさらい 問題としたコード Visitorパターンで型によるswitchやif判定を消すで紹介したコードのおさらいです。 何を重視していたかというと「型の網羅性を保証したい」でした。あるデータ構造群を他のデータ構造に変換するときなど、switchを使ったパータンマッチングで記述することができます。 using System; namespace Visitors.Samples { public static class C

    【C#】 拡張メソッドで型によるswitchやif判定をできるだけ消す - Qiita
  • Visitorパターンで型によるswitchやif判定を消す - Qiita

    今回の話 「Visitorパターン」を使ってswitch文やif文での型分岐を置き換えてみよう、という話です。C#で書いてます。 (サンプルコードはだいぶ端折ってるのであまり突っつかないで下さい) switchやif文のどこが良くないのか 「型の判定によって処理を分岐する」という実装をswitchやifで作ってしまうと、後から構造を変更した際などに問題が起きる可能性があります。 (そもそもオープンクローズド原則違反になってしまう) たとえば「型をみてデータ構造を変換する」といった場合はこの問題を踏みやすいです。 例:データ構造を1:1変換する 「RPGのキャラクター(ジョブ)」という概念があったとしましょう。 これは基底クラスであり、派生先にいくつかのジョブがあってそれぞれで独自のパラメータを保持しています。 /// キャラクターの抽象クラス public abstract class C

    Visitorパターンで型によるswitchやif判定を消す - Qiita
  • 【C#】async/awaitのキャンセル処理まとめ - Qiita

    はじめに C#におけるasync/awaitを使う上で、絶対に意識しないといけないものは「キャンセル処理」です。 正しく処理をキャンセルしないとメモリリークを起こしたり、デッドロックやデータ不整合を引き起こす可能性があります。 今回はこの「async/awaitにおけるキャンセル処理」について話します。 対象 C#におけるasync/await全般 Task/ValueTask/UniTaskすべてに共通します Unity含む C#のasyc/awaitについてイマイチ自信が持ててない人 先に「結論」 asyncメソッドはCancellationTokenを引数に取るべき await対象が引数にCancellationTokenを要求する場合は省略せずに渡すべき OperationCanceledExceptionの取り扱いを意識するべき 解説 そもそも「キャンセル」とは何を指すのか そも

    【C#】async/awaitのキャンセル処理まとめ - Qiita
  • 2022年現在におけるUniRxの使いみち - Qiita

    はじめに 私が「UniRx入門」という記事を書き始めてから5年、最後に投稿してから4年が経過してしまいました。 記事を更新していなかったこの数年間で、UniRxを取り巻く環境が大きく変わってしまいました。 UniRxというライブラリ自体に特に大きな更新はないのですが、UnityのC#バージョンがアップデートされたり、UniRxよりも便利なライブラリが登場したりしました。 今回は2022年現在のUnityにおけるUniRxの立ち位置と、その使い方について解説します。 UniRxの立ち位置 現代のUniRxの状況 2017年頃の古いバージョンのUnityにおいては.NET 3.5相当のかなり貧弱なC#しか用いることができませんでした。 非同期処理にasync/awaitすら使えず、「コルーチン」で書くか「UniRx」で書くかという状況でした。 そのため、時間が関係した処理はコルーチンかUniR

    2022年現在におけるUniRxの使いみち - Qiita
  • C#のアプデでめちゃくちゃ便利になったswitch文(パターンマッチング)の紹介 - Qiita

    はじめに C#も2021年現在ではC# 10.0が登場し、古いC#とは比べ物にならないほど様々な機能が追加され、ますます便利になってきました。 その中でも個人的にイチオシの機能が「パターンマッチング」です。 この機能のおかげでめちゃくちゃ実装が捗るようになったので今回はこちらを紹介します。 また、パターンマッチングと直接の関係はありませんが、「タプル(ValueTuple)」という機能もC#にはあります。ValueTupleは自分で定義した型に対してパターンマッチングを利用する際に使うことがあるので、ついでにこちらも紹介します。 タプル(ValueTuple)(C# 7.0~) タプルとは「複数のデータを一時的に扱う」ときに生成されるオブジェクトです。 すごく簡単にいうと、使い捨て用途のクラス/構造体の定義を極限まで簡単にしたものです。 タプルという概念自体はC#6以前からも存在し、.NE

    C#のアプデでめちゃくちゃ便利になったswitch文(パターンマッチング)の紹介 - Qiita
  • 【C#】わかった"つもり"になれる「ラムダ式」解説 - Qiita

    この記事について この記事ではC#の「ラムダ式」についてなんとなくわかったつもりになれるを目標に説明をします。 そのため多少端折ってたり、厳密じゃない説明もでてきます。ご了承ください。 もし厳密な解説を知りたい方は、次の記事がオススメです。 【LINQの前に】ラムダ式?デリゲート?Func?な人へのまとめ【知ってほしい】 この記事で出てくる用語 ラムダ式 デリゲート Action Action<T> Func<TResult> Func<T, TResult> はじめに ラムダ式って何 C#に限らず、プログラミングをしていると「ラムダ式」という用語を耳にすることがあります。 果たしてこの「ラムダ式」とは何をするためのもので、あるとどうして嬉しいのか、それぞれ解説していきます。 「その場で」関数を書ける機能がラムダ式 「ラムダ式」という名前からしてかなりいかつい印象をうける人もいるでしょう。

    【C#】わかった"つもり"になれる「ラムダ式」解説 - Qiita
  • 1