アフィリエイト広告を利用しています

広告

この広告は30日以上更新がないブログに表示されております。
新規記事の投稿を行うことで、非表示にすることが可能です。
posted by fanblog

C# LINQラムダ式入門 インデックス

C# LINQラムダ式入門 1. 便利なとこから始めよう
C# LINQラムダ式入門 2. 次のLINQ構文
C# LINQラムダ式入門 3. 後はとりあえず俯瞰してみる
C# LINQラムダ式入門 4. LINQの引数の型を理解する
C# LINQラムダ式入門 5. ラムダ式をもう少し詳しく見てみる

C# LINQラムダ式入門 5. ラムダ式をもう少し詳しく見てみる

「ラムダ式の書き方わからん・・・むむむ」

だった人も、

「なんかよくわからないけど、
 .Where( x => ...)
 とか書いて、...のところに条件書くと
 foreachとか綺麗に書けちゃったりするよねー」

というところまでついてきてくれていると信じて話を続けましょう。

今回、C#の入門書でラムダ式という章が出てきたら
最初に書いてあってわけがわらかないところを(ついに)解説します。
でも、ここまで来て少し体に馴染んできた人に対して、
抑えて欲しいのは一つだけです。

ラムダ式には、単文と複文の二つの書き方がある。

まぁ、迷うとしたらこれくらいです。もう山場は越えています。
安心して進みましょう。

思い出して下さい。

intのコレクションがあった場合、それに「.Where」とつけると、
その引数はFunc<int, bool>でした。
そして、Func<int, bool>は、デリゲートでしたね。
Func<int, bool>デリゲートってなんだっけって言うと、
引数intで戻り値boolの関数を格納する変数のようなものでした。
とどのつまり、

Whereには、引数intで戻り値boolのメソッドを食わせる

ということになります。
ところがどっこい、「引数intで戻り値boolのメソッドを食わせる」
という場面で、「x => ...」というラムダ式を食わせてきたわけです。

ということは、「x => ...」というラムダ式は、「引数intで戻り値boolのメソッド」
表現していなければ辻褄があいません。
というわけで、それを表しています。
要するにラムダ式はただのメソッドです、恐れるに足りません。

private bool MyLamda1(int x)
{
return 20 < x;
}

これを、わざわざ外部メソッドで書かずに、その場で記述したのが、

x => 20 < x

です。
実際、外部メソッドとして定義して.Where(MyLamda1)
と書くこともできたりします。
でも、「これだけのためにメソッド一つ定義するか!?」
ってとこにラムダ式の存在意義があります。

さて、さらっと通り過ぎましたが、

x => 20 < x

というこれは、単文に分類されます。

単文とは、外部メソッドで定義した場合の
「return ・・・」の「・・・」の部分だけ抽出して記述するパターン
です。
MyLamda1の「return 20 < x;」だけ抽出して書いたら、
「x => 20 < x」となるわけです。

じゃあ、複文って言っているのは何かっていうと、
ラムダ式で表したいメソッドが、

private bool MyLamda2(int x)
{
int dummy = x;
return 20 < dummy;
}

みたいに、「return・・・」だけでは終わらない場合。
(例でdummyに代入する意味はありませんが、
 まぁそんなこんなで、「return・・・」だけじゃ書けないよ!
 って場面があるのは容易に想像できると思います)

この場合のラムダ式はこうなります。

x =>
{
int dummy = x;
return 20 < dummy;
}

x =>の後に、
{}を書けば自由にメソッドそのものみたいに色々書けて便利。
単文と違って、最後はreturnで締めるよって、いうのが複文。


この
「単文では、returnいらないけど、
複文ではreturnがいるよ」
ってところがかなり最初は混乱するのだけれど、
慣れたら便利ですよ、はい。

LINQラムダ式入門は、これで以上です。

引数が二つになったら (x, y) =>だ、とか細かいことを色々言いだすと
切りがないので言いません。

ここまで来れたら、後は自分で進んでいけると思っています。
私はそうだったので多分皆様もそうでしょう。

LINQとラムダ式は、かなり最初のハードルが高かったと感じたので、
これらの記事で少しでも最初のハードルを越える助けができれば、
まとめた甲斐があったかなと思う次第です。

感想や苦情やその他色々あればコメント下さい。

誰も、この記事読んだところで、
多分、リンクから本は買ってくれないと思うので、
せめて誰かの役に立った感が欲しいとか
もう当初の目的は逸脱して終了します(笑)

More Effective C#




C# LINQラムダ式入門 1. 便利なとこから始めよう
C# LINQラムダ式入門 2. 次のLINQ構文
C# LINQラムダ式入門 3. 後はとりあえず俯瞰してみる
C# LINQラムダ式入門 4. LINQの引数の型を理解する
C# LINQラムダ式入門 5. ラムダ式をもう少し詳しく見てみる

.NETFramework フリー数値計算ライブラリ Math.NET Numerics

.NET Framework(C#とかF#とか)で動く数値計算ライブラリを探すのに苦労して
やっと見つけたので紹介します。

C++とかの数値計算ライブラリとかはたくさんあって、
最初はそれを利用しようと頑張ったのですが、
やはり相互運用のコードが非常に面倒なのです。
(P\Invokeとかね)

プログラマは生み出したいコードを書くのに時間を割くべきで、
それ以外の環境などのところに時間をかけるべきではない(持論)。
使えるものは使わしていただきましょう。

Math.NET Numerics Beta2

ヘルプの見出しをざっと見る限り下記のようなことはできるのかな・・・という感じです。

・線形代数
・補間
・統計
・ランダム
・確率モデル
+マルチスレッド対応

[使い方]
・先のリンク先からzipをダウンロードする
・zipを解凍する
・lib->Net40->MathNet.Numerics.dllを、VisualStudioで参照に追加する

今からちょこちょこ使ってみるので、
各使用例はまたちょこちょこと紹介します。

以上。

Microsoft Visual Studio 2010 Professional アカデミック

新品価格
¥10,717から
(2012/4/8 07:49時点)


Microsoft Visual Studio 2010 Professional アップグレード

新品価格
¥53,555から
(2012/4/8 07:50時点)


気兼ね無く1万円札を両替する方法

そんな大層な方法ではないのですが、
ふと電車を降りたときに、
財布には一万円札しかなくて、
あー、細かい札がいるんだったー

ってなったとき。

自動販売機は一万円使えないのが多いし、
コンビニで一万円札使って安い物を買うのも気がひける。
(僕は気が小さいので定員の視線が嫌だし、
 僕はケチなので必要のないものを無理やり買うのも嫌だ)





こんなとき、
電子マネーを1000円だけチャージすると、
必要ないものを買うこともないし、
一万円札を崩すことができます。

ICOCAとか、SUICAとか、Edyとか。

どうせ電子マネーは使うもんだし、
必要ないものを買うよりは賢いんじゃないかなって、
最近ふと思ったので紹介しときます。



iPhone ロック状態で動画を再生する方法

iPhone(iOS5)で、
動画の音だけを聞きたいときってありますよね。
歩きながら
音楽動画の音楽だけ聞きたいとか、
英語の勉強動画の英語だけ聞きたいとか。

でも、動画の場合はロックした瞬間に再生が
停止してしまいます。
かと言って、ポケットに入れて音を聞きたいだけなのに
ポケットの中でロックもせずに動画再生し続けるのも、
電池が無くなってしまいそうで嫌だ。

回避する方法発見しました。

イヤホンをさしている状態で・・・

1. 動画を再生します。
2. 再生した状態で、ホームボタンを二度素早く押します。
3. 下側に出てきたメニューを左から右にスワイプします。
4. 表示された再生ボタンを押します。
5. そのままロックボタンを押します。

画面はロックされますが、
音は再生され続けます!
僕は英語動画を電車で見ていて、
電車から降りたら音だけに切り替えて
歩きながら聞くというときに
この方法を重宝しています。

これってバグかな、仕様かな。
イヤホン指してないと再現しないあたり、予期せぬ仕様か?!

iPod iPhone用 電池不要 ノイズキャンセリングヘッドホン PHITEK blackbox i12





C# LINQラムダ式入門 4. LINQの引数の型を理解する

今回は今まで無視してきた
Whereさんとか、FirstOrDefaultさんの
引数の型について見ていきます。

が、そのためにはまず、デリゲートについて。

さて…
デリゲートってなんだー?!
関数ポインタみたいなもんでしょ、とか、
メソッドを格納する変数の型でしょ、とか。
概ね、その理解で困ることはないと思います。

ただ、教科書に書いてあるような
「デリゲートの宣言をして、メソッドを登録してデリゲートを呼び出すのだ!」
…などと言った使い方はほぼしないと思います。

何をしないかというと、宣言ですね。
これ↓

× delegate bool MyDelegate(int a);

まず、宣言めんどくさい。
次に、宣言がクラスフィールドとかと混ざって、
こんなもの書いてあったらコードが見づらくなる。

代わりに何を使うと言えば、Funcさんです。

var myDelegate = new Func( MyFunction );

このように、デリゲートを宣言しなくても、
同じ働きをするコードを書くことができます。
何がすごいってこのFuncさん、

Func<"第一引数の型", "第二引数の型",・・・, "戻り値の型">

とすることで、任意のデリゲート型を作れてしまうことです。
引数の型は任意だし、数も16個まで指定することができます。
(これで事足りない数の引数のメソッドは作るべきではない!)

delegate int MyDelegate2(double a, double b);
→Func< double, double, int >で代用!

みたいな感じで対応することを覚えて下さい。
戻り値を最初に書くか最後に書くかを
最初はド忘れするので(僕だけ?)、
プログラマ的な感覚として
"戻り(return)は最後"と覚えておいて下さい。

というわけで、デリゲートは、
自分で宣言せずに万能な入れ物であるFuncさんに任せましょう。
Funcさんすげー。

さて、Funcさんに親近感をいだいてもらえたところで、
".where("と書いたときのインテリセンスを思いだしてみましょう。
はい、思い出せないですよね。画像をはっておきます。



「あー、引数の型にわけわからんこと書いてあったと思ったら、
Funcさんあなただったのね。」

と思えたら、今回は満足して下さい。
次回は、各種Funcさんに対応するラムダ式の
書き方について解説したいと思います。

標準講座C# (Programmer’sSELECTION)




[インデックス]
C# LINQラムダ式入門 1. 便利なとこから始めよう
C# LINQラムダ式入門 2. 次のLINQ構文
C# LINQラムダ式入門 3. 後はとりあえず俯瞰してみる
C# LINQラムダ式入門 4. LINQの引数の型を理解する
C# LINQラムダ式入門 5. ラムダ式をもう少し詳しく見てみる

紙に印刷せずに、紙に印刷したレベルで、ドキュメントの間違いに気づく方法

普段Wordでドキュメントを書くことが多いのですが
Wordで何度も見直したのに、
ケアレスミスがいくつもあったりします。

不思議なことに、紙に印刷すると
間違いがあれれってほど見つかる。
紙がもったいないけど、
間違いを無くすためには仕方ないから
印刷して見直しするかー、

って経験ないですか?

紙に印刷せずに間違いに気づく方法あります!

方法はたったの2ステップ。
1. PDF に出力する
2. PDF Readerでドキュメントをチェックする

感覚としては、紙 > PDF >>> Wordプレビュー
さすがに紙の魔力には勝てませんが、
集中すればミスは無くせるレベルでだと思います。

PDFの作成は、
"Primo PDF"などのフリーソフトでできます。
仮想プリンタみたいなのができて、
印刷すればPDFを作成してくれます。

PDF Readerは、
"PDF-XChange Viewer" がおすすめです。
起動がかなり高速で、フリーのAdobe Readerを
使っている人は多分人生損してます。

あ、でも印刷に関しては、Adobe Readerの方が
優秀かと思いますので、上手に使いわけてください。

だまされたと思って一度やってみてください。
なぜかわかりませんが、間違いはすごく発見できます。

Adobe Acrobat X Standard Windows版




コピー用紙 A4×5冊 A4

新品価格
¥1,522から
(2012/3/27 00:05時点)


C# 実数値GA(遺伝的アルゴリズム) サンプルプログラム

C#で実数値GA(遺伝的アルゴリズム)のコード作ってみました。

大学時代、研究室が遺伝的なものを
よく扱っていたので、
ちょっとした出来心で作ってみました。

C#で書いたら革命的に読みやすい、
と自分では勝手に思ってます。

アカデミックな人でも使えるように、
最低限の拡張性は考慮しながら、
できるだけシンプルに作りました。

.Netframework4.0で動くもんなんだから、
マルチスレッドとかを入れてみたかったんですが、
コードが遺伝的アルゴリズムの
本質以外のものが入ってしまうので、
見づらくなるのかな、と思ってやめました。
多分、興が乗れば別途改造します。

が、このブログは、
画像しかアップロードできないので困りました。

というわけで、面倒なのでzipをjpgに化けさせておきます。
(だけで、プログラムやるような人であればわかりますよね?面倒でごめんなさい)

ダウンロード

プロジェクト自体は、Visual C# 2010 Expressで作っています。

「ダウンロードできないぜ」とか、「解凍できないぜ」とか
苦情が多いようであれば、
アップローダにもアップすることを検討します。
改造などの要望は、おもしろそうであれば
やってみるかもしれませんので、コメントください。

テスト嫌いと公言している私なので、
商品レベルでの品質確認をプライベートで
行っているわけもありませんので
お気をつけください。
バグレポートは下されば、直します。

主にこのページ(pdf)を参考に作りました。
なにせ、遺伝的アルゴリズムの研究を
私が実際にやっていたわけではありませんので、
細かいところで理解が間違っていたらすいません。

他にサンプルコードが手に入ったのは・・・
研究室にあったこの本(C++)とか。
(ただし、コードを動かすまではけっこうな努力を要したような記憶があります)

遺伝的アルゴリズムと遺伝的プログラミング

新品価格
¥3,990から
(2012/3/25 22:13時点)




続編のこれにもサンプルコードがあるようです。
(こちらは読んだことないのですが、アマゾンレビュー的には
 そこそこよさそうな印象を受けます)

続 遺伝的アルゴリズムと遺伝的プログラミング 使いこなせるGA,GP

新品価格
¥3,990から
(2012/3/25 22:20時点)




計算速度を求めるならばC++で
書籍の方から攻めてみてください。

多分、やりたいことと違うところで時間を消費するので、
お勧めはしませんけど・・・。

あと、ダウンロードした方はコメントいただけると嬉しいです。

友人 結婚祝い カタログギフト

友人が結婚したので、お祝いに送りました。
私は先に結婚して結婚式にも来てもらっていたのですが、
友人は身内でやるということなので
まぁ別枠でお祝いを、と思った次第です。

色々見たのですが、これにしました。

【送料無料】カタログギフトETERNAL FRIENDS エターナルフレンズTコース 「地球」テッラ 30500円コース

価格:25,620円
(2012/3/24 11:31時点)




決め手は以下。
・3万円相当なのに、2万5千円で送れる(友人ごめんw)

エターナルフレンズに色々シリーズがあるのですが、
テッラにした理由:

・これより安いコースだと、カタログ内の温泉旅行が日帰りコースになっている
 (テッラは1泊できるのがついていました)

温泉をセレクトするとは思いませんが、
カタログギフトが来て、温泉日帰りってあるとなんか嫌でしょ?

つまらない見栄だと笑ってくださいw

お勧め ビタミン剤 アインゴールド錠

ビタミン剤を続けて飲むと、いいことがあります。

1. 肩こりがましになる
2. 疲れが抜けやすくなる

すごいマイナーなビタミン剤なんですけど、
親がずっとこれを愛飲していたので、
僕も続けて愛飲しています。

朝晩続けて飲んでいたら、
うちの親は肩凝りが全くなくなったそうです。

僕は大学の受験勉強で疲れたときにも
飲んだいたのでかれこれ10年以上の付き合いですね。

アリナミンEXのジェネリック医薬品『アインゴールド錠 200錠』 【第3類医薬品】




プログラマなせいか、僕のほうが親より凝りやすいのか、
僕は肩凝りが全くなくなるというとこまでは改善しませんが・・・。

肩凝りがひどい人は、
ビタミン剤の対症療法だけでなく、
原因自体を取り除くように努力したほうがいいと思います。

僕は変な肩凝りに長いこと悩まされているので、
ビタミン剤で騙しだまし生活しながら、
根治する方法を模索しています。

また、効果的な方法を確立した際には、記事にしたいと思います。

それまでは、僕はこれを飲み続けます・・・。
ちょうどなくなりそうになって注文しようと思ったのでついでに記事にしてみました。
<< 前へ     >>次へ
×

この広告は30日以上新しい記事の更新がないブログに表示されております。