LoginSignup
2
1

More than 3 years have passed since last update.

Rubyでは1++++++++++1は許される

Posted at

元ネタ

コード

irb(main):001:0> 1+++++++++++++++++++++++1
=> 2
irb(main):002:0> 1-----------------------1
=> 0
irb(main):003:0> 1----------------------1
=> 2
irb(main):004:0> 1+++++---------+++-+++---+1
=> 0

解説

解説というほどでもないですが,そもそもRubyにはJavaScriptやC/C++と異なりインクリメント(デクリメント)演算子++ (--)は存在しません.
ということで,単純に以下のように先頭の+は二項演算子として解釈され,残りは単項演算子として解釈されるというだけの話です.そもそも1+++11.+(++1)だと知っていればどうということはないですね.

他の言語

Python

Pythonにもインクリメント演算子はなく同様の振る舞いをします.

>>> 1+++++++++++++++++++1
2
>>> 1-------------------1
0

Rust

Rustにもインクリメント演算子はありません.
Rustには単項演算子の+が存在しないため 1++1 はコンパイルエラーになってしまいますが 1--1 は合法です.

fn main() {
  // println!("{}", 1++1);  // error: expected expression, found `+`
    println!("{}", 1-------------------1);  // => 0
}

あとはC++とJavaScriptくらいしかわからないのでネタ切れです.

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1