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

広告

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

C# LINQラムダ式入門 3. 後はとりあえず俯瞰してみる

前々回の.Wher(x =>...)
前回の.FirstOrDefault(x =>...)

が体に染みつきましたでしょうか?
ここで、色々なメソッドを どどん! と一気に紹介しましょう。
というか、コピペするのもなんなので、MSDN見てみましょう!
が、混乱するので引数の型は一切見ないで下さい。
メソッド名のみ順に見て行って下さい。
この中で、Funcが引数に入っている人たちが、
今までやってきた構文で使える仲間達です。
(わかりにくければ、Funcをブラウザで検索しながら見て下さい)
多重定義(オーバーロード)も無視して下さい。

ここでは、どんなことが他にできるのかに焦点をあてて
俯瞰するのが大事です。


Enumerableメソッド

だいたい名前を見れば、働きはわかりますよね?
名前でわからなくてもだいたいその説明みればわかりますよね。

はい、これであなたの表現力はどかんと上がりました。
あとは、状況に合わせて使ってみるのみ。

多分、使わないのも中にはあるでしょう。
それはそれで放置です。細かいことは気にしない。

次回は、今まで存在を無視し続けたFuncさんについて触れていきましょう。

C#最初の1冊に・・・

標準講座C# (Programmer’sSELECTION)




C#次の1冊に・・・(.Net4.0版もあるけど、そっちは読んでないので勧め辛い)

Effective C#




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

徹夜小説 ゴールデンスランバー

これも徹夜小説です。

冒頭だけ少しダラダラ書いてあって
「面白くないかなー」と思ったのですが、
事が起こってからは、面白くて
どんどん読み進めたくてしょうがなくなりました。

追われるハラハラ感がたまりません。
おすすめ。
やや「ありえねー」という設定なども
ありますが、そこは許せてしまうのが
伊坂マジック。
まぁ、そういう意味では、リアリストには
おすすめできないかもですが…。

ゴールデンスランバー (新潮文庫)

新品価格
¥900から
(2012/3/22 07:28時点)




ゴールデンスランバー


C# LINQラムダ式入門 2. 次のLINQ構文

前回はWhere句を紹介しました。
なんかよくわからんけど、使えたーってところまで来ましたか?

今回は、もっとLINQ構文と仲良くなる為に、Where句以外で
よく使うもの(自分調べ)を紹介しましょう。

・FirstOrDefault

リンクを使わない時。

    int[] ages = new int[] { 11, 10, 21, 22, 30 };
    int firstAge;
    int firstOfOver20;
    int firstOfOver40;

    foreach (int age in ages)
    {
        firstAge = age;
        break;
    }

    foreach (int age in ages)
    {
        if (20 <= age)
        {
            firstOfOver20 = age;
            break;
        }
    }

    foreach (int age in ages)
    {
        if (40 <= age)
        {
            firstOfOver40 = age;
            break;
        }
    }

LINQを使うと、こうなります。
かなり見やすいコードになったと思いませんか?

    int[] ages = new int[] { 11, 10, 21, 22, 30 };
    int firstAge = ages.FirstOrDefault();
    int firstOfOver20 = ages.FirstOrDefault(x => 20 <= x);
    int firstOfOver40 = ages.FirstOrDefault(x => 40 <= x);

働きの説明はコードからわかると思うので省略。
値型だから、デフォルト値(firstOfOver40のケース)はゼロになりますが、
参照型であれば、デフォルト値はnullになります。

ここで、一つだけ注意。
よく似たLINQ構文に、Firstというものがあります。
が、Firstは極力使わないことをお勧めします。
なぜなら、Firstは条件を満たすものが必ず存在する
という前提でしか使えない
からです。
つまり、こういうことです。

    int firstOfOver40 = ages.First(x => 40 <= x); // 例外発生!

条件にあうものがなければ、try〜catch構文で囲んでいない限り
アプリケーションはサヨナラしてしまいます。
もしコレクション内に該当するものがない場合に
例外を発生する動作を望んでいるとしても、
FirstOrDefaultで書いて明示的にそれにあった例外を
返す方が見やすいコードだと思います。

    int firstOfOver40 = ages.FirstOrDefault(x => 40 <= x);
    if (firstOfOver40 == 0)
    {
        //// 例外発生処理
    }

FirstOrDefaultはかなり使いどころがあると思いませんか?
前回のWhereとFirstOrDefaultで (x =>・・・)をたくさん使って
表現を体にしみこませて下さい。


C#勉強の最初の一冊。ド忘れしたC#構文を思い出す辞書がわりに。

標準講座C# (Programmer’sSELECTION)

新品価格
¥5,040から
(2012/3/17 08:19時点)




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

お勧め シャンプー デミ エクリナール

自分が買うものは自己アフィして地道に稼ごうの巻。

美容室でお勧めされたシャンプー。
市販のシャンプーはお湯に溶かすと
不純物がグデグデのドロドロに出てくるらしい。
そんなもので洗わない方がいいっすよ!って、
勧められたので、こちらを購入。

ただし、その店では買わずにネットで調べて
最安で買う自分は節約家ですよね(自己満足)。

一応、検索してみつけた中での送料入れて最安は↓。
キャンペーン中は少なくとも最安と思われます。

◆送料無料(3150円以上)★5%引?◆ デミ 薬用 エクリナール スキャルプ シャンプー [医薬部外品] 800mL ☆ DEMI shampoo サロン専売品 激安 セール ヘアケア {3150円以上送料無は料3/21 9:59迄} 【after0307】 [5250円以上&クーポンで5%引3/21 9:59迄]

価格:3,528円
(2012/3/19 08:45時点)
感想(1件)




嫁も一緒に使ってますが、女性で初めての人は
コンディショナーとセットのやつがいいです。
僕みたいな髪短めの野郎属性の人は、
コンディショナーいらないと思われます。

C# HashSet/Dctionary 大文字小文字 区別しない

そんな方法はないと1年くらい本気で思っていました。

変数宣言時に、

var hashSet = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
var dictionary = new Dictionary<string, object>(StringComparer.OrdinalIgnoreCase);

とするだけだったんですね・・・。

参考(MSDN):Dictionary コンストラクタ (ジェネリック IDictionary, ジェネリック IEqualityComparer)

と、ついでに初めて使う人はかならずぶちあたるのですが、
StringComparerにOrdinalIgnoreCaseやらInvariantCultureIgnoreCaseやらがあることについて。
どっちもIgnoreCase(大文字小文字無視)やけどどっち使うねーん。
と、そのあたりはの詳細はこちらを参考にするのがよいかと
ちなみに私の仕事はいつもOrdinalIgnoreCase使いますが・・・。

参考(MSDN):.NET Framework で文字列を使用するためのベスト プラクティス


[広告]C#勉強の最初の一冊に・・・

標準講座C# (Programmer’sSELECTION)

新品価格
¥5,040から
(2012/3/17 08:19時点)


C# LINQラムダ式入門 1. 便利なとこから始めよう

C#は非常に書きやすいし、見やすい言語です。
が、LINQとラムダ式に関しては、
かなり特殊な見栄えでとっつきにくい。
これが、僕の第一印象です。

C#は、数年前に書き始めましたが、
最近やっと自分の中でこれらが馴染んだ気がするので、
少しずつ紹介していきたいと思います。

まず、初めてこれらのコードを見た人は、
二、三度見返したと思います。
「なんだ、これは…」
そう思ったでしょう。

今だから思うのですが、最初は無理に理解しようとしない方がいいと思います。
簡単便利な使い方から初めて、
自分の中で少しずつ咀嚼(そしゃく)するのがいいです。
最初に専門書の説明をだらだら見た結果、
僕は一時期LINQ嫌いになってしまいました。
だから、小難しいことは最初はやめましょう。

というわけで、最もわかりやすくて使いやすくて
使用頻度か高い(自分調べ)Whereさんから慣れ親しみ始めましょう。

次のようなコードがあるとします。

int[] ages = new int[]{11, 10, 21, 22, 30};
int sumOfAdultAges = 0;
foreach (int age in ages)
{
    if ( 20 <= age )
    {
        sumOfAdultAges+=age;
    }
}

要するに、foreach, ifパターンです。
これをLINQでかっこよく書くと、こうなります。

int[] ages = new int[]{11, 10, 21, 22, 30};
int sumOfAdultAges = 0;
foreach (int age in ages.Where(x => 20 <= x))
{
    sumOfAdultAges+=age;
}

なんか、かっこいいですよね。
多分、説明もいらないですよね。
え、いりますか?いや、体で覚えて下さい。
Whereの引数の型なんか無視、無視。

in 〜.Where(x => ・・・)

をインテリセンスの力を借りながら、書けるように
なればいいだけなんですから。
気をつけることは、
「・・・」部分にif ( )の中に書いていたものを書くぐらいですかね
このレベルであれば、ほどよくわかりよいですよね?

第一歩はここからで、これで十分です。
私が初めて実務で書いたLINQもこれが最初です。
「if 書いたらいいやん」と思かもしれません。
もちろん書いてもいいですよ。
ifで、書くほうがいいことだって多々あります。

ここで一つ大事なことなのですが、

Q. なぜLINQを使うのか?

ということです。答えは簡単。

A. LINQで書いたほうが、美しいから

LINQなんてただの表現手法の一つに過ぎません。
LINQがなくてもコードは書けます。
使うかどうかは、自身の美的感覚に従って下さい。(注1)

LINQで書いたほうが美しければ、LINQを使えばいいし、
LINQを使うと逆に見にくくなる場合は使うべきではない。


まぁ、そんなもんです。
難しく考える必要も、無理に使用する必要も、とりあえずはないですよ。


注1:美しく書く以外の目的もあるにはあります

最終的には、More Effective C#の内容を
読めるところまで手伝えたらなぁと思っています。
”美しく書く”以外の目的を早く知りたい人は、
More Effective C#をフライングして読んでみて下さい。
ただし、LINQに慣れてから読んで下さいね。
でなければ、消化不良を起こします。
私のように(笑)

More Effective C#

新品価格
¥3,780から
(2012/3/15 22:41時点)




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

徹夜小説 とある飛空士への追憶

久しぶりに寝る間を惜しんで読んだ小説。

例えば、スカイクロラシリーズが好きな人はお勧めだと思います。
さすがに森博嗣みたいなスーパーへんてこりんな世界観はありません。
ただ、森博嗣ほど小難しい理屈はなく、気軽に楽しめる作品だと思います。
スカイクロラの独特の世界観はさておき、戦闘シーンに胸が躍った僕と
同じ感覚の人は読んでみて下さい。
きっとこれでも胸が躍ります。

ライトノベルですが、文章力もけっこうしっかりしていると感じました。

ちなみに、続編は読む予定はないかな。
最初だけ立ち読みしてみましたが、
あまりにこっちが綺麗に終わり過ぎてて、同じ世界であっても違う主人公を
なんとなく受け入れる気になれなくて・・・。

とある飛空士への追憶 (ガガガ文庫 い)

新品価格
¥660から
(2012/3/14 23:15時点)




映画化されたようですね。私は公開されたのを知らず見ていませんが・・・。
まぁ、映画化するくらいおもしろいのですよ。はい。

とある飛空士への追憶 Blu-ray プレミアム・エディション

新品価格
¥6,006から
(2012/3/14 23:13時点)


<< 前へ    
×

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