プログラムを中心とした個人的なメモ用のブログです。
タイトルは迷走中。
内容の保証はできませんのであしからずご了承ください。
私は最初に猫でもわかるC#プログラミングという本でC#の勉強をしましたが、その中で唐突に Func やら Actionやらが登場し、ほとんど説明がなかったのでちんぷんかんぷんでした。
ネットで調べてやっとわかったのですが、ラムダ式を活用するためにも、ここらへんはしっかり説明しておいたほうがいいんじゃないかと思いました。
ラムダ式自体の説明は結構わかりやすかったんですけどね。
というわけで、ここに調べたことを自分なりにわかりやすくまとめておきます。
デリゲート自体の理解は C における関数ポインタと同じだと考えればすぐに理解できました。
ただ、関数ポインタもそうですが、デリゲートの宣言というのはとても面倒です。
そのため、型パラメーターを使用し、汎用的に使用できるデリゲートが最初からいくつか定義されているようです。
これらのデリゲートのことを、定義済みデリゲートというようです。
いろいろあるようですが、よく使用するのは Func と Action だと思います。
簡単に言えば、
となります。
どちらも引数の数に応じてオーバーロードされているようです。
詳細は参考URLを参照してください。
リーダブルコードを読むと書いてある以下の文章。
例えば、「ヒューリスティック」・「ブルートフォース」・「ナイーブソリューション」などがそうだ。コメントが長くてくどいと感じたら、こうした表現を使えないか確かめよう。
ヒューリスティックはコードコンプリートで何度も出てきましたし、ブルートフォースもよく聞きます。
しかし、ナイーブソリューションは初めて聞きました。
意味がわからなかったので検索してみると、日本語のページでは回答が見つかりませんでした。
仕方ないので、"naive solution" でググってみます。
英語苦手なんですけどね・・・。
いくつか見つけた中では、以下のページがそれっぽい回答でした。
「経験豊富なプログラマーが最初に思い付く解決手段」や「愚直な(安易な)解決手段」とでも言えばいいのでしょうか。
あまり自信がないので、原文を読まれたほうがよろしいかと思います。
ブログなどにソースコードを載せる際、GitHub Gist を利用するととても便利です。
ここでは GitHub Gist のコードのいろいろな埋め込み方法をまとめてみます。
ファイル名の最後に ?file=ファイル名 を追加すると、そのURLの中の特定のファイルだけを埋め込むことができます。
以前は1ファイルごとに New Gist から作成していたのですが、この方法を知ってからは出来る限りファイルをまとめて登録するようになりました。
しかし、デフォルトで出来るのはこれだけのようです。
その他の埋め込み方をするために gist-embed というのがあるようです。
これを使えば、例えば特定の行だけ埋め込んだり、ハイライトしたり、いろいろな埋め込み方ができます。
以下のページに使い方とサンプルがあります。
以下、個人的によく使うものを抜粋しておきます。
<code data-gist-id="ID"></code>
data-gist-file="ファイル名"
data-gist-hide-footer="true"
data-gist-line="2" data-gist-line="2-4" data-gist-line="1,3-4"
data-gist-highlight-line="1,3,5"
blockdiag シリーズはテキストからブロック図などの画像を生成する画像生成ツール群です。
以下の図が作成できます。
Windows の場合、Sphinx のスタンドアロン版があるので、それをインストールすると自動で blockdiag もインストールされるようです。
しかし、私の場合、Sphinx をインストールしても blockdiag が入っていませんでした。
なので、pip を使用してインストールを試みました。
※ Python のインストールと環境変数の設定が完了している必要があります。
$ pip install sphinxcontrib-actdiag sphinxcontrib-blockdiag sphinxcontrib-nwdiag sphinxcontrib-seqdiag
しかし、これも途中でエラーとなり失敗してしまいました。
仕方ないので、blockdiagの公式にある通り、easy_install を使用してインストールしました。
尚、Pillow が依存している「Microsoft Visual C++ 2008 SP1 再頒布可能パッケージ」がインストールされていない場合は、そちらもインストールする必要があるようです。
32ビット版と64ビット版が存在するため、環境に合わせて適切なものをダウンロードし、インストールしてください。
$ easy_install pillow
$ easy_install actdiag blockdiag nwdiag seqdiag
これでインストールできました。
C#のデリゲートとイベントについて勉強していて、以下の疑問が残りました。
イベントってデリゲートと何が違うの?
event キーワードを付けることで何が変わるの?
猫でもわかるC#プログラミング 第3版という本を読んで勉強していたのですが、この点についてこの本では全く触れていません。
というわけで、ネットで調べていたら、丁寧に解説してくれている方がいました。
詳細な説明はそちらをみていただくとして、簡単にまとめると以下の2点のようです。
event キーワードを指定すると、加算代入演算子 += と減算代入演算子 -= しか使用できなくなります。
間違えて代入演算子を使用してしまい、それまでに追加したメソッドがクリアされてしまうのを防ぐことができます。
イベントハンドラはイベントが発生したときのみにコールして欲しいものです。
event キーワードを指定することで、直接デリゲートをコールできなくなります。