[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[jfriends] Re: Java の開発生産性について
前橋です。
えんどう さん:
>> Color.ORANGE
> ^^^^^^ これは内部クラスなんですか?
違います。
細かい実装は置いといて、C/C++の列挙だと、
typedef enum {
BLUE,
RED,
ORANGE,
...
} Color;
こんな感じで定義して、
ORANGE
と使うわけなんですが、それだと、別に
typedef enum {
APPLE,
BANANA,
ORANGE,
...
} Fruits;
という列挙があったときに名前の衝突が起きるので、finalな値を
参照する時のように、「型名+列挙子名」で書くべきだろう、とい
うことを言いたかっただけです。
# 伝わりにくい書き方だったようで...(_o_)
>> なかなかそうはいきませんぜ。
>よくわかりません。
OOPに限らず、条件分岐は少ない方がいいと思うのですが、なかな
か全廃はできないでしょう、という程度の意味なんですが。
fall through な構文がタコだという話を横に置いておけるとした
ら、else ifの山をこさえるより、switch case の方がマシですよね?
>> 「使うとき」に、これがintにしか見えないのがダメなんだってば。
>コンパイル時に型チェックができないからですか?
ひとつはそれです。
あと、もっと大きな理由として、人間が読むときワケがわからん、
というのがあります。
# コンパイラの型チェックも重要ですが、大規模プロジェクトにな
# ればなるほど、新規コードを書く時間よりも、既存コードを読む
# 時間の方が増えるものです。
public Label(String label, int alignment) {
メソッドの定義がこんなんになっていて、第2引数に何を渡せばい
いかわかりますか? Eiffelなら、事前条件を定義しておけば、なん
ぼかマシになるかも知れないですが...
渡したいモノは、意味的に言って、「Labelのアラインメントをど
うするか指定する型」なんですから、
public Label (String label, LabelAlignment alignment) {
でなければなりません。これなら、LabelAlignmentの定義を探せば、
何が渡せるのか一発でわかります。
------------------------------------------------------------
de 前橋和弥 maebashi@xxxxxxxxxx
http://member.nifty.ne.jp/maebashi/
------------------------------------------------------------