Sum data type: Difference between revisions

m
→‎{{header|Phix}}: syntax coloured, added p2js note
(C++ entry)
m (→‎{{header|Phix}}: syntax coloured, added p2js note)
Line 490:
Phix has the object type, which can hold an integer, float, string, (nested) sequence, or anything else you can think of.
 
User defined types can be used to enforce restrictions on the contents of variables.
<lang Phix>type ipv4(object o)
if not sequence(o) or length(o)!=4 then
return false
end if
for i=1 to 4 do
if not integer(o[i]) then
return false
end if
end for
return true
end type
 
Note however that JavaScript is a typeless language, so no error occurs under pwa/p2js.
type ipv6(object o)
return string(o)
end type
 
<!--<lang Phix>(phixonline)-->
type ipaddr(object o)
<span style="color: #008080;">with</span> <span style="color: #008080;">javascript_semantics</span>
return ipv4(o) or ipv6(o)
<span style="color: #008080;">type</span> <span style="color: #000000;">ipv4</span><span style="color: #0000FF;">(</span><span style="color: #004080;">object</span> <span style="color: #000000;">o</span><span style="color: #0000FF;">)</span>
end type
<span style="color: #008080;">if</span> <span style="color: #008080;">not</span> <span style="color: #004080;">sequence</span><span style="color: #0000FF;">(</span><span style="color: #000000;">o</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">or</span> <span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">o</span><span style="color: #0000FF;">)!=</span><span style="color: #000000;">4</span> <span style="color: #008080;">then</span>
 
<span style="color: #008080;">return</span> <span style="color: #004600;">false</span>
ipaddr x
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
x = {127,0,0,1} -- fine
<span style="color: #008080;">for</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">to</span> <span style="color: #000000;">4</span> <span style="color: #008080;">do</span>
x = "::c01e:fc9a" -- fine
<span style="color: #008080;">if</span> <span style="color: #008080;">not</span> <span style="color: #004080;">integer</span><span style="color: #0000FF;">(</span><span style="color: #000000;">o</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">])</span> <span style="color: #008080;">then</span>
x = -1 -- error</lang>
<span style="color: #008080;">return</span> <span style="color: #004600;">false</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
<span style="color: #008080;">return</span> <span style="color: #004600;">true</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">type</span>
<span style="color: #008080;">type</span> <span style="color: #000000;">ipv6</span><span style="color: #0000FF;">(</span><span style="color: #004080;">object</span> <span style="color: #000000;">o</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">return</span> <span style="color: #004080;">string</span><span style="color: #0000FF;">(</span><span style="color: #000000;">o</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">type</span>
<span style="color: #008080;">type</span> <span style="color: #000000;">ipaddr</span><span style="color: #0000FF;">(</span><span style="color: #004080;">object</span> <span style="color: #000000;">o</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">return</span> <span style="color: #000000;">ipv4</span><span style="color: #0000FF;">(</span><span style="color: #000000;">o</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">or</span> <span style="color: #000000;">ipv6</span><span style="color: #0000FF;">(</span><span style="color: #000000;">o</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">type</span>
<span style="color: #000000;">ipaddr</span> <span style="color: #000000;">x</span>
<span style="color: #000000;">x</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">127</span><span style="color: #0000FF;">,</span><span style="color: #000000;">0</span><span style="color: #0000FF;">,</span><span style="color: #000000;">0</span><span style="color: #0000FF;">,</span><span style="color: #000000;">1</span><span style="color: #0000FF;">}</span> <span style="color: #000080;font-style:italic;">-- fine</span>
<span style="color: #000000;">x</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">"::c01e:fc9a"</span> <span style="color: #000080;font-style:italic;">-- fine</span>
<span style="color: #000000;">x</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">-</span><span style="color: #000000;">1</span> <span style="color: #000080;font-style:italic;">-- error (but not p2js)</span>
<!--</lang>-->
 
=={{header|Raku}}==
7,805

edits