ブルーライトカットメガネ

こんにちはmtjです。

最近メガネを買うときはブルーライトカットメガネにしています。
とりあえず付けれるものは付けとこうという考えですが正直あまり効果は実感できません。
昔からPCに向かって作業等をしていたため慣れているのもあって目の疲れを感じにくいのかもしれません。

次買うものは無しを選んでみて効果を確認したく思っています。

レンズは無色のブルーライトカットメガネがいいかもしれません、色付きも度合いがあるのかもしれませんが色付きのメガネで買い物等をすると
肉の色が変色しているように見えたりで正しく色がわからないので古い肉なのか新しい肉なのかよくわかりにくかったり傷んでいるものの見分けがつきにくくなったりしている気がします。

そういう意味でも無色のメガネは買っておかないといけないなと感じました。

コメントもコードの一部

他者の書いた古いソースコードの修正したり、機能追加をしたり、
メンテナンスする機会がありました。
思った以上に時間を費やしてしまったのですが、その主な原因は、
①処理の大きな流れが見えてこない
②なぜその処理を行っているのかが分からない

というものでした。
時間が経ったり、当事者ではない人が読んだりすると、
その開発者がどのような考えでその処理に至ったのか、
なかなか理解できない事を実感しました。

コードのコメントには「なぜそうするのか」など、
コードからは読み取れない情報を記入するべきだとあります。
一方、何でも書けばよいわけではなく、
余計なコメントは可読性を損なってしまいますが、
それでも無いよりはあったほうが助かります。

メソッドやクラスを定義するときと同じように、
使う側の相手の気持ちになって、使いやすいように、
読み手の気持ちになって、処理の理由がわかりやすいように、
適切なコメントを考えたいと思います。

 

ActionデリゲートやFuncデリゲートでタプルを使用

またC#のタプル(ValueTuple)の話です。

ActionデリゲートやFuncデリゲートは、複数個の引数を指定することができます。
例えば以下のようにstring型の引数を2つ受け取るActinデリゲートを受け取るHogeメソッドが定義できます。
(実装内容に意味は無いのであくまで参考の実装です)


void Hoge(Action<string, string> action) {
    action("aaa", "bbb");
}

これで動くのは動きますが、2つのstring引数が何者なのかコードからは全く読み取れないですね。
このメソッドを作った本人で無いと使用できないメソッドになっています。
今までならなせいぜいXMLコメントに引数の意味を記載してメソッド使用者に伝えることになります。
XMLコメントに「第一引数は名前、第2に引数はIDです。」みたいなことが書いてあれば、利用者は以下のように実装が可能でしょう。


Hoge((name, id) => {
    Console.WriteLine(name);
    Console.WriteLine(id);
});

しかし、タプル(ValueTuple)を使用すれば、このような問題は解決します。
先程のHogeメソッドを以下のように変更し、string型2つを保持するタプル変数1つにします。


void Hoge(System.Action<(string Name, string Id)> action) {
    action(("aaa", "bbb"));
}

これならば、2つのstring型に名前が付き、いちいちXMLコメントに記載しなくても最低限の意味は分かるようになりました。(あくまで最低限。XMLコメントが不要ということでは無いです。)
利用者側の実装は以下のようになります。


Hoge(x => {
    Console.WriteLine(x.Name);
    Console.WriteLine(x.Id);
});