[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. C#でSQL Serverから値を取得するには、System.Data.SqlClientクラスを使…
  2. NPOIを使ってExcelの読み書きをする方法 (さらに…)…
  3. SUM関数を使用して累計を求める (さらに…)…
  4. リモートデスクトップ接続のサーバーで、スタートメニューが反応しなくなった場合 (さらに&hell…
  5. Visual Studioで開発時、「ファイルを開くダイアログ」を表示時にWindows7がフリーズ…

カテゴリー

[スポンサードリンク]




ページ上部へ戻る