i've also had cases where i would've preferred $v1 to return 1 instead of its negation, but i've come to accept it. "!$+()" is the whole parameter to the if condition, and the definition of $v1 is 'the first parameter of an if condition', so the behavior does make sense
you could use == $null, but of course checking (%x == $null) isnt the same as (!%x). in cases where you absolutely need to check (!%x), but would like %x to be filled as $v1 you could use:
if (%x) /
else {
; stuff with $v1
}
or set variables, and so on