Are there plans to implement an operator like x++? Can it be created by the user? Thanks.
The ++ operator exists as a user extensible operator, but it is infix rather than postfix. That is, x++ is not a valid expression but x ++ y is.
Assuming you’re talking about the increment operator like in C, you can mimic the pre-increment ++i with a macro:
julia> macro ++(x::Symbol)
return :( $(esc(x)) = $(esc(x)) + 1 )
end
@++ (macro with 1 method)
julia> i = 2
2
julia> @++ i
3
julia> i
3
You can write x += 1 to increment x.
make it a package! PlusPlus.jl?
But this one would be better, so… PlusPlusPlus.jl?
and they do the *same thing (almost) the same way…
I’ll take a look at PlusPlus.jl. I really like the syntax of C and also Julia. I thought a native x++ would be nice. I actually use x += 1.
Thanks.
To be fair, x++ would probably not promote the type the way that x += 1 does. Perhaps instead x += true, though I don’t claim to like using boolean literals for the purpose of preventing promotion.
julia> Meta.@lower x += 1
:($(Expr(:thunk, CodeInfo(
@ none within `top-level scope'
1 ─ %1 = x + 1
│ x = %1
└── return %1
))))
julia> typeof(Int8(3) + 1)
Int64
julia> typeof(Int8(3) + true)
Int8
I am not sure that C’s ++ increment would be a good fit for Julia. First, recall that x can be any generic value (eg a Date), so the generic solution is most likely
x += oneunit(x)
which is shorthand for x = x + oneunit(x).
While ++ could expand to this, the hidden/implicit = it would introduce its own host of complications (eg surprises in scoping).
Also, ++ used extensively for loops & similar in C/C++. Julia has higher level constructs, you so situations where you have to manually increment counters are more rare.
This is a good observation: while there are some constructs like += that expand to assignment, at least they all involve the = somewhere in the syntax, which serves as a hint that an assignment is occurring. In C, assignment is not so significant since you have to explicitly declare every variable (I was habitually about write C/C++, but assignment is very significant, subtle and complex in C++, so I’m intentionally leaving it out). C also has a model where variables do actually behave semantically like memory locations (you can take an address of any variable), whereas in Julia a variable is just a name associated with a value.