echo("備忘録");

IT技術やプログラミング関連など、技術系の事を備忘録的にまとめています。

【Microsoft】de:code2019体験記その1 C#で令和元年を表示する

概要

先日、マイクロソフトのde:code2019に参加してきました。

本当に素晴らしいセッションを通して勉強することが多く、行って正解だったと思います。
それにこういうイベントで知見が広まると、モチベーションも上がりますね。

あと、某スペシャルゲストも、本当にスペシャルな人でしたからね。

そんな中で「C# ドキドキ・ライブコーディング対決 @ de:code - ONLY C#!! Blazor Web 開発バトル」というセッションがありました。

私は残念ながら拝聴できなかったのですが、「その場で与えられたお題に対して、即興で時間内にプログラミングして動かす」というものです。
ちなみにお題は「C#で令和元年を表示する」だったようです。

「じゃあ自分でやったら、何分かかる?」ということで、やってみました。

結果

とりあえず僕が思いついたのは、下記のコード。
(WinFormアプリとして動くのは確認済です。)

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Windows.Forms;
  
namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
  
        private void button1_Click(object sender, EventArgs e)
        {
            var Ymd = textBox1.Text;
            var listNengoPeriod = new List<NengoPeriod>();
  
            listNengoPeriod.Add(new NengoPeriod(new DateTime(2019, 5, 1), "令和"));
            listNengoPeriod.Add(new NengoPeriod(new DateTime(1989, 1, 7), "平成"));
            listNengoPeriod.Add(new NengoPeriod(new DateTime(1926, 12, 26), "昭和"));
            listNengoPeriod.Add(new NengoPeriod(new DateTime(1912, 7, 30), "大正"));
            listNengoPeriod.Add(new NengoPeriod(new DateTime(1868, 1, 25), "明治"));
  
            var resultNengo = String.Empty;
  
            if (DateTime.TryParse(Ymd, out var dt))
            {
                var nengo = (from n in listNengoPeriod
                             where n.getPeriod <= dt
                             orderby n.getPeriod descending
                             select n).FirstOrDefault<NengoPeriod>();
  
                resultNengo = nengo == null ? "明治より前" : nengo.getNengo;
            }
  
            var message = string.IsNullOrEmpty(resultNengo) ? "指定した年月日が不正です。" : $"{Ymd} は、{resultNengo} です。";
            MessageBox.Show(message);
        }
    }
  
    class NengoPeriod
    {
        public NengoPeriod(DateTime period, string nengo)
        {
            this.getPeriod = period;
            this.getNengo = nengo;
        }
  
        public DateTime getPeriod { get; }
        public string getNengo { get; }
    }
}

上記コード完成にかかった時間は、30分でした。

なお、実際の登壇者がコード完成までにかかった時間は、たったの5分とのこと。
(細かいバグはあったようですが)

いや、カップ麺の待ち時間程度でこれを完成させちゃうって、本当すごいな~、と思いました。
(しかも実際は、トークをしながらとかですからね。)

やはりすごい人はいるんだなあ、と改めていい刺激になりました。

てか、対峙する価値のない人なんて適当にスルーして、その分こういう方々とご一緒させて頂ける時間に割くべきですね、本当に。

※体験記その2は、また後日。