メイン

C# アーカイブ

2008年09月20日

[C#, Delphi] C# 信者がうざい件

C# 信者の特徴

  • Hejlsberg は神であり神による実装である C# こそが唯一絶対の言語である
  • 他の言語(特に DelphiとJava)は存在自体が悪である
  • 他の言語を使っているのは C# を知らないからである
  • C# を布教することでそのような不幸な子羊たちを救済することこそが正義である

どこかの世界宗教のようですね。

「Delphiまとめwiki」 を読んでふと「C# 使えばいいのに」と思った - World Wide Walker

DMWより先に、Delphiを選択する時点で、C# よりも Delphi を使いたいという前提があることを考えて欲しい。

その上で Delphi をよりよく(という言い方もあまり好きじゃないけど、ほかにいい言い方が思い浮かばない)運用する方法がDMWなんだろ。

それに対して「それ C#(略」っていう発言は場違いであると思わない?

Delphi の The best way is only one. と言う考え方は好きだけど、実際には one of them だったり、後から小声で But, there are many ways to do it. だなんて言われそうな気がするのがなぁ、と思ってしまう。

当然 only one だろ。

その only one だから more better なものを選ぶ必要がない言語を選択するのがエンジニアとしては当然なんじゃねーの?

あと many ways なんて言語は存在価値はないよ。

IsValid や HasFound など真偽値にちなんだ名前にする。

foo.IsValid や bar.HasFound と書ければ一目瞭然。

そうでもない。関数名にCamelCaseが来るという時点でまず C# 使わない人間から見ると異常。

あとこの例だと bar.HasFound は HasFound という意味より IsFound という意味に俺は取ってしまったんだが。

省略するのはいいけど、省略しすぎて情報が落ちてないか?

必要なときはforwardによるプロトタイプ宣言を使う。

なぜプロトタイプ宣言やinterface節での宣言がいるんですかね(もちろん過去互換性のためだろうけど)。

プロトタイプ宣言なしだと関数やメソッド名などをtypoしたときに 爆速コンパイルの 1 pass 時点でエラーにならないからだろJK。

ループで配列やハッシュのインデックスを使わない。配列を直接ループさせる。

そもそも、Delphiはまともな Hash ライブラリすらないからな。TStringListのValuesプロパティは遅いから THashedStringList を使うなんてのは Bad Know-how 以外の何者でもないな。C# なら System.Collections.Generic.Dictionary で明瞭にかける。

インデックス回して書いた方が人間が見てわかりやすいならそう書くべき。

その上で必要ならチューニングする。

DMWもこれ書いてる人が考えるBestなだけで、実際にこれがBestだと決まってるわけじゃない。

[Ruby] C# >>>(越えられない壁)>>> Delphi (第一種臨界不測日記)

このような開けた場所で不等号を並べて越えられない壁とか臆面もなく書けるあたり尊敬します。

しかし、Webの記事とか、googleで上の方に出てくるのとか、

その辺、全然考慮してなかったりするんだよヽ(`Д´)ノ ウワァァン!!

Delphi のコードは Google などで検索するとレガシーなコードの方が多くHITしてしまいます。

これは Delphi は C# に比べると歴史が長いため、レガシーなコードほど多く蓄積されてしまっているからじゃないかと考えています。

良質なコードを摂取したいというのならば最近更新されていて、よく使われている評価の高いCode Central のコンポーネントのソースを読むことをオススメします。

使っている人もgeekな人が多いせいか、

C#を使っている人=geek=自分は geek ということですね。

自分で自分のことをgeekと言う人ほど信用できないものはないと思います。

最後に
自分の考えをまとめると、Delphiが全てのエンジニアにとって使いやすい言語ではないのと同じように、C#も全てのエンジニアにとって使いやすい言語ではないということです。

別にC#という言語やそのコミュニティが嫌いだというわけではなく、このことを忘れて(あるいは考えず)、他の言語をDISってC#をプッシュしてくる信者が大変鬱陶しいということ。

GUIといえばDelphi/VCLだった時を考えてください。

この時代にあなたが生まれていたとしたら、Win32の世界に入りましたか?

答えはYESですよね?それは嬉しいことじゃないですか?

色々な言語がクラアントサイドの言語として使われることで、幅広い層のエンジニアがリッチクラアントの世界に足を踏み入れるわけです。

それによってそれぞれの言語のコミュニティが活発化して、お互いに影響しあって成長していくんじゃないですか?

言語がどうこうなんて小さいことじゃなくて、もっと大きな視点を持つべきなんじゃないですか?

元ネタ:いい加減Ruby信者がうざい件 - id:k-z-h

[ C# , Delphi ]

2007年06月21日

[C#, Delphi] Sort と C# と Delphi と

sort

仕事のことで、C#でツールを作ってもらっているんですけど、
C#の言語仕様になかなかなれない様子で、
リストの sort の評価関数に delegate つっこむのがキモイとか、評判でした。

これのこと?

なんでも、イベントハンドラに delegate はまだ許せるが、
ジェネリックなコレクションクラスを利用するときに、
sort の評価関数に delegate 使うのはどうなんよ?
継承でいいじゃん?って言うことらしい。

自分的には、カスタムな sort するくらいのことに、
継承なんて問題外なんですが、これって、
そもそも Delphi といっしょだよなあ、
慣れだよ、慣れとか……。

そのプルグラマは、C++ 出身なので、特にキモく感じるらしい。
C++ 流だと、継承なのか?と思ったけど、単に、メソッドポインタがないので慣れないせいかも。

それはそれとして、
sort すんのに、呼び出し側で、メソッド定義するのは
面倒という話も聞いたけど、
(C#なら、Delphiと違って、宣言いらない分楽だと思うけど)
それならば、C# 2.0 の匿名メソッドでいけるじゃんよ?
って話しに。

つまり、こう

さらに、Rubyとかやってると、匿名メソッド(というか、ブロック構文ね)とか、普通ですよ?とかいう話にも。

以下は、Ruby で、配列をランダム に sort するワンライナー(一行コード)。

楽ちん?

第一、Javaなんてば、java.util.Comparator 継承して、
delgateの代わりに、new HogeComparator 渡すんだぜ?
なんて話まではいかなかったけど。

何が言いたいかって言うと、
別に、C#に慣れないって話しではなく……。

C#って、
イベントハンドラ周りが delegate だったり、
delegateってようは、メソッドポインタ相当とすると、
Delphiと大してかわらんねー?、
これならいつでも移れるね?という安心感があるなという話。

さすが、Hejlsberg(C#設計者) だぜ?

とはいえ、C# 2.0 の匿名メソッドや、ジェネリック、イテーレタの yield が
うらやましすぎるけど……。

クソー、C#が、ネィティブ対応してれば、今頃は、連邦のモビルスーツな(ry

そういや、
去年くらいから、Ruby流行ってるって言っても、
ピンと来てないらしく、
そのプログラマさんは、
Ruby on Rails もご存じではなかった。

たぶん、Rubyの知名度ってまだまだその程度のなんだろうと思う……。

[ C# , Delphi ]

2006年04月26日

[C#] C#2.0に目移り

うーむ。
ネィティブコンパイルできないという理由で、
毛嫌いしていたC#なんですが、
どうも、最近の進化(C#2.0)でかなり面白くなってきました。

  • 念願のジェネリックが使える
  • 匿名メソッド(=無名関数?)が使える
  • 部分的だが、foreach用にyieldが使える
  • GC(ガーベジコレクト)により、前述のDangling Pointer問題を
    気にする必要がない。
    もちろん、オブジェクトの解放し忘れもない。
  • スコープ抜けると自動で、Dispose(解放処理とか)を呼び出す、using構文。
    これで、try finally ともおさらば。
    そもそもGCのおかげで、頻度の少ない try finally をさらに減らすことができる。

常に進化をし続ける言語!
Anders Hejlsberg(へジルスバーグ、言語開発者)のそこにしびれるあこがれるぅぅうぅ。
# 流行のもの全部実装しました!って気も(ry

というのはおいておいて、やはり、
Delphiにない物があるのは、非常に魅力的に見えるんですよね。

ネィティブコンパイルも、
ヘジルスバーグのインタビューによると、
検討しているとか、どうとか。
まあ何年後かわからんので、期待はしないけど。

実は、今もっているBDS2006(Borland Development Studio)でも、
C#は開発できるんですが、.NET 1.0時代のものという罠。
つまり、古い orz
統合環境使うには、Microsoftの軍門に下るしかないのであろうか。

そういえば、VS2003のアカデミックから無償アップデートしたVS2005があるんだった。
あとは布教用に Visual C#2005 Expressのisoイメージを落としてみたりも。
↑もう軍門に下ってねえ?

[ C# ]

Twitter(今何してる?)

プロフィール

あわせて読みたい

あわせて読みたいブログパーツ

人気エントリー

About C#

ブログ「第一種臨界不測日記」のカテゴリ「C#」に投稿されたすべてのエントリーのアーカイブのページです。過去のものから新しいものへ順番に並んでいます。

次のカテゴリはDelphiです。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。