Null object: Difference between revisions

1,181 bytes added ,  2 months ago
(Add Ecstasy example)
(11 intermediate revisions by 5 users not shown)
Line 730:
 
<syntaxhighlight lang="java">
module NullObject {
void run() {
void run()
{
@Inject Console console;
console.printlnprint($"Null value={Null}, Null.toString()={Null.toString()}");
 
// String s = Null; // <-- compiler error: cannot assign Null to a String type
String? s = Null; // "String?" is shorthand for the union "Nullable|String"
String s2 = "test";
console.printlnprint($"{s={s}, {s2={s2}, ({s==s2)={s==s2}");
 
// Int len = s.size; // <-- compiler error: String? does not have a "size" property
Int len = s?.size : 0;
console.printlnprint($"{len={len}");
 
if (String test ?= s) {
{
// "s" is still Null in this test, we never get here
} else }{
else
{
s = "a non-null value";
}
 
// s2 = s; // <-- compiler error: a "String?" cannot be assigned to a "String"
if (String test ?= s)
{
// the variable "test" is definitely assigned here
console.println($"test={test}");
}
else
{
// s2 = test; // <-- compiler error: "test" is not definitely assigned
}
}
 
// s2if =(String test; ?= s){} // <-- compiler error: "test"The expression type is not definitely assignednullable
// s2 = s; // <--at compilerthis error:point, as "String?"is cannotknown to be assigneda to anon-null "String"
console.printlnprint($"test{s=}, {tests2=}, {s==s2=}");
}
}
</syntaxhighlight>
 
{{out}}
Output:
<pre>
<syntaxhighlight>
Null value=Null, Null.toString()=Null
s=Null, s2=test, (s==s2)=False
len=0
tests=a non-null value, s2=a non-null value, s==s2=True
</pre>
</syntaxhighlight>
 
=={{header|Eiffel}}==
Line 815 ⟶ 803:
<syntaxhighlight lang="elixir">iex(3)> if nil, do: "not execute"
nil</syntaxhighlight>
 
=={{header|EMal}}==
</syntaxhighlight lang="emal">
^|
| EMal has the Variable type (and its keyword var) that is the nullable universal supertype.
| EMal has the Void type (and its keyword void) that holds only one value: null.
| EMal has not nullable types (logic, int, real, text, blob), but null equality is always allowed.
|^
var a # defaults to null
int b # defaults to 0
void c # only one allowed value: null
writeLine("nullable var equals to not nullable int: " + (a == b)) # allowed, false
^| if the data type of a is void we are sure that a is null |^
writeLine("type of a equals to Void data type: " + (generic!a == void)) # true
writeLine("integer value " + b + " equals to null: " + (b == null)) # allowed, always false
writeLine("a void value equals to null: " + (c == null)) # always true</syntaxhighlight>
{{out}}
<pre>
nullable var equals to not nullable int: ⊥
type of a equals to Void data type: ⊤
integer value 0 equals to null: ⊥
a void value equals to null: ⊤
</pre>
 
=={{header|Erlang}}==
Line 923 ⟶ 934:
</pre>
 
=={{header|GDScript}}==
Godot has a null value. Here is an example of dealing with null.
<syntaxhighlight lang="gdscript">
extends Node2D
 
func _ready() -> void:
var empty : Object
var not_empty = Object.new()
# Compare with null.
if empty == null:
print("empty is null")
else:
print("empty is not null")
# C-like comparation.
if not_empty:
print("not_empty is not null")
else:
print("not_empty is null")
return
</syntaxhighlight>
{{out}}
<pre>
empty is null
not_empty is not null
</pre>
 
=={{header|Go}}==
Line 1,152 ⟶ 1,189:
 
=={{header|langur}}==
Null can be compared for directly, using equality operators, or can be checked with the isNull() function. Operators ending with a ? mark propagate null. A null in an expression test is a non-truthy result.
 
{{works with|langur|0.10}}
Prior to 0.10, multi-variable declaration/assignment would use parentheses around variable names and values.
 
<syntaxhighlight lang="langur">val .x, .y = true, null
Line 1,454 ⟶ 1,488:
=={{header|MAXScript}}==
<syntaxhighlight lang="maxscript">if obj == undefined then print "Obj is undefined"</syntaxhighlight>
 
=={{header|min}}==
<syntaxhighlight lang="min">null null? puts!</syntaxhighlight>
{{out}}
<pre>true</pre>
 
=={{header|Modula-3}}==
Line 2,299 ⟶ 2,338:
 
It is always easy to test for nullness either by querying a variable's type or checking the value of a boolean expression involving a potentially null variable.
<syntaxhighlight lang="ecmascriptwren">// Declare a variable without giving it an explicit value.
var s
 
885

edits