裏口からのC#実践入門

4-9 異常ケースで致命的な処理を止めないケース

using を使う際には Dispose を適切に。using はすっごい便利なので、使わない手はない!

using System;

namespace Uraguchi.Scene4
{
    public class Tenshi9Counter
    {
        public int Count { get; set; }
    }

    public class Tenshi9Sample : IDisposable
    {
        private static Tenshi9Counter count = new Tenshi9Counter();

        public Tenshi9Sample()
        {
            count.Count++;
        }

        public bool Work()
        {
            count = null;
            return false;
        }

        public void Dispose()
        {
            if (count != null)
                count.Count--;
        }
    }

    public class Tenshi9
    {
        public static void Run()
        {
            using (var s = new Tenshi9Sample())
            {
                if (!s.Work())
                {
                    return;
                }
            }
        }
    }
}

バッドマン・ビギンズ

BEGIN/ENDパターンはもう推奨されてないようなので注意。
今はタスクパターンが推奨されている。

非同期プログラミングのパターン

4-10 無効値を多発するデータ設計

例外を多発させるのではなく、怪しいデータは先に排除すること。
例外はコストが高いとは 2-8 過剰な例外への依存 で学習した。

using System;
using System.Linq;
using System.IO;

namespace Uraguchi.Scene4
{
    public class Tenshi10
    {
        public static void Run()
        {
            DateTime start = DateTime.Now;
            int count = 0;

            for (int i = 0; i < 10; i++)
            {
                foreach (var item in Enumerable.Range(0, 128).
                    Select(c => (char) c).Except(Path.GetInvalidFileNameChars()))
                {
                    try
                    {
                        File.WriteAllText(item.ToString(), "DUMMY");
                    }
                    catch (Exception)
                    {
                        count++;
                    }
                }
            }

            Console.WriteLine("Fail to create file {0} files", count);
            Console.WriteLine(DateTime.Now - start);
        }
    }
}

シーン 5 Visual Studio の問題

5-1 便利な拡張機能を入れない問題

GuidInserter2 という拡張があると。GUID、UUIDってたまに目にするけど、意味は知らなかった。
GUID - Wikipedia
UUID - Wikipedia

5-2 便利な拡張機能を入れすぎる問題

重くなっちゃうよ。

5-3 F1 キーを使わない問題

ヘルプが簡単に引けるよ。

5-4 F1 キーに依存し過ぎる問題

引けなかったり、MSDNのドキュメントが追いつかなかったりするのでそういうときはググしかないね、という割り切り。

5-5 NuGet を使わない問題

簡単にライブラリを入れることができるよ。

5-6 NuGet が使えない問題

何の言語でも一緒で、ライブラリの一斉アップデートは死を招くので、外側、影響度が少ないものから順番に一つずつ上げていく。

5-7 適切なバージョンのテンプレートが選べない問題

最新に対応していないライブラリなどを使う場合は、最新に対応するまで古いバージョンを使うしかないよ、ということかな。

グッドとバッドは紙一重。洗練されていく過程であればバッドな部分もあるだろうし、表裏一体とはまた別かな。改善される点は改善されているわけだし。

5-8 とりあえずコンソールアプリという問題

相手のレベルに合わせてわかりやすい使い方ができるものを選択しようね、という話で、コンソールアプリが悪いという話ではない。

フィナーレ

  • バッドノウハウのネガティブスパイラル
  • ITやネットの世界は、嘘つきと他人の受け売りが多い

読了。