3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Pythonでは`+++`も`+++++`も`++++++++`も許される

Last updated at Posted at 2020-07-15

バズっているようなので相乗りします。

C/C++ では+++は許される
JavaScriptで+++は許されない+ ++は許される

Pythonでは+++++++++++++++も許されます!

a = 1
b = 2
print(a+b) # OK
print(a++b) # OK
print(a+++b) # OK
# ...
print(a+++++++++++++++b) # OK

すなわち、+を繋げてどんなに長い「演算子」をつくったとしても動きます。

上でつくった「演算子」は、前置演算子としても使えます。

上でつくった「演算子」は2項演算子ですが、同様に前置演算子バージョンもあります。

a = 1
print(+a) # OK
print(++a) # OK
print(+++a) # OK
# ...
print(+++++++++++++++a) # OK

-----でもよい。

+が嫌いな方は、-を使って「演算子」を構成してもよいでしょう。

a = 1
b = 2
print(a-b) # OK
print(a--b) # OK
print(a---b) # OK
# ...
print(a---------------b) # OK

もちろん、前置演算子バージョンも使えます。
また、+-を適宜まぜあわせて使ってもいいです。(+---+-+++-+のように)

用途

ソースコードの区切り

print("first")
print("second")
print("third")
0-+-+-+-+-+-+-0
print("100 times")

JavaScriptだとダメ

Javascriptの場合、以下のように3文字以上の「演算子」はエラーとなる可能性が高いです。

let a = 1
console.log(+++a) // NG
console.log(a+++) // NG
console.log(++-a) // NG

ただし、以下はOKです。

let a = 1, b = 2
console.log(-++a) // OK
console.log(+-+a) // OK
console.log(a++-b) // OK
console.log(a-++b) // OK
console.log(a++-++b) // OK

なぜダメなの?

PythonとJavaScript (or C)の違いは、インクリメント演算子++が定義されているかどうかです。例えば+++++という「演算子」がある場合は演算子を最小一致で切り出していくので、++ ++ +という3つの演算子に分割されます。
++演算子は右側(or 左側)が左辺値(変数)でなければならないため、エラーとなります。

思ったこと。

++が存在しない言語でも、Luaの場合は++のようにつなげて書くと+ +のように分割されず、エラーになるようです

3
0
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
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?