[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[jfriends] Re: getterの命名について



-------------------------------------------------------

前橋@豊洲 です。

木下さん:
>>某所で見かけたのですが,C言語ではポインタがnullかどうか判定す
>>るのに,条件判定は0が偽,それ以外の数値が真である事を利用して
>>  if (p==NULL) {
>>ではなく,
>>  if (!p) {
>>だという論も見かけたのですが,さすがにそこまでしてどうする,
>>と言う気持ちでいっぱいになりました(^^;
>>C は使ってないので何ですが,本当に上の書き方をするのだろうか(^^;
 
> これはCの仕様からは間違った記述のはずです.

ええと、C-FAQにある通り、言語仕様上は間違ってはいないはずですが、

> (実際は問題無いのでポインタに真偽はないという意味論ですが)

意味論ということなら、そうかもしれません。

> # でもよく書いた気がします.

私もよく書いてます(本職は(たぶん)Cプログラマ)

ポインタは真偽値ではないという点では、

  p == NULL

とでも書いた方が意味がはっきりしていいんですが、
Lispだと、nilが tの反意語になってたりするので、
NULLを偽とみてもそんなに悪くないような気もしな
いでもないような気もしないでもないのです(^^;

ま、if (!p)... と書くプログラマは、美しいとか
いうことより、単に面倒くさいから短い方の記述を
とってるだけに見えるんですが...

> Javaでも
> if (obj) {
> とか
> if (!obj) {
> でisNullじゃ無いけどポインタから真偽への暗黙の変換をしてくれても
> いいじゃないかって気もします.
> (なぜなら基本的にJavaの変数はnull以外の無効なアドレスを持ちようが
> 無いから)

if (p1 = p2) {    
       ↑ == のつもりでミスタイプ

を検出できなくなるので、問題ありのような気もしますが、それは
ともかく。

Javaは、booleanに関しては、何故だか異様にチェックが厳しくて、
Stringへのに関しては異様にスカスカなんですよねえ。なんかこー、
単に「Cとは変えてみました」的な意志を感じるのは私だけ? (^^;
 
                                                de 前橋