Rubyにはインクリメント演算子(++)が無い
Rubyを書いてて、いつも疑問に思ってた事項なので自分用にメモ。
CやJava、またはPerl等のプログラム言語では、整数の値に1を加算する時にインクリメント演算子++
を使用します。しかし、Rubyではインクリメント演算子を使うことは出来ません。
インクリメント演算子が無い理由
Rubyの開発者であるMatzさんが、過去この件について言及されておりました。
3) 記号的な記法
これは単なる私の趣味ですが, 単項インクリメントとかがたまに欲しく
なります. i += 1 でいいわけですが. i++ と書いて怒られる (^^;
すんません.この件は以前から指摘されているのですが(演算子はC
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/5323
に似ているのに++と--は対応する演算子が無い),++の動作が本質
的に「変数を操作する」ものであるため,変数がオブジェクトでな
いRubyでは導入できないでいます.++や--の「オブジェクト指向的
意味」がRubyの他の部分と整合性を保ったまま定義できれば採用し
たいのですが….
以下、自分なりの解釈。
Rubyでは整数値はオブジェクトであるためインクリメント演算子を実現しようとすれば変数が参照しているオブジェクトそのものに作用する必要がありますが、++
演算子が変数に対して作用するものであるため実現が困難であるということですかねぇ。
また、RubyのFixnumクラスはimmutableですので、さらに実現は困難ですね。
Ruby の Fixnum クラスは immutable です。 つまり、オブジェクト自体を破壊的に変更することはできません。 Bignum も同様です。
https://docs.ruby-lang.org/ja/latest/class/Fixnum.html
インクリメントメソッド
尚、Fixnumクラスにはnext
やsucc
という値に+1するメソッドはあります。しかし、前述の通りFixnum自体がimmutableである為、
num=10
num.next
としてもnumの値は変化しません。
結論
Rubyでは、整数をインクリメントする場合はおとなしく+=1
を使いましょう。