年末

mgcです。

気づけば残り3日ほどで1年が終わりますが
大掃除等はお済でしょうか?

毎年この時期には家のエアコンをすべて掃除するのですが
さすがに一年間使用していたエアコンの中は埃とカビだらけで
エアコンの掃除だけで1日かかってしまいますが
この掃除をしないと1年が終わった気がしないのです。

皆様にも何かしないと
1年が終わった気がしないということがありますでしょうか?
今年中にしておきたいことを済ませて
良い年越しにしていただきたいと思います。

それでは次回は2018年になっておりますが
2018年も宜しくお願い致します。

良いお年をお過ごしください。

トラックボール

こんにちはmtjです。

現在トラックボールを使っています。

マウスはマウス本体を動かすことでポインタを動かします
トラックボールは本体にボールがついておりそれを転がすことでカーソルを動かします。

最初は慣れが必要ですが慣れてくるとかなり使いやすいと思います。
自分はマウスでは画面全体をマウスを浮かすことなく移動できるようにしているのであまり気にはしませんが
何回もマウスを上げてマウスパッドの真ん中に戻してをするより指を何回か転がすだけで移動できるトラックボールのほうが
良いのではないかと思います。

特にマウスパッド等が必要ないのが利点で狭い場所でも操作しやすいのが利点ですね
手首の負担が少ないは聞きますが自分は上記で記載した通りそもそも手首に負荷のかかる感度ではないので
個人的にはボールを転がしている感覚が好きなので使っている感じです。

また親指でボールを動かすタイプより中指等で転がすタイプがおすすめです。

C#のタプルと分解

C#7で追加されたタプルのフィールドを分解する構文について、タプル専用の機能ではなくユーザ定義の型でも分解が行えると知ったので試してみました。

タプルのフィールドを分解する構文は以下のようになります。


var t = (Value1: 2, Value2: 3D);
var(v1, v2) = t;

1行目で2つのフィールドを保持するタプル変数tを作成し、
2行目で変数tのフィールドをv1とv2に分解しています。

これだけでは意味が無いですが、メソッドの戻り値はタプルで返し、
メソッド実行側はすぐに分解して使用したい場合などに役立ちます。

上記の分解と同様のことを行うには、クラスや構造体にDeconstructメソッドを実装します。拡張メソッドでもOKです。
KeyValuePair構造体のDeconstruct拡張メソッド実装例は以下のようになります。


public static void Deconstruct<TKey, TValue>(this KeyValuePair<TKey, TValue> pair, out TKey key, out TValue value) {
    key = pair.Key;
    value = pair.Value;
}

例えば、Dictionaryの各要素をforeachで処理する場合、今まであれば以下のようになります。


var dic = new Dictionary<string, int>();
foreach (var pair in dic) {
    Console.WriteLine(pair.Key + "=" + pair.Value);
}

Deconstruct拡張メソッドを実装して分解が行えるようになると、以下のような実装が可能になります。


var dic = new Dictionary<string, int>();
foreach (var (name, score) in dic) {
    Console.WriteLine(name + "=" + score);
}

変数pairを使用する必要がなくなり、pair.Keyとpair.Valueではなく、本来のフィールドの意味を表す変数名を名付けて利用できるようになりました。

 

永世7冠

羽生善治さんが47歳で永世7冠を手にしました。
以前、テレビで「やはり加齢とともに思考の瞬発力が衰えます」と言っていました。
まるでスポーツ選手の言葉のように聞こえます。
私は将棋のことはまったく分かりませんが、対戦した人は「常に新しい将棋を指してくる」
と言っています。
やはり特別な人だとは思うのですが私たちが想像出来ないような努力をしているはずです。
この後、この人の目標は何なのでしょうか。