本記事はQualiArts Advent Calendar 2022 22日目の記事です。
普段、少ないコードで書くかを生きがいにしている自分のTips集になります。
switch中に正誤メソッドを挟む
以下の感じで、挟む方法が一般的な気がしますが
var x = "";
switch (x)
{
case { } n when n.IsNullOrEmpty():
break;
}
以下の感じで短縮できます。
var x = "";
switch (x)
{
case {} when x.IsNullOrEmpty():
break;
}
// or
var x2 = x switch
{
_ when x.IsNullOrEmpty() => ""
};
switch文はc#7くらいからだいぶ便利になってきてて、柔軟な書き方ができるようになっています。
var x = "";
var x2 = "";
var x3 = (x, x2) switch
{
(null, _) => "",
(_, {Length: >5 and <=8}) => "",
_ when x.IsNullOrEmpty() && x2.IsNullOrEmpty() => "",
(_, "hoge" or "fuga") => "",
_ => ""
};
dynamicとgenerics
Editor拡張をしてていてたまに困るのが、ジェネリックスクラスの取り扱いです。
taragetがUnityEngine.Objectなためキャストができません。
そのためdynamicを用いて無理やり変換します。
public override void OnInspectorGUI()
{
void Do<T>(List<T> list)
{
}
Do((dynamic)target);
}
dynamicは色々危ないので、ジェネリックスにInterfaceを実装したほうがいいです。
null許容型の比較
非null許容型との比較の際nullだった場合必ずfalseになるので短縮して書けます
int? x = null;
// 下二つは同じ意味で両方false
if (x == 2);
if (x != null && x == 2);
ただnull許容型どうしの比較は、お互いnullの場合trueになるので注意が必要です
int? a = null;
int? b = null;
// true
if (a == b);
StartWithとPairWise
UnrixとPairWise, StartWithオペレーターの話です。
今更Unirxみたいな話は戦争が起きそうなのでしません。
PairWiseはストリームの流れた個数が二個にならないと流れないんですが、無理やりStartWithで初期値を流せます
var s = new StringReactiveProperty("hoge");
s
.Pairwise()
.StartWith(() => new Pair<string>(null, s.Value))
.Subscribe()
.AddTo(this);
まとめ
自分が書いたコードを見返してあまり知られてなさそうなことをまとめました。知らなくても大丈夫な内容です。
来年はちゃんと書きます。