C#erのみなさんこんばんは。暖かくなってきましたね。ハハハ。フハハハハハwwヒヒィィンwwwwwww
しょうもねぇツールが欲しくって、毎日楽器屋に通って窓に顔こすりつけて眺めてたんだけど誰も買ってはくれず、致し方が無く自分でしょうもねぇツールを書いた。
GitHub – Connect-a/GomiDownloadTools
そのツールの紹介とかしたいわけじゃなくて。真面目な気持ちで書いていたら.NET開発世界に対して色々思うことがあったからそれを綴る。
C#erのみなさんこんばんは。暖かくなってきましたね。ハハハ。フハハハハハwwヒヒィィンwwwwwww
しょうもねぇツールが欲しくって、毎日楽器屋に通って窓に顔こすりつけて眺めてたんだけど誰も買ってはくれず、致し方が無く自分でしょうもねぇツールを書いた。
GitHub – Connect-a/GomiDownloadTools
そのツールの紹介とかしたいわけじゃなくて。真面目な気持ちで書いていたら.NET開発世界に対して色々思うことがあったからそれを綴る。
RustでReadLineを書くことについて思いを馳せていて。
System.IO.StreamReader.ReadLine() ってどうやって「一行」を読み込んでんのと思った。だって \r と \n と \r\n が入り乱れておるわけだから。まぁどうせゴリゴリのゴリゴリのゴリゴリのゴリに書いてるんだろうけども、それにしたってどのようにゴリゴリしているのかが気になった。
byteゴリゴリ、stringゴリゴリ、charゴリゴリ。果たしてそこにはどんなゴリラが生息しているんだろうか。気になるゴリよ。
以下の記事に「LINQ 可読性」っていう検索流入があるんで、そのはなし。
初めてLINQという記法を見た人にはなんのこっちゃわからんだろう。
※LINQという名前を冠してはいるが、別に特別なことをしているわけでは無い。だから「LINQという記法」という言い方は正しくない。「LINQのクエリ式」だけが記法として独立している。
結論から言えば、LINQは読みやすい。ただ、学習コストがあるのはある。お前が最終的に達成すべきは顧客満足であって、そのためにLINQの「学習コスト」「開発工数」「保守工数」について考えねばならんだろうな。
聖夜なので技術記事を捧げます。
大好評間近な「テメーらは説明が下手だ低能ども」シリーズ。今回はyieldについて。
C#とは書いてるが、C#知らんでも読めるように説明してみる。ヤドカリくらいの知能があればギリ読めるかもしれないな。いや無理かも。割と難解だ。メジロくらいのIQが必要かも。
ここに、どこの家庭にもあるような普通の関数があります。
※Main関数から開始される。
※Console.WriteLineは、標準出力に値を書きだす関数。
    private static void Main()
    {
        int hoge = 0;
        hoge = Hoge();
        Console.WriteLine(hoge);
    }
    private static int Hoge()
    {
        return 1;
    }
なんのことはない。Hoge()を呼ぶと、1を返してくれる。
それを変数 hoge に格納し、標準出力にWriteしている。つまりコンソールに「1」が表示されるだけのプログラムだ。
以下のようなコードを書いたら
private static void Main()
{
    var l = new List<int> { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 };
    var hoge = Enumerable.Empty<(int?, int?)>();
    hoge = l.Select(x => (x, x));
    Console.ReadLine();
}
以下のように怒られた。
CS0266 型 ‘System.Collections.Generic.IEnumerable<(int, int)>’ を ‘System.Collections.Generic.IEnumerable<(int?, int?)>’ に暗黙的に変換できません。明示的な変換が存在します (cast が不足していないかどうかを確認してください)
分かるだろ!空気読めや!察せ!やんだくうきよめ!!
うほーーーーー!が出力される。
以下のリストをごらんくださぁい。
        private static void Main()
        {
            var hoge = new List<int> { 1 };
            var fuga = Enumerable.Empty<int>();
            try
            {
                fuga = hoge.Select(x =>
                {
                    throw new Exception("こらーーーー!");
                    return 0;
                });
            }
            catch (System.Exception)
            {
                Console.WriteLine("ほげーーーーー!");
            }
            try
            {
                fuga.Any();
            }
            catch (System.Exception)
            {
                Console.WriteLine("うほーーーーー!");
            }
            Console.ReadLine();
        }
このコードでは うほーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー! が出力されるのですね。
try-catchの動きの話です。
nameofはコンパイル時に評価されるでよ。かたやToStringとか文字列リテラルはdynamicだでよ。
こういうEnumがあったとして。
    public enum Animal
    {
        Duck,
        Cock,
        Dick
    }
    public enum Action
    {
        Kick,
        Hack,
        Lick,
        Suck,
        Pick,
        Pack,
        Fuck
    }
こういったコードを書くと
[Authorize(Policy = $"{Animal.Dick}:{Action.Kick}")]
			意外と = null してる人が多くて。
HogeClass hoge; var hogehoge = hoge;
未割当のローカル変数 ‘hoge’ が使用されました。
うん。
HogeClass hoge = null; var hogehoge = hoge;
変数名が揃わなくてやな感じ。それに = nullってなんかダメじゃん。あの…あれだからダメじゃん。
なんか微妙に迷った。
private static void Main()
{
    var now = DateTimeOffset.Now;
    Console.WriteLine(now);
    Console.WriteLine(now - now.TimeOfDay);
}TimeOfDayを除けばよろしい。
DateTimeOffsetがあって、それの0時が欲しいなと。start time of dayが欲しいなと。
Powered by WordPress & Theme by Anders Norén