主にC# な話題です
ふっと我に還る
と、以下のような記述をしていました。
r.Id = ++this.bodyId;
以前、あまり良い書き方ではないという記述を見かけたことがあるのですが、こんな書き方って皆さんはしないのでしょうか?
++this.bodyId;r.Id = this.bodyId;
こうやって2行に分けて書いた方がいいのでしょうかね?
投稿日時 : 2007年7月17日 13:46
僕はふつーにやりますょ? 「あまり良い書き方ではない」ねぇ... 評価順序さえわかってりゃ問題ないけど。 わかってない輩に対する配慮ってことでしょか。
しませんねぇ。俺は後者ですね。
前置自体を使わない
インクリメント/デクリメントの前置/後置の意味をどのぐらいの人が知っているのかな…? 新人に入社後年数別にアンケートをとって見たい衝動に駆られます。
2行で書くなら、こうかな。(意味の無い前置は馴染めない) this.bodyId++; r.Id = this.bodyId; この場合、そのまま1行にしようとした際に誤る可能性が生じてしまう。 だから僕は前者ですね。
俺は逆に前置しか使いません。 ま、インクリメントは単独でしか使わないので、前置でも後置でも大した違いはないんですけどw
επι的には、インクリメント/デクリメントは"どっちでもいいなら前置"です。 X++ では Xの値 と 式の値 にズレが生じるわけで、 そのズレを積極的に使いたいんでない限り、 ズレない++Xが好みです。多い日も安心。
int 十 = 0; 十 += + 十 ++ + ++ 十; 変態だー! (AA略
インクリメントを使いたい場面は、後置のが便利なことがおおいので、自然と後置ばかりです。 それに引かれて、”どっちでもいい場合も後置”です。 ズレない前置のがいいとは思うのですが、なんか使いぬくい。
>επι的には、インクリメント/デクリメントは"どっちでもいいなら前置"です。 > >X++ では Xの値 と 式の値 にズレが生じるわけで、 >そのズレを積極的に使いたいんでない限り、 >ズレない++Xが好みです。多い日も安心。 多い日も安心w(笑)というのは至極当然な理由だと思います。 それでなぜ後置を使っているのか元をたどってみると、forループでi++としていて、その表記に統一しているからなんですね。 forループの i++ / ++i といえば、まさに「どっちでもいい」! 気になったので社内の書籍を見てみると、「プログラミングVisual C#.NET」のforには前置が使われていました。一般的だろうということで後置を採用した判断はなんだったのかと思ったら、依然多くの本で使われていました。 ちなみにプログラマ経歴はC→C#です。
私は、あまり、こういう書き方って直感的ではない気がするのでしませんね(^^; 単にインクリメントって場合だけでしょうか。 あと、前置か後置は後置にしていますね。 見た目がなんとなく(私は)直感的な感じがするというダケなんですが(^^;
進化しそこねANSI-Cの鎖につながれている片桐は i++; が普通です(大汗) hoge = i++; とかもやっちゃったりします。
はじめてのC。。。ちょいエロ?
r.Id = this.bodyId+=1; ++this.bodyId : r.Id = this.bodyId; 私ならこのどちらかかしら
インクリメントした値を代入するとなんかわかりにくい気がするので代入文でつかうことはないかな。 for 文なんかだと 惰性 で i++ ですね。
>一般的だろうということで後置を採用した判断はなんだったのか 本と言う事も有るだろうけど、インクリメント(デクリメント)って単なる数式な訳ではなく代入演算と言う側面も有るから、代入先の変数は左辺に置くという約束事に則って後置が一般的なんだと思う。 と言うか、そんな理由でどうでもよいようなインクリメントは後置派です。 後、最初の命題の1行か2行かだけど、 確実にいえるのは気分次第だけどw 1行にするときは()を確実に修飾すると思う、自分の場合。 演算子の優先順位に依存したコーディングって嫌いなので、()を使って演算順序を明示的にさせる癖を持っているので
C のマクロによくあった、アンチパターンに びびりすぎて、いまでもつかってませんです・・・ orz... 見やすいように、無駄にかっこつけてみたら、 言語によっては、常に true が代入されそうで怖い・・・ r.Id = (++this.bodyId);
C++だと意識的に前置を使うことが多いです。 (無駄なインスタンスが作られる場合があるから) ほかの言語だとどっちでも~って感じですけど、普通に何も考えてないときは後置を使います。
> (無駄なインスタンスが作られる場合があるから) それもあるすね。後置だと ほげ ほげ::operator++(int) { ほげ tmp = *this; incremenet(); return tmp; } なんつー実装になるですから。
出遅れましたが、 僕は、何も考えないときは、後置を使います。 前置は、意識的に使う場合だけですね。 で、1行か2行かということになると、C言語やってたころは、1行で書いていましたが、 今は、2行で書きます。そのほうが分かりやすいので。 ちなみに新人研修を担当していたときは、 Foo(i++); と Foo(++i); の違いを必ず説明していました。 でも、本当に分かってくれたのは何人いたかは定かではないですが。
επιστημη さん >「あまり良い書き方ではない」ねぇ... >評価順序さえわかってりゃ問題ないけど。 >わかってない輩に対する配慮ってことでしょか。 この考え方でいくと、三項演算子も似たようなものですよね。 僕はすっきり書けて好きではあるのですけどね。 前置きにしている理由は、以前、エピさんを始めとした、いろいろな方に教えていただいたことが理由になっています。 -------------------------------------------------------- シャノン さん >しませんねぇ。俺は後者ですね。 やはり後者の人が多いようですね。 -------------------------------------------------------- 中博俊 さん >前置自体を使わない ということは前者の書き方もしないということですね。 -------------------------------------------------------- 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); >の違いを必ず説明していました。 引数の値が変わっちゃうわけですが、わかりにくいと言えばわかりにくいかもしれませんね。
ちなみに、qEcYはR・田中一郎でした。 #またやっちった。
C++と++Cどちらがいいかと言われるとやっぱりC++でしょうね。 C#と#Cどちらがいいと言われるとやっぱりC#でしょうね。 #って、違う! 単に最初に出会った書籍がそうだったから程度の理由です。
>単に最初に出会った書籍がそうだったから程度の理由です。 慣れというのは大きいですからね。 僕も、以前は C++ でした。
Totally agree with you, about a week ago wrote about the same in my blog..!
Not bad post, leave it at my bookmarks!...
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..!
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!...
Yeah !... life is like riding a bicycle. You will not fall unless you stop pedaling!!...
Somewhere in the Internet I have already read almost the same selection of information, but anyway thanks!!...
Powered by: Copyright © R・田中一郎