投稿数 - 437, コメント - 59537, トラックバック - 156

些細な事だけど、センスないなーと思うとき

センスないなーと思う書き方

num が min以上、max以下

if(num >= min && num <= max)

num が min以上、max以下でない

if(num < min || num > max)

マシだなーと思う書き方

num が min以上、max以下

if(min <= num && num <= max)

num が min以上、max以下でない

if(!(min <= num && num <= max))

投稿日時 : 2008年1月17日 13:46

フィードバック

# re: 些細な事だけど、センスないなーと思うとき

VB プログラマのことかー。
経験則ですが。

C あたりから入った人は後者が多い。
経験則ですが。
2008/01/17 13:59 | じゃんぬねっと

# re: 些細な事だけど、センスないなーと思うとき

二つセットでのお話ですか?

それとも「num が min以上、max以下」ももっとよい書き方あるだろーってことですか?

num が min以上、max以下
if (min <= num && num <= max)

num が min以上、max以下でない
if (num < min || max < num)
私はこうですけど。
2008/01/17 14:00 | THREE-ONE

# re: 些細な事だけど、センスないなーと思うとき

あんま考えたことないですが、THREE-ONEさんと同じです。
数直線のイメージ。
2008/01/17 14:15 | 2リットル

# re: 些細な事だけど、センスないなーと思うとき

センスあるなーと思う書き方も教えて欲しいのですが。
2008/01/17 14:25 | R・田中一郎

# re: 些細な事だけど、センスないなーと思うとき

>VB プログラマのことかー。
>経験則ですが。

んー、どうなんでしょ。なんとも。


>num が min以上、max以下でない
>if (num < min || max < num)
>私はこうですけど。

>あんま考えたことないですが、THREE-ONEさんと同じです。
>数直線のイメージ。

判定文脈の「意味」は何かってのが大事かなと思うんですよね(記事では短すぎて分かりませんが^^;)。

・num が min以上、max以下で「ない」
という意味が大事なら
if(!(min <= num && num <= max))

・num が min未満、max超
という意味が大事なら
if (num < min || max < num)

かな、と。
「数直線のイメージ」というのは確かに仰る通りで、それが基本わかりやすいと思います。
2008/01/17 14:26 | 囚人

# re: 些細な事だけど、センスないなーと思うとき

俺は前者もいいと思います。
評価対象を左辺に持ってくるのは好きです。

> if(min <= num && num <= max)

は、素直に左から読むと、「minがnum以下で、かつ、numがmax以下」になります。
判定したいのは「num が min以上で、かつ、numがmax以下」なのですから、素直に書けば前者になります。

> if(!(min <= num && num <= max))

これは賛成できません。
2008/01/17 14:28 | シャノン

# re: 些細な事だけど、センスないなーと思うとき

>センスあるなーと思う書き方も教えて欲しいのですが。

私はセンスがないんで、これが精一杯です。逆にセンスのある書き方を教えていただきたく。


>は、素直に左から読むと、「minがnum以下で、かつ、numがmax以下」になります。
>判定したいのは「num が min以上で、かつ、numがmax以下」なのですから、素直に書けば前者になります。

一理あると思います。例えば、C では多いですが
if(NULL == hoge)
という判定は読みにくく感じます。

しかし、今回の例では、仮に言語が許せば
if(min <= num <= max)
if(!(min <= num <= max))
と書きますよね。 2リットルさんが仰ってますが「数直線」のイメージでいきたい。


>> if(!(min <= num && num <= max))
>
>これは賛成できません。

先にも言いましたが、「~でない」という意味をはっきりさせたい。
2008/01/17 14:42 | 囚人

# re: 些細な事だけど、センスないなーと思うとき

> しかし、今回の例では、仮に言語が許せば
> if(min <= num <= max)
> if(!(min <= num <= max))
> と書きますよね。

書きますねぇ。こう書けたらいいと何度思ったか知れませんね。

> 先にも言いましたが、「~でない」という意味をはっきりさせたい。

「~でない」は裏返せば「~である」です。
「numがmin未満であるか、maxを超えている」であれば
if(num < min || num > max )
が自然です。
「~でない」と「~である」のどちらが自然かはケースバイケースですので、一概に言えません。
2008/01/17 15:07 | シャノン

# re: 些細な事だけど、センスないなーと思うとき

白状します、読まずに投稿しました。

> ・num が min未満、max超
> という意味が大事なら
> if (num < min || max < num)
> かな、と。

ただ、「数直線」と「評価対象を左辺」と、どちらを取るかは、優劣は付けられませんね。
2008/01/17 15:08 | シャノン

# re: 些細な事だけど、センスないなーと思うとき

> if(NULL == hoge)
> という判定は読みにくく感じます。

PowerShell だと、nullを左に持ってくようにしてます。
読みづらいです。

$hoge = @(1, $(), 3);
$() -eq $hoge;
$hoge -eq $();
2008/01/17 15:18 | よこけん

# re: 些細な事だけど、センスないなーと思うとき

ん?
マシだなー = ベスト解答 ?
2008/01/17 15:23 | ghost_shell

# re: 些細な事だけど、センスないなーと思うとき

また宗教戦争ですね?

私は無宗教=節操なしです。

粒度が大きい場合は手が動いたとおりに。
速度が気になる粒度が小さいものは
numの分布によって||と&&とどっちが早いか異なるので
それを考慮して決定してます。

囚人さんの言う、センス無い書き方も一杯あります。
2008/01/17 15:46 | れい

# re: 些細な事だけど、センスないなーと思うとき

>ただ、「数直線」と「評価対象を左辺」と、どちらを取るかは、優劣は付けられませんね。

後でれいさんが言ってますが、宗教論争ですからね。


>PowerShell だと、nullを左に持ってくようにしてます。

PowerShell は「左辺値が何か」てのが重要みたいですからね。null は左辺にもってかないと不味いですか?


>マシだなー = ベスト解答 ?

ベストとは言えず。ベストを模索しております。


>また宗教戦争ですね?

しまった。「好き嫌いシリーズ」を続けたら良かった。

>粒度が大きい場合は手が動いたとおりに。
>速度が気になる粒度が小さいものは
>numの分布によって||と&&とどっちが早いか異なるので
>それを考慮して決定してます。

速度か。確かにそれも考えるときありますね。
2008/01/17 16:08 | 囚人

# re: 些細な事だけど、センスないなーと思うとき

<とか向きを同じにしろ、ってなんかの本で読んで以来、そうしてます。

なんとなく出っ歯な男の子が出てた漫画だったような...
2008/01/17 16:37 | Chuki

# re: 些細な事だけど、センスないなーと思うとき

前者派でしたが、

>しかし、今回の例では、仮に言語が許せば
>if(min <= num <= max)
>if(!(min <= num <= max))
>と書きますよね。 2リットルさんが仰ってますが「数直線」のイメージでいきたい。

なるほど。数直線ですか。
2008/01/17 17:24 | Piz&Yumina

# re: 些細な事だけど、センスないなーと思うとき

> なんとなく出っ歯な男の子が出てた漫画だったような...
ゲームセンター嵐ですか?
2008/01/17 17:28 | THREE-ONE

# re: 些細な事だけど、センスないなーと思うとき

> なんとなく出っ歯な男の子が出てた漫画だったような...
年がばれますよ。

そういえば、髪の毛がサザエさん風の金持ちの男の子が
出っ歯な男の子に教えてたような漫画を私も持ってますね。
2008/01/17 18:00 | れい

# re: 些細な事だけど、センスないなーと思うとき

template<class T>
bool InRange1(T min, T num, T max); // [min, max]
template<class T>
bool InRange2(T min, T num, T max); // [min, max)
template<class T>
bool InRange3(T min, T num, T max); // (min, max]
template<class T>
bool InRange4(T min, T num, T max); // (min, max)

if (InRange1(min, num, max)) { ... }

名前はともかく、こんな感じでいいんじゃないかなと思った自分は異端。
2008/01/17 18:26 | melt

# re: 些細な事だけど、センスないなーと思うとき

> null は左辺にもってかないと不味いですか?
コレクションが左辺にあると、コレクションの要素に対して比較を行い、
一致するものを返してきますので、
先ほどの例だと、3行目は false ではなく null を返してきます^^;
↓のコードだと、null が複数あるため、fuga の比較は真となってしまいます。

$hoge = @(1, $(), 2);
$fuga = @(1, $(), $(), 2);

if ($hoge -eq $())
{
"hoge";
}

if ($fuga -eq $())
{
"fuga";
}

ちょっと脱線ネタになってしまいましたね。
ちなみに僕の場合、向きが揃っている方が読みやすいって理由で
大小比較には greater than を使わず less than を使うよう統一しています。
この本の受け売りですが → http://www.amazon.co.jp/dp/4872834151

# センスないかな^^;
2008/01/17 18:43 | よこけん

# re: 些細な事だけど、センスないなーと思うとき

サーセン
Cから入ったけど、前者です。
2008/01/17 18:44 | かずくん

# re: 些細な事だけど、センスないなーと思うとき

> めるぽん
同じこと考えた俺も異端?
2008/01/17 19:45 | シャノン

# re: 些細な事だけど、センスないなーと思うとき

>コレクションが左辺にあると、コレクションの要素に対して比較を行い、

おーなるほど。勉強になりました。
2008/01/18 1:07 | 囚人

# re: 些細な事だけど、センスないなーと思うとき

個人的には検査したい対象のnumが左の方が読みやすかったですが、
不等号の向きを揃えるのがどうやらわりと一般的らしいと認識してからは、
慣れで読めるようになりました。
あくまで慣れただけ、という感じですが。
検査対象が左ってのは、なんとなく意図が直感的なんですよね…

範囲の場合は見た目で慣れで分かるんですが、<一つだけとかの場合は対象が左でないと一瞬迷います。
2008/01/18 10:25 | なちゃ

# re: 些細な事だけど、センスないなーと思うとき

>範囲の場合は見た目で慣れで分かるんですが、<一つだけとかの場合は対象が左でないと一瞬迷います。

同意です。記号が一つだけだと、検査対象を左辺に置きたいですね。
2008/01/18 12:50 | 囚人

# 比較演算式へのこだわり

比較演算式へのこだわり
2008/01/23 15:13 | R.Tanaka.Ichiro's Blog

# ILniNVWhAPXRMdA

ngh8By Internet is written with the capital letter in a sentence, by the way. And hundredths are written not with a point but with a comma. This is according to the standard. And actually everything is very good..!
2011/09/29 11:38 | http://oemfinder.com

コメントの投稿

タイトル
名前
URL
コメント