Re: C#のプロパティは書くのが楽になるわけではない

C# の方からご意見をいただきました(強調は原文ママ)。

なんというか荒れてますが、私は大筋でkwatchさんに賛成ですね。Javaのプログラムには確かに「本質的でない冗長な記述」がありますし、大規模だからと言ってそれが有利に働くわけでもありません。アクセサは書くのも面倒ですしソースの可読性も下げます。現実のコードでは、javadocコメントが入るからさらにひどくなります。

http://gazoo.com/G-BLOG/mae04blog/64856/Article.aspx

応援ありがとうございます。やはり複数の言語を身につけている人は、冷静に判断してくださいます。

ではC#のプロパティはどうかというと、ver.3.0の自動プロパティ以前の世界では、

   public int X
  {
      get
      {
          return x;
      }
      set
      {
          x = value;
      }
  }

…と書かなければいけないという時点で、Javaでアクセサ書くのに比べ、別に簡潔にはなっていないです。
このクラスを使う側で、o.getX()と書く代わりにo.xと書けるという点では簡潔ですが。

http://gazoo.com/G-BLOG/mae04blog/64856/Article.aspx

なるほど。これをみるだけなら、たしかに Java のアクセッサと比べて特段に優れているとは言えないですね。
自分でも調べてました。『ver.3.0の自動プロパティ』だと

public string Name { get; set; }

と書けてだいぶ簡潔になっているようです。
(参考: C#によるプログラミング入門 : プロパティ

Java SE 7のプロパティはいいですね。
http://journal.mycom.co.jp/articles/2007/05/16/java7/

http://gazoo.com/G-BLOG/mae04blog/64856/Article.aspx

同意します。この記事を読む限り、仕様はよくできてると思います。Java5 の時点で登場すべき機能でした。どう考えても Typesafe enum より重要でしょ。これを「イラネ」というJava屋 (もちろん部分集合) の頭が理解できません。


さて、以降は蛇足ですが、わざわざご意見をいただいたので、蛇足にも回答させていただきます。

さて、以後は蛇足ですが。
FileReaderの件についてのt_yanoさんの記事の主題は、タイトルのとおり「Javaの冗長な記法って小クラス主義の現れではないかな」ということなのであって、FileReaderみたいなファイルを読むのに特化したクラスを作るより、汎用的な小さなクラスを組み合わせるのが「Javaのポリシー」である、ということでしょう。だから標準出力に特化したprintも、そんなに使いやすくしようとしていない。不便だと思うなら、ラッパを外部に書けばよかろう、と。
これに対して、ユーザを不幸にするポリシーなんて意味がないとか、反論は考えられますけど、このエントリー↓で、
http://d.hatena.ne.jp/kwatch/20080506/1210048902
そのt_yanoさんの肝心の主題に関する言及がまったくない、というのはなぜなんでしょうか。私はこの点ではt_yanoさんに同意なので、kwatchさんの意見も聞いてみたいのですが。

http://gazoo.com/G-BLOG/mae04blog/64856/Article.aspx

すでにt_yanoさんのほうにコメントしてますが、便利クラスや便利メソッドを用意して、primitiveなクラスやメソッドはやめろといっているわけではないです。primitiveなクラスやメソッドを提供することと、そのwrapperやfacadeを用意することは排他的ではないので。
少なくともFileReaderという便利クラスが標準で用意されているわけですから、その意図を考えれば、より便利な仕様を求めることは別におかしなことではないはず。そしてそれはprimitiveなクラスやメソッドを使えなくすることとはまったく関係ありません。
あと最初のエントリにも書いているんですど、Javaが初心者にも優しいというなら、たかがテキストファイルを読み込むだけであんなに煩雑なコードを書かなきゃいけないのはおかしくて、この仕様を正しいと思うなら「初心者に優しいJava」なんていうのはウソっぱちです。こんなの、初心者に Java を教えたことのない人 (あるいは教えたつもりになっているだけの人) の思い込みにすぎない。

#これで回答になってますか?

典型的な Java屋 は JSP を使うことに何の疑問も持っていない

t_yanoさんのコメントより:

例えばコメント欄に具体例として「たとえばJSPでHTMLエスケープして値を出力するのにわざわざと書くことに疑問を持っている人はどれだけいるでしょうか。私は見たことありません」とか出ていますよね。

で、例えばその「見たことない」例がここにいるわけですよ。私です。いや文字しか見えないでしょうがw 私はJSPなんて死ねばいいのにと公然といってますし、Railsがrhtmlにスクリプトを直接書いてOKなんなら、もうカスタムタグなんて使わないでJSPに直接Javaのコード書いたらいいじゃん、とか公然と言ってますよ。私が一番押している技術はJSP自体使わないですし。

http://d.hatena.ne.jp/kwatch/20080504/1209873687#c1210075670

まあt_yanoさんは問題意識の高い方だから、この方を典型的なJava屋と考えるのは無理がある。どう考えても部分集合、しかも極めて小さい数の部分集合だろう。

典型的なJava屋 (もちろん部分集合) はJSPに何の疑問も持っていない。JSPに疑問を持つような人たちがJava屋のメインストリームであったら、TapestryWicketももっと流行っているだろうし、Tapestryライクな技術がJCPで議論されてもいいはず。しかし現実にはTapestryWicketを知っているのは一部だし、実際に使っている人となるとさらに少ない。これが現実。


ちょっと昔、こんなことがあった。昔といっても21世紀に入ってのことだけど、JSFが登場して1年くらいで、TapestryはあったけどWicketは生まれてなかった (たぶん)、というぐらいの時期だから、この業界では「昔」となるだろうという程度の昔のこと。たしかMayaaが未踏に採択されたぐらいの時期だったと思う。

JSFを売り出したいSUNが、用賀オフィスでJSFの講習会をするというので行ってみた。用賀オフィスにはOracleも入っているので何度かいったことあるけど、相変わらずきれいなビルだった。当時、JSFのことは『再設計されたStruts』ぐらいの認識しかなくてどんなものか知らなかったし、講習会は無料だったので参加してみたわけだ。

講習で話していたのは、自称「JSFエバンジェリスト」という40代ぐらいのおじさんと、その部下かどうか分かんないけど30歳前後ぐらいの技術者。当然、両名ともSUN社員。Javaの仕事をしているSUN社員だから、Java屋のサンプルとしては典型的であり、偏ってないよね?*1 (異論は認める)

で、まあJSFの講習会だからJSFの説明があって、カスタムタグは使うけどStrutsとはだいぶ違うなーとか、managed beanってなんかよくわからんとか、「${}」じゃなくて「#{}」を使うけどなんで変えたんやろとか、まあいろいろ思いながら聞いていた。

んで、終わった後に講師の方を捕まえて、デザイナーとの協業をどう考えているかについて、またJSPの存在価値について聞いてみた。せっかくJSFという新しい技術を開発するなら、JSPやカスタムタグというできの悪い技術を使うよりもTapestryのような筋のいい技術を使ったほうがよかったのではないか、そのほうが.NETやASPとの差別化ができるし、JSPとカスタムタグを使うJSFではデザイナーとの協業が難しい、というようなことを話した。

彼らの回答は驚くべきものだった: 『タペストリーって何ですか?』・・・これには驚いた。なんと、自称JSFエバンジェリストTapestryの名前さえ知らなかったのだ。

確かにTapestryはメインストリームの技術じゃないけど、当時すでにJakartaプロジェクトの一員となっていて、雑誌でも第2特集が組まれる程度の知名度はあった。そのTapestryを知らないというのは驚いた。しかも、それが自称JSFエバンジェリストのおじさんだけでなく、30前後のまだ若い技術者のほうも知らないというのだ。当然ながら、XMLCも知るわけない。おじさんが最新技術に弱い傾向があるのは分かるけども、若い技術者でも知らないというのはどういうことか。

彼らとしばらく話してわかったことは、JSPを使うことに何の疑問も抱いてないこと、カスタムタグのせいでデザイナーと協業できないことをちっとも気にしていないこと (逆に.NETやASPの存在は気にしてて「.NETと差別化できるはずですよ」という言葉には敏感に反応すること)、というかデザイナーもIDEJSF用ツールを使えばいいじゃんと考えていること、であった。


これが典型的なJava屋の実体ではないだろうか。与えられた仕様を覚えるだけで、JSPStrutsJSFに何の疑問も持たない。疑問を持たないから、本来どのような仕様がいいのかなんて考えるわけがない*2。同じことはJSPJSF以外でも言える。EntityBeanやXMLファイルにも疑問を持たないし、アクセッサやFileReaderでも同様。どんな仕様がいいのかを自分で考えることはしないから、「アクセッサ定義が面倒で見にくい」という意見に対し、「IDEで自動生成すればいい」とか「大規模開発で必要」とか的外れな反論しかできない。なぜIDEで自動生成しなければならないのか、本当に大規模開発で必要なのか、そういうことを自分の頭で考えていない。このことは最近のコメントではっきりした。自分の頭で考えてなかった連中は、『冗長な記述が大規模開発でどう役立つか』と聞かれてもはっきりと答えられず、話をそらそうとしている。

まあ「自称JSFエバンジェリストなSUN社員」や「Javaを仕事にしているSUN社員」が典型的なJava屋といえるかどうかは、もしかしたら議論の余地があるのかもしれない。自分としてはJava屋と呼ぶに十分だと思うけど、みずしま氏はまた違った意見を持っているだろう。というか、みずしま氏からはあれ以来何のコメントももらえてないので、何を基準にして偏ってる・偏ってないを判断するのかはいまだに知らないし、SUN社員がサンプルとしてだめならどんなサンプルなら満足するのかは分からない。しばらく待ってみるけど、あんまり期待できないかな。


ちなみに、先のSUN社員との会話では、別れ際に若い社員のほうから『JSPよりいい技術があれば教えてください』と真顔で言われてしまった。Jakartaプロジェクトぐらい押さえておこうよと思ったけど、自称エバンジェリストのおじさんはJSFにケチつけられて終止不満そうな顔してたから、そのおじさんよりは若い社員のほうが伸びるだろうなと思った。彼らが今どうなっているかは知らん。

*1:ちなみに彼らと面識があったわけではないので、両名は『自分のよく知る約30名のサンプル』には含まれていない。

*2:まあぶっちゃけ、「典型的なJava屋」は「典型的なプログラマー」や「典型的な日本人」に置き換えても成り立つと思うけどな!