Re: 不完全にしてかなり言葉足らずな比較プログラミング言語学
不完全にしてかなり言葉足らずな比較プログラミング言語学 - 西尾泰和のはてなダイアリー
C#はこんな感じか?
(追記)id:nagakura_eil:20100726:p1 id:ufcpp ありがとう。
元記事はネタが増えてるな。
if(x = 0)
Javaと一緒。x = 0はint、条件式はboolだから型エラーだよ派。
値渡し、参照渡し
C#では参照型と値型があるが、どっちも値渡しがデフォルト(参照型は参照の値渡し、値型は値渡し)。
でも変数の参照を渡すこともできる(ref/outパラメータ)。
ついでに言えばポインター型もある(unsafeコンテキストで使える)。
値の範囲の定義
Javaと一緒。もちろん決まってます。
配列
Javaと一緒。ファーストクラスのオブジェクト。範囲外へのアクセスは例外を投げる。
関数へのポインタ
リフレクションとはまた別に、メソッドもしくは匿名メソッドへのデリゲートという形で存在する。
変数に代入したり、メソッドの引数や戻り値に使うことも可能。
関数呼び出しの括弧
たとえ引数がなくても括弧が必要派。
多重継承
Javaと一緒。実装を持ったクラスの継承は1つまで。
変数の初期化
Javaと一緒。初期化されていない(値がなんだかわからない)変数の存在は危険なバグのもとであり許してはいけない、勝手に初期化しよう派(追記: JavaもC#も、未初期化のローカル変数を使おうとするとコンパイルエラー)。
整除の丸め方向
Javaと一緒。常に0方向に丸める。
x / 0.0
Javaと一緒。符号付きInfinity。
整数演算の結果がintの範囲を超えたときに自動的に表現力の大きい型に変更する
Javaと一緒。勝手に変換するのはよくない派。
変数への再代入を許すかどうか
Javaと一緒。再代入させたくないものだけconstとかreadonlyとかつけたらいいじゃん派。
演算子の優先順位について
Cと一緒。x == y & z が (x == y) & z となる。
ループ
ループをするにはforとかwhileとかgotoとかいろいろな方法があるよ、だけどループ使わないことも多いよねLINQがあるし派。
インデントと実際の構造の不一致
Cと一緒。プログラマが気をつけるか、braces {}を付けろ&正しくインデントしろというコーディング規約で回避する派。
レシーバの受け取り方
Javaと一緒。レシーバ自体をどうこうしたい時にはthisに入っているよ派。
文字列オブジェクトは破壊的に変更できるか?
Javaと一緒。いいえ。
文字列と数値を自動変換するか?
Javaと一緒。文字列への変換はしてもいいんじゃない?派。
ただしユーザー型には変換演算子オーバーロードを定義できる。これを使うといろんな型へ暗黙の変換をすることが可能。でもだれも乱用しない。
1/2は何になる?
整数の0だよ派。
オブジェクト指向
参照型も値型もオブジェクトだよ。クラスや構造体はインターフェースを実装することもできるけど、継承はクラスにしかできないよ派。
配列の範囲外アクセス
Javaと一緒。例外を投げる派。