[C]インクリメントとデクリメント・カンマ演算子

[スポンサードリンク]

C言語でのインクリメントとデクリメント。変数初期化のカンマ演算子を少し。

インクリメントとデクリメント

整数型の変数の値を1増やしたり、1減らしたりする演算子があり、カウントアップやカウントダウンに使われる。

変数の値を1増やす演算子をインクリメントといい、変数の値を1減らす演算子をデクリメントという。

インクリメントは「++(プラス2個)」で表し、デクリメントは「--(マイナス2個)」で表す。

それぞれに、変数名の前後に付けて、下記のように使用する

名称 使用方法
後置インクリメント a++
前置インクリメント ++a
後置デクリメント a--
前置デクリメント --a

インクリメント・デクリメントが使用できない言語もある

Java、Perl、PHP、C系言語などはインクリメント・デクリメント演算子を実装しているが。
例えばRubyなんかが、インクリメント・デクリメントができない。Pythonも使えないらしい。

その理由について、Rubyに関しては。

++の動作が本質的に「変数を操作する」ものであるため,変数がオブジェクトでないRubyでは導入できない

Rubyではその他の多くのプログラミング言語と違い、「変数」を「オブジェクト」として扱っていないようです。そのためRubyにおいての変数は、数そのものへのポインタということになり、ここに破壊的動作である++演算子を使用してしまうと、「ポインタの位置がインクリメントされる」という正しく破壊的な結果がもたらされてしまうようです。

n++ はオブジェクト n に対するメソッドのように見えます。 しかし、メソッドは変数 n ではなく、n が参照しているオブジェクトに対する操作です。 それに従った、数値(例: 2)オブジェクトの意味を変える(例: 2 オブジェクトを 3 の意味にする)という処理をするわけではありません。 インクリメントは、変数が参照する数値オブジェクトを、別の数値オブジェクトに切り替える処理になります。

要するに、CやC++、C#は変数の中身を1増減できる(値が入っているだけだから)。
しかし、Rubyに関しては、変数はオブジェクトのアドレスを指すものだから、それをインクリメント・デクリメントしてしまうと、まったく別のオブジェクトのアドレスを参照してしまうから、そんな演算子は実装できない。

らしいです。

ソースコード

a=10、b=0の変数の値で、それぞれ処理を行ってみる。

実行結果

カンマ演算子

ソースの、7,20,26,36行目がおかしいと思っただろうか?

通常なら

こう書くべきであるが、これはカンマ演算子といって、調べたらどうもセミコロン(;)の代わりもやってしまうらしいのだが、構文や文法のルールが壊れるので、使用しない方がいいという意見が多いので、使わないようにしよう。

ただし、変数宣言のこれは除く。

[スポンサードリンク]

関連記事

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

CAPTCHA


ピックアップ記事

  1. SQLで月の末尾を求める方法。 (さらに…)…
  2. 本記事ではXMLからSQLを取得し、SQLiteで実行する。プリペアードステートメントを使用する。 …
  3. いまの時代、一つの企業に就職してそこで定年を迎えるというのはまれです。 しかし、それが一番いいと私…
  4. あいまい検索での否定 ○○以外の書き方 あいまい検索での否定は「[^任意の文字・文字列]…
  5. C#でSQL Serverから値を取得するには、System.Data.SqlClientクラスを使…

カテゴリー

[スポンサードリンク]




ページ上部へ戻る