ゆるふわで雑な日記

Microsoft系の技術情報を中心にゆるふわに綴っていく予定です

2週間前のことを思い出したように書く

geekbar.doorkeeper.jp

↑で遊んできました。
まあ途中からはただ見守ってただけですが…

C#で書いてた方いたので、雑なC#版さらします。

※ 表示部分とテストはおまけです。
※ 周囲を囲まれた計算しか実装してません

github.com

IEnumerable<T>がnullまたはの要素の数が0個の場合を判定して処理を分岐したいときの話

どうしてますか?
って単純な疑問を提示するだけのエントリー

例えば、こんなやつ(Any()の結果を反転するパターン)

void Hoge<T>(IEnumetable<T> foo)
{
    // fooがnullまたは空の時
    if(!(foo?.Any() ?? false))
        Initialize();

    DoSometing();
} 

!とか出来たら使いたくない

例えば、こんなやつ2(Allするパターン)

void Hoge<T>(IEnumetable<T> foo)
{
    // fooがnullまたは空の時
    if(foo?.All(_ => false) ?? true)
        Initialize();

    DoSometing();
}

空集合に対するAllが必ずtrueなことを知らないと戸惑う + 直感的じゃない

例えば、こんなやつ3(数えたらいいじゃん)

void Hoge<T>(IEnumetable<T> foo)
{
    // fooがnullまたは空の時
    if((foo?.Count() ?? 0) == 0) return;
        Initialize();

    DoSometing();
}

…無限のIEnumerableの時やばいね?

例えば、こんなやつ4(else使おうよ)

void Hoge<T>(IEnumetable<T> foo)
{
    // fooがnullまたは空の時
    if(foo?.Any() ?? false) 
    {
        DoSometing();
    }
    else
    {
        Initialize();
        DoSometing();
    }

}

…DoSometing();2回書いてる

例えば、こんなやつ4(else使おうよ2)

void Hoge<T>(IEnumetable<T> foo)
{
    // fooがnullまたは空の時
    if(foo?.Any() ?? false) 
    {
    }
    else
    {
        Initialize();
        DoSometing();
    }

}

…ifで実行されるの空じゃん

例えば、こんなやつ4(それっぽいメソッド作る)

sstatic class Extensions
{
    internal static bool IsNullOrEmpty<T>(this IEnumerable<T> target)
                                       =>  foo?.All(_ => false) ?? true;
}
void Hoge<T>(IEnumetable<T> foo)
{
    // fooがnullまたは空の時
    if(foo.IsNullOrEmpty()) 
        Initialize();

    DoSometing();
}

空集合に対するAllが必ずtrueなことを知らないと戸惑うけど名前付いた

他にもあるかもですが、どれが好きですか?
個人的には(たくさん書くなら)最後のやつかな

細かなお話

先日Twitterで、

Func<int,int> f = bool ? x => x + 1 : x => x -1;

Build できない的な話をしたりしました。 上のコードが Build できないのは、
x => x + 1x => x -1 の間に暗黙の変換がないからなんですが、 x => x + 1 単体でも型は不明(Action<T>なのか、Func<T,RT>なのかは人が見てもわからないしユーザー定義の delegateを含めると可能性は無限大)

いや、左に型書いてあるじゃんって思いますよね?
C#的には左辺の型を右辺に適用することは基本的にありません(でした)。

// そう、こいつが現れるまでは!!
int i = default;

まあ奴は 0 をセットしているだけなので構文解析的なコストはないのでやりやすい ってことで色々やってみた
C#

VB

scala

なるほど?C#もっと色々使って推論したら良いのにっていう人の気持ちもわかるし、
構文解析のコストが~っていう人の気持ちもわかる
(型推論とか禁止なって人の気持ちはあまりわからない) まあ、このケースに対して何か変化があるかどうかは知らないけど、C#の将来のバージョンアップ(8.0くらい?)で左辺型推論入るらしいよ?

Xamarinとかよくわからない初心者がXamarinの勉強会でXamarinが全く出てこない話をしたという報告

タイトルに言いたかった事を残らず書きました。

イベントの詳細はこちら↓
jxug.connpass.com

開発ツールの勉強会でパラダイムの話はつらいかな?
と思ったけど、やっぱりつらかったなと(未熟さを痛感)…
抽象的な理論を話すのか、具体例を示すのか散々迷って、
どちらも話そうとした結果中途半端な話になってしまった…
まあ、聞いていただいた方が、いつの日か「そういえば…」
なんてことになってくれたら幸いです。

Microsoft MVP for Visual Studio and Development Technologies を受賞しました。

タイトルですべて終わってしまった…

応募する前は色々思うところもあったわけですが、
いざ受賞するとそんなことはどうでもよくて、
それにふさわしい振舞をしようと思うのは不思議なもので…
自分自身の過去の活動が、受賞に見合ったものであるとお墨付きをもらった!
と前向きに考えて、今後も活動を継続しようと思ってます。

知らない方のために補足をすると、

続きを読む

DeveloperなのでDevelopers Summit2017に参加してきました

久しぶりにBlogを書く気になったので! とはいえ、セッション内容には基本的に触れません!!

2/16,17日の2日間、Developers Summit(通称デブサミ)に参加してました。

event.shoeisha.jp

参加していたとはいえ、半分近くはお仕事をしていたり…
お仕事をするためには、電源とネットワークの確保が重要なので、
個人スポンサーに申し込んで、確保しておきました(個人スポンサーだとセッション会場内にも確保される)
昨今のIT業界(この表現自体が微妙な感じはある)は、全ての面で変革期を迎えていて、
(以前から培った開発手法、インフラ設計、プロダクトの考え方、Device等々)
考えることの多い2日間でした。

PS.日本マイクロソフト様から、Azure本をいただきました。
(これは、もっとAzureやれと言うことでしょうか?)

後は、

というメンバーでお話をしたり、とても実りの多い2日間でした。

最後に


de:code(お金払わずに)行きたい!
どちらにしても行くつもりですが…

「JXUG #20 Xamarin ハンズオン大会 第二弾 名古屋支部 & 学生支部」の個人的な感想

jxug.connpass.com

JXUG主催のハンズオン大会でスタッフしてきました。
(内容はきっと誰かが書いているに違いない)
まあ、スタッフとは名ばかりの雑用担当とは俺の事でしたがwww
俺の仕事は、↓

の企画を進めるきっかけの煽りを主催者に入れたところで90%以上完了していた!
(当日の裏ミッションがなかったわけではない)
と言うわけで、次回以降もケーキ担当として参加する構え!
参加者の皆さま、
主催をされた #JXUG の皆さん(一応メンバー)、
昨日はお疲れさまでした。
楽しんでいただけていれば幸いです。

あ~そういえは集合写真撮らなかったのが心残りだな…
↓こいつも当日は色々(ある意味本人以上に)活躍しましたとさ。 f:id:KazukiK:20160327143722j:plain
ん?あ、あれ?これって感想なのかな?
まあ、細かいことは気にしないでいいか!