If you access a void variable, you don't get a lot of information back:
>> state: ~
== \~\ ; antiform (void!)
>> state
** Script Error: state is VOID!, use ^STATE to fetch
But you're not just limited to the VOID! to make "unset" variables... because you can use TRASH!...the antiform TAG!.
>> state: ~<INITIALIZE-STATE not called yet>~
; ^-- trash doesn't show up in console with an "==" result
>> state
** Script Error: state is trash: ~<INITIALIZE-STATE not called yet>~
(This concept was originally called a "tripwire", but TRASH! was favored as a shorter and more common name.)
DEFAULT reacts to TRASH! as it does to voids and nulls, considering the variable to be "defaultable"
>> defaultable? $state
== ~okay~ ; anti
>> state: default [10 + 20]
== 30
>> state
== 30
Can Be Better Than A Meandering Comment!
A comment won't direct people to the relevant issue at runtime. But a well-chosen labeled trash can.
Compare:
; !!! UPARSE is not available in SYS because it is higher level. We hack it
; up so that when %uparse.r runs it pokes itself into sys.util/parse
;
parse: ~
With:
parse: ~<higher-level %uparse.r hasn't set SYS.UTIL/PARSE yet>~
Much better! Gives you the information you need, when you need it!
(Note: I was inspired to this concept by a style of usage @rgchris had in his scripts, using TAG!s to provide guidance for what was supposed to be filled into certain slots. I just wanted to give that some teeth, to know that the variable was conceptually unset.)