2009-04-17 4 views
1

私は値とブール値の両方として単一の式を評価する言語が大好きです。たとえば、A = 1と評価されると、1になります。このプラクティスがシンクタンクの開発者に非常に共通する場合、副作用がないと仮定して、これらの式をリファクタリングしないのは間違っていますか?Cスタイルのロジックとリファクタリング

私はコードにおいについて話す仕事で長く議論していますが、この論理の複雑さはです。私はCがとても好きです。たとえば、Javaに切り替えるのは難しいでしょうが、このようなことは許されません(false!= 0)。

どのような考えですか?

答えて

4

ゼロ以外の値の使用を真とし、ゼロ/ゼロを偽とする実質的な理由はありません。しかしながら!多くの場合、これらは可読性を妨げる可能性があります。ポインターを使ってよく、if (somePtr)ではなく、if (somePtr != NULL)を使用します。なぜなら、ヌルポインターを逆参照しないという意図をよりよく表しているからです。

論理があまりにも複雑な場合は、読みやすさの問題ですが、読みにくいと思わない場合は?なぜリファクタリングの必要性?

1

これは完全に主観的ですが、これはPerl(さまざまな方法で何かを表現することを可能にする、明快さの程度を変えることができます)とJava - または - あまりにもボンデージと規律の言語)。構造を好む(または必要とする)人もいるでしょう。その場合、Javaはそれらをよりよく適合させます。より自由な言葉が可能にする創造性のようなものもあります。

熟練したプログラマーのチームがあれば、クリエイティブな言語でより多くの作業を行うことができます。そして、あなたが "よりタイトな"言語を好きな同僚を持っているなら、まあまあ、それは何か言いますか、そうでないかもしれません。しかし、それは私の意見です。 :-P

1

Javaは厳密にタイプされていますが、これは多くの利点があると思います。もし1つの事のために交差エラーの多くを防ぐ。私は、Cの柔軟性と制御力があるとは思うが、Javaは、大きなチームが悪いプログラマーによってあまりにも遠くまで引きずられていないことを確かめるために輝いている。 CとJavaの構文は同じですが同じではありません。正当な理由でJavaが作成されていて、私はその理由のためにすべてです。

ただ私の意見です。さらに、Javaの厳密な型定義をいくつかの巧妙なオーバーロードや新しい関数で壊すことができます。

1

私はそれが実際にそのイディオムがどれほどよく知られているかの問題だと思います。

たとえば、Linuxカーネルには多くのイディオムがあります。

たとえば、あなたは決してしません。

static int x = 0;代わりに

、あなたが実行します。

静的int型のX;

(コンパイラが0になります、カーネルの男と私ではないと主張する。。)

をあなたはいたしません。

場合(Xを!= NULL)

あなたは:

あなたがいない(x)の

場合:

を(何か==何でも) リターン0場合。 else return 1;

あなたは:

返品(何か!=何でも);

そして、時折、ブール値と整数のこの混合は本当に便利出てくることができ、このように:build_assert.h

となっている肉:

 
#define EXPR_BUILD_ASSERT(cond) \ 
    (sizeof(char [1 - 2*!(cond)]) - 1) 

彼らはパスをエラー処理のための自由のgotoを使用し、どの少しcontrarianです。

可読性とメンテナンス性に関しては、1行または2行の行はおそらく洗濯物です。それは簡単なものです。保守性と可読性の部門の本当の肉は、私の経験から、より大規模なものです。私にとって、OOPの多くは、コードを書くのが簡単になる傾向がありますが、READは難しくなり、DEBUGは難しくなります。私にとっては、それは純損失です。だから、私はoopの大ファンではない。おっと...私は話題から外れました。

関連する問題