かずきのBlog

C#やJavaやRubyとメモ書き

目次

Blog 利用状況

ニュース

わんくまBlogが不安定になったため、前に書いてたはてなダイアリーにメインを移動します。
かずきのBlog@Hatena
技術的なネタは、こちらにも、はてなへのリンクという形で掲載しますが、雑多ネタははてなダイアリーだけに掲載することが多いと思います。
コメント
プログラマ的自己紹介
お気に入りのツール/IDE
プロフィール
経歴
広告
アクセサリ

書庫

日記カテゴリ

C#3.0が話題?

Rさんの所で炎上しかかってる?var論争。
VS2008の日本語版が正式に出たこともあってほっとな話題であることに違いはない!
ということで、最近Javaネタだらけ(仕事がJavaなので…)だったけど.NETの世界に少し戻ってみようと思う。

 

varはどうよ?

個人的には、ガンガン使っていいんじゃないだろうかって感じです。
でも、使っちゃ駄目よってプロジェクトで指定されたら、無理に反発する程でもないと思います。

郷に入れば郷に従えかな。

個人的には、1メソッド5行~50行程度以内じゃないと気持ち悪いので、その範囲ならvarを連打しても可読性が落ちるとは感じないかな。
IDEもあるし…

var id = GetID();
var name = GetName();
var hoge = obj.Piyo; // こいつ何型だ!?

適当にvarを使うわかりにくくなりそうなパターンを書いてみたけど、最後みたいに変数名とプロパティ名(メソッド名)が何をするかあらわして無いと、ちょびっと困惑しそうなくらいかな??
変数名と、メソッド名とかが適切につけられていれば困惑することは少ないと思います。

(スクリプト言語とかだ、そもそも型が何かわからないけどたいした問題になってないし)

 

匿名型

Rさんところのコメントを見てると匿名型の意見も割れてそう。
個人的には、匿名型は普段使いはあまりしなさそうな感じがする。

new { Name = GetName(), Age = GetAge() };

みたいなことをするならおとなしく

var name = GetName();
var age = GetAge();

かなぁ。

匿名型は、メソッドの戻り値とかにも使えないし、引数で渡すならobject型の引数にしか渡せないから、メソッド内でローカルで使うやっつけの型が必要になるケースなんてなかなか思いつかない。
しいて言うなら、リフレクションでプロパティの情報を舐めて何か処理をするようなメソッドに渡すのに使う。

たとえば下のような感じ。

    class Converter
    {
        private IDictionary<string, Func<object, string>> convRules = 
            new Dictionary<string, Func<object, string>>();
        private static readonly Func<object, string> DEFAULT_RULE = (x) => x.ToString();

        public string Sep { get; set; }

        public void AddConvertRules(string propertyName, Func<object, string> convertRule)
        {
            convRules[propertyName] = convertRule;
        }

        public string ToString(object obj)
        {
            // プロパティ舐めまわし
            var props = obj.GetType().GetProperties();
            var ret = new string[props.Length];
            for (int i = 0; i < props.Length; i++)
            {
                var prop = props[i];
                var rule = GetRule(prop.Name);
                ret[i] = rule(prop.GetValue(obj, null));
            }
            return string.Join(Sep, ret);
        }

        private Func<object, string> GetRule(string propertyName)
        {
            if (convRules.ContainsKey(propertyName))
            {
                return convRules[propertyName];
            }
            return DEFAULT_RULE;
        }
    }

ToStringメソッドが、リフレクションでプロパティを走査して処理をやってる。(forの中のintがvarじゃないのは手がintと勝手にうってしまったから…慣れってこわいわ)
このToStringに対して、↓のように匿名型を渡す。

    class Program
    {
        static void Main(string[] args)
        {
            var c = new Converter();
            c.Sep = ", ";
            c.AddConvertRules("Name", (x) => x + "さん");
            c.AddConvertRules("Age", (x) => x + "才");
            Console.WriteLine(c.ToString(new { Name = "Taro", Age = 12 }));
        }
    }
実際は、GridViewにデータを渡したりとかかな?
ASP.NET MVCの画面まわりでは多用することになってたような気がする。

投稿日時 : 2007年12月26日 23:49

Feedback

# re: C#3.0が話題? 2007/12/27 9:17 じゃんぬねっと

GoTo 論争でもそうでしたが、前提とする条件が論じる側にとって都合の良いコードだとまとまりにくくなってしまいますよね。
そういう意味でかずさんのコードは良いですね。

匿名型のところは、定数前提なら欲しい、見やすい、いちいちクラス定義書きたくないと感じる人が多いと思っています。

# re: C#3.0が話題? 2007/12/27 9:58 シャノン

> 匿名型のところは、定数前提なら欲しい、見やすい、いちいちクラス定義書きたくないと感じる人が多いと思っています。

ただ、そんな複雑な定数を定義することは、なかなか現実的ではないと思うのですがどうでしょう?
LINQのサンプルで匿名構造体配列がよく出てきますけど、実際にはあんなもの使いませんよね。

# re: C#3.0が話題? 2007/12/27 10:16 R・田中一郎

>個人的には、匿名型は普段使いはあまりしなさそうな感じがする。

逆ですね。

var q = from x in HogeHoge where x >= minValue && x <= maxValue select new { Name = GetName(x), Age = GetAge(x) };

みたいな書き方をしたい年頃というのが真理だったりw
(今が旬ですからー)

# re: C#3.0が話題? 2007/12/27 10:49 シャノン

言い換えれば、LINQ 以外では使わない。

# re: C#3.0が話題? 2007/12/27 13:15 シャノン

ちなみに、炎上はしてないと思います。
俺とNyaRuRuさんがチャットしていただけですww

# Cheap Canada Goose 2012/10/19 15:46 http://www.supercoatsale.com

I really like your writing style, great info, appreciate it for posting :D. "In university they don't tell you that the greater part of the law is learning to tolerate fools." by Doris Lessing.

# Cheap Air Jordan 2012 Retro 2012/12/08 17:19 http://suparjordanshoes1.webs.com/

Appreciate it for helping out, fantastic information.

# longchamp sac 2012/12/14 22:30 http://www.saclongchampachete.com/category/sacs-lo

I trust the overpriced garbage short review. I dislike the check, sound or perhaps feel within the Beats.

# sac longchamps 2012 2012/12/15 15:27 http://www.saclongchampachete.com/category/sac-lon

Our admins enjoy a sharp eye and perhaps sharper senses - and additionally our Preferred Comments neighborhood enjoys a terrific read. Come play around!

# burberry london sale 2012/12/17 6:57 http://www.burberryoutlet2012.info/category/burber

i compliment you with your great articles and outstanding topic solutions.

# scarves burberry 2012/12/17 20:11 http://www.burberryuksale.org/category/burberry-uk

If a person's photostream consists of photos who - regardless of whether good or simply not : triggered the spirited comments¡ä thread.

# sacs le pliage longchamp classique 2012/12/17 20:14 http://www.sacslongchamp2012.info/sacs-longchamp-c

Those are way more awesome. Looks for instance klipsch is simply made to work alongside iProducts? I will want android variants!

# michael kors pas cher 2012/12/18 5:14 http://michael-kors-canada.webnode.fr/news-/

The only men and women that would search good sporting these fugly things could be Ferrari opening crew while in the pits:D

# nike tn pas cher 2013/01/09 2:36 http://www.robenuk.eu/

As soon as you are going to take care of your top-secret received from an opponent, determine the situation to not a.
nike tn pas cher http://www.robenuk.eu/

# destockchine 2013/01/10 22:46 http://www.destockchinefr.fr/nike-shox-pas-cher/ni

Absolutely love may be fragile here at your pregnancy, nonetheless spreads a lot more powerful as we grow older if properly feasted.
destockchine http://www.destockchinefr.fr/nike-shox-pas-cher/nike-shox-nz-2-pas-cher/

# nike free 3.0 v3 2013/01/20 15:53 http://www.nikeschuhedamendes.com/

Health is a essence a person pelt in some people with no enjoying a handful of sheds in yourself.
nike free 3.0 v3 http://www.nikeschuhedamendes.com/

# tt6262.com 2013/03/04 5:09 http://tt6262.com/

I enjoy this program take a look at by way of about what you do, however , by way of who else What i'm any was on hand. tt6262.com http://tt6262.com/

# casquette chicago bulls 2013/03/14 19:48 http://www.a77.fr/

A honest relative is but one the people that overlooks the outages along with can handle the success. casquette chicago bulls http://www.a77.fr/

# Casquette Chicago Bulls 2013/03/14 22:46 http://www.c88.fr/

You should never socialize that are confident to be with. To understand which will strain that you simply prise your own self upward. Casquette Chicago Bulls http://www.c88.fr/

# usine23 2013/03/24 0:46 http://e55.fr/

Really don't communicate your entire joy to a single a reduced amount of endowed compared to what your lifestyle. usine23 http://e55.fr/

# destockchine 2013/03/25 5:17 http://c99.fr/

In order a substantial management with the value, reckon your own. destockchine http://c99.fr/

# Laredoute 2013/04/07 5:13 http://ruezee.com/

Assume‘w not strive so desperately, the best quality methods return as you minimum are expecting these phones. Laredoute http://ruezee.com/

# coachfactoryoutlet33.com 2013/04/07 23:02 http://www.coachfactoryoutlet33.com/

I'm keen on you do not credited who you are, nonetheless credited who Now i'm actually am in your wallet.

タイトル
名前
Url
コメント