[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/
------------------------------------------------------------