R.Tanaka.Ichiro's Blog

主にC# な話題です

目次

Blog 利用状況

ニュース

インクリメント演算子

ふっと我に還る

と、以下のような記述をしていました。


r.Id = ++this.bodyId;


以前、あまり良い書き方ではないという記述を見かけたことがあるのですが、こんな書き方って皆さんはしないのでしょうか?


++this.bodyId;
r.Id = this.bodyId;


こうやって2行に分けて書いた方がいいのでしょうかね?

 

投稿日時 : 2007年7月17日 13:46

Feedback

# re: インクリメント演算子 2007/07/17 13:52 επιστημη

僕はふつーにやりますょ?
「あまり良い書き方ではない」ねぇ...
評価順序さえわかってりゃ問題ないけど。
わかってない輩に対する配慮ってことでしょか。

# re: インクリメント演算子 2007/07/17 14:05 シャノン

しませんねぇ。俺は後者ですね。

# re: インクリメント演算子 2007/07/17 14:11 中博俊

前置自体を使わない

# re: インクリメント演算子 2007/07/17 14:12 nagise

インクリメント/デクリメントの前置/後置の意味をどのぐらいの人が知っているのかな…?
新人に入社後年数別にアンケートをとって見たい衝動に駆られます。

# re: インクリメント演算子 2007/07/17 14:12 ghost_shell

2行で書くなら、こうかな。(意味の無い前置は馴染めない)

this.bodyId++;
r.Id = this.bodyId;

この場合、そのまま1行にしようとした際に誤る可能性が生じてしまう。

だから僕は前者ですね。

# re: インクリメント演算子 2007/07/17 14:20 シャノン

俺は逆に前置しか使いません。
ま、インクリメントは単独でしか使わないので、前置でも後置でも大した違いはないんですけどw

# re: インクリメント演算子 2007/07/17 14:23 επιστημη

επι的には、インクリメント/デクリメントは"どっちでもいいなら前置"です。

X++ では Xの値 と 式の値 にズレが生じるわけで、
そのズレを積極的に使いたいんでない限り、
ズレない++Xが好みです。多い日も安心。

# re: インクリメント演算子 2007/07/17 14:56 nagise

int 十 = 0;
十 += + 十 ++ + ++ 十;

変態だー! (AA略

# re: インクリメント演算子 2007/07/17 15:02 2リットル

インクリメントを使いたい場面は、後置のが便利なことがおおいので、自然と後置ばかりです。
それに引かれて、”どっちでもいい場合も後置”です。

ズレない前置のがいいとは思うのですが、なんか使いぬくい。

# re: インクリメント演算子 2007/07/17 15:44 ghost_shell

>επι的には、インクリメント/デクリメントは"どっちでもいいなら前置"です。

>X++ では Xの値 と 式の値 にズレが生じるわけで、
>そのズレを積極的に使いたいんでない限り、
>ズレない++Xが好みです。多い日も安心。

多い日も安心w(笑)というのは至極当然な理由だと思います。
それでなぜ後置を使っているのか元をたどってみると、forループでi++としていて、その表記に統一しているからなんですね。

forループの i++ / ++i といえば、まさに「どっちでもいい」!

気になったので社内の書籍を見てみると、「プログラミングVisual C#.NET」のforには前置が使われていました。一般的だろうということで後置を採用した判断はなんだったのかと思ったら、依然多くの本で使われていました。

ちなみにプログラマ経歴はC→C#です。

# re: インクリメント演算子 2007/07/17 15:54 ひろえむ

私は、あまり、こういう書き方って直感的ではない気がするのでしませんね(^^;

単にインクリメントって場合だけでしょうか。

あと、前置か後置は後置にしていますね。

見た目がなんとなく(私は)直感的な感じがするというダケなんですが(^^;

# re: インクリメント演算子 2007/07/17 15:57 片桐

進化しそこねANSI-Cの鎖につながれている片桐は

i++;

が普通です(大汗)

hoge = i++;

とかもやっちゃったりします。

# はじめてのC。。。ちょいエロ? 2007/07/17 16:02 花子's Blog

はじめてのC。。。ちょいエロ?

# re: インクリメント演算子 2007/07/17 17:53 ぷさいくろう

r.Id = this.bodyId+=1;

++this.bodyId : r.Id = this.bodyId;

私ならこのどちらかかしら

# re: インクリメント演算子 2007/07/17 20:52 かるあ

インクリメントした値を代入するとなんかわかりにくい気がするので代入文でつかうことはないかな。
for 文なんかだと 惰性 で i++ ですね。

# re: インクリメント演算子 2007/07/17 21:13 RUN

>一般的だろうということで後置を採用した判断はなんだったのか
本と言う事も有るだろうけど、インクリメント(デクリメント)って単なる数式な訳ではなく代入演算と言う側面も有るから、代入先の変数は左辺に置くという約束事に則って後置が一般的なんだと思う。

と言うか、そんな理由でどうでもよいようなインクリメントは後置派です。

後、最初の命題の1行か2行かだけど、
確実にいえるのは気分次第だけどw

1行にするときは()を確実に修飾すると思う、自分の場合。
演算子の優先順位に依存したコーディングって嫌いなので、()を使って演算順序を明示的にさせる癖を持っているので

# re: インクリメント演算子 2007/07/17 21:42 おぎわら

C のマクロによくあった、アンチパターンに
びびりすぎて、いまでもつかってませんです・・・ orz...

見やすいように、無駄にかっこつけてみたら、
言語によっては、常に true が代入されそうで怖い・・・
r.Id = (++this.bodyId);

# re: インクリメント演算子 2007/07/18 6:50 Kazuki

C++だと意識的に前置を使うことが多いです。
(無駄なインスタンスが作られる場合があるから)

ほかの言語だとどっちでも~って感じですけど、普通に何も考えてないときは後置を使います。

# re: インクリメント演算子 2007/07/18 7:32 επιστημη

> (無駄なインスタンスが作られる場合があるから)

それもあるすね。後置だと

ほげ ほげ::operator++(int) {
 ほげ tmp = *this; incremenet(); return tmp;
}

なんつー実装になるですから。

# re: インクリメント演算子 2007/07/18 9:19 Gushwell

出遅れましたが、
僕は、何も考えないときは、後置を使います。
前置は、意識的に使う場合だけですね。

で、1行か2行かということになると、C言語やってたころは、1行で書いていましたが、
今は、2行で書きます。そのほうが分かりやすいので。

ちなみに新人研修を担当していたときは、

Foo(i++);

Foo(++i);

の違いを必ず説明していました。
でも、本当に分かってくれたのは何人いたかは定かではないですが。



# re: インクリメント演算子 2007/07/18 13:52 qEcY

επιστημη さん

>「あまり良い書き方ではない」ねぇ...
>評価順序さえわかってりゃ問題ないけど。
>わかってない輩に対する配慮ってことでしょか。

この考え方でいくと、三項演算子も似たようなものですよね。
僕はすっきり書けて好きではあるのですけどね。

前置きにしている理由は、以前、エピさんを始めとした、いろいろな方に教えていただいたことが理由になっています。

--------------------------------------------------------
シャノン さん

>しませんねぇ。俺は後者ですね。

やはり後者の人が多いようですね。

--------------------------------------------------------
中博俊 さん

>前置自体を使わない

ということは前者の書き方もしないということですね。

--------------------------------------------------------
nagise さん

>インクリメント/デクリメントの前置/後置の意味をどのぐらいの人が知っているのかな…?

2行に分けて書くなら、知らなくても問題なさそうですもんね。

--------------------------------------------------------
ghost_shell さん

>この場合、そのまま1行にしようとした際に誤る可能性が生じてしまう。

なるほど、これは理由がとっても明確ですね。

>気になったので社内の書籍を見てみると、「プログラミングVisual C#.NET」のforには前置が使われていました。

僕的には、前でも後でも良かったのですが、前置きの方が若干高速らしいので前置きにしていたりします。

--------------------------------------------------------
nagise さん

>十 += + 十 ++ + ++ 十;

無理に 十 を使わなくともw

--------------------------------------------------------
2リットル さん

>ズレない前置のがいいとは思うのですが、なんか使いぬくい。

うーん、これは慣れなんでしょうかね。

--------------------------------------------------------
ひろえむ さん

>私は、あまり、こういう書き方って直感的ではない気がするのでしませんね(^^;

直観的であることは重要ですよね。

--------------------------------------------------------
片桐 さん

>hoge = i++;
>
>とかもやっちゃったりします。

なかーまっ!

--------------------------------------------------------
ぷさいくろう さん

>r.Id = this.bodyId+=1;

こっ、この書き方はしたことがないですね^^;

--------------------------------------------------------
かるあ さん

>インクリメントした値を代入するとなんかわかりにくい気がするので代入文でつかうことはないかな。

かるあさんも後者派なんですね。

--------------------------------------------------------
RUN さん

>後、最初の命題の1行か2行かだけど、
>確実にいえるのは気分次第だけどw

ええーーーっ!

>1行にするときは()を確実に修飾すると思う、自分の場合。

以前は、僕も () をよく使っていたのですが、この直後の、おぎさんと同じ理由から () はあまり使わなくなりましたね。

--------------------------------------------------------
おぎわら さん

>見やすいように、無駄にかっこつけてみたら、
>言語によっては、常に true が代入されそうで怖い・・・
>r.Id = (++this.bodyId);

そうなんですよね。
言語によっては、というところが意外に落とし穴で、バグの発見が困難になったりしそうで怖いです。

--------------------------------------------------------
Kazuki さん

>C++だと意識的に前置を使うことが多いです。
>(無駄なインスタンスが作られる場合があるから)

無駄なインスタンス?

--------------------------------------------------------
Gushwell さん

>で、1行か2行かということになると、C言語やってたころは、1行で書いていましたが、
>今は、2行で書きます。そのほうが分かりやすいので。

うーん、やはり2行の人が圧倒的に多いんですね。

>ちなみに新人研修を担当していたときは、
>
>Foo(i++);
>と
>Foo(++i);
>の違いを必ず説明していました。

引数の値が変わっちゃうわけですが、わかりにくいと言えばわかりにくいかもしれませんね。

# re: インクリメント演算子 2007/07/18 13:53 R・田中一郎

ちなみに、qEcYはR・田中一郎でした。

#またやっちった。

# re: インクリメント演算子 2007/07/18 14:40 通りすがりの2行に分ける後置派

C++と++Cどちらがいいかと言われるとやっぱりC++でしょうね。
C#と#Cどちらがいいと言われるとやっぱりC#でしょうね。
#って、違う!

単に最初に出会った書籍がそうだったから程度の理由です。

# re: インクリメント演算子 2007/07/19 13:18 R・田中一郎

>単に最初に出会った書籍がそうだったから程度の理由です。

慣れというのは大きいですからね。
僕も、以前は C++ でした。

# QquceIvlHfdPUM 2011/12/26 22:56 http://www.discreetpharmacist.com/ita/index.asp

Totally agree with you, about a week ago wrote about the same in my blog..!

# HBYvehsrEZ 2011/12/27 5:58 http://www.hansensurf.com

Not bad post, leave it at my bookmarks!...

# SEhMcFyscahGy 2011/12/28 2:39 http://www.seokiwi.com

It`s really useful! Looking through the Internet you can mostly observe watered down information, something like bla bla bla, but not here to my deep surprise. It makes me happy..!

# ESVIcXccwdAJe 2011/12/28 2:48 http://www.seokiwi.com

I serched through the internet and got here. What a wonderful invention of the mankind. With the help of the network you communicate, learn, read !... That helped us to get acquainted!...

# mFEIaWWkCbGsiYbwhj 2011/12/29 2:38 http://www.seokiwi.com/

Yeah !... life is like riding a bicycle. You will not fall unless you stop pedaling!!...

# qefHxoBuFFqv 2012/01/04 19:37 http://wmcoin.com/

Somewhere in the Internet I have already read almost the same selection of information, but anyway thanks!!...

タイトル
名前
Url
コメント