「Javaのコードって冗長でごちゃごちゃしてて嫌だなぁ...、でもPHPとかRubyみたいな動的型言語だとなんか不安...。私は10年間Javaを使った後、PHP、Ruby、Node.js等の動的型言語を使いました。動的型言語の簡潔さに魅了され大ファンになりました。その結果、Javaをディスるようになってしまったのですが(笑)、動的型言語にも不満がないわけではありません。IDEによる入力補完やシンボルの検索機能などは静的型言語の方が手厚いですし、静的型言語であればコンパイル時に発見されるようなコーディングミスが動的型言語では実行しないと見つからないというデメリットもあります。そんな言語があったんです。C#ってJavaをマネしただけでしょ?」って?そんなことありません。C#は静的型言語の良さを持ちながら動的型言語のような簡潔さを持つ素晴らしい言語なんです。その魅力の一端を紹介します。ContentsJavaのアクセサ地獄を解決するC#のプロパティJavaのHashMapを連想配列のような記法で扱えるC#のDictionaryJavaのListを配列のような記法で扱えるC#のインデクサJavaより9年早いクロージャ(Delegate)の導入Javaのアクセサ地獄を解決するC#のプロパティJavaにはフィールド(インスタンス変数)をクラス外から設定参照するアクセサメソッドという概念があります。get~、set~というお決まりのコードです。user.getEmail();「だったらフィールドをpublicにすりゃいいじゃん」とおもうのですが、Javaの設計慣習では「publicにしてしまうと、後でそのフィールドにアクセス制限をかけることができないのでアクセサメソッド経由でフィールドにアクセスする設計がよい」とされています。後になってpasswordに値をセットするロジックに文字列長が8未満だったらエラーにしたいとなった場合に以下のように対処できるという発想です。}まぁ、滅多にこんなことをすることはないでしょうけど、確かにアクセサメソッドを挟んでおくことで値の参照設定にロジックをはさむ柔軟性が生まれます。そのためにいちいちアクセサメソッドを書くのは面倒です。IDEによるアクセサコードの自動生成ができるので書く手間はある程度減らせますが、コードが冗長になる問題は残ります。C#にはこれを解決するプロパティという機能があります。user.Email;さらに短い書き方もできます。}}プロパティが良いのはpublicフィールドの参照とプロパティ参照の記法が同じなので初めpublicフィールドで定義しておいて後で必要になったらプロパティに変えることができます。publicフィールドからプロパティに変更しても呼び出し側の記法は同じなので変更する必要はありません。user.email;JavaのHashMapを連想配列のような記法で扱えるC#のDictionaryJavaのHashMapはデータの追加、取得をメソッドで行いますが、C#のDictionaryはLL言語が連想配列を扱うような記法で追加、取得ができます。map["foo@bar.com"];断然C#の方がすっきりしているし直観的にわかりやすいですね!JavaのListを配列のような記法で扱えるC#のインデクサJavaには可変長配列を実装したArrayListというクラスがあります。//hoge@moge.comが返るC#にはインデクサという配列の記法を使ったアクセス方法があります。//hoge@moge.comが返るC#だとRubyやJavaScriptに近い簡潔なコードが書けます!それでいて静的型チェックがなされる、スバラシー!!Javaより9年早いクロージャ(Delegate)の導入Javaは2014年にJava8でようやくクロージャが導入されました。2005で搭載されたC#2.0の時点で、Javaのクロージャに相当するDelegateという機能がありました。例としてListの中からemailがfoo@bar.comのデータを探すコードを書いてみます。user;}C#だと同じ処理をDelegate(ラムダ式)を使って簡潔に書けます。"foo@bar.com");Javaは2014年にクロージャが導入されてようやく、C#と同じような書き方ができるようになりましたが、C#に比べて9年間もの間forおじさんをしなければならなかったわけです。どの言語を使うかでプログラミングのトレンドについていきやすさが変わるってことです。(26)プロフィールやまろうと申します。ITエンジニアを十数年やってます。スマホゲームと幅広い分野で仕事をしてきました。そこで培ったエンジニアの本質的な仕事力や転職ノウハウを書いています。プロフィール詳細やまろうのYoutubeチャンネルIT関連のことから人生哲学までざっくばらんに話してます。