79 lines
1.6 KiB
Plaintext
79 lines
1.6 KiB
Plaintext
var any_var; // type is Any
|
|
var number = 10; // type is Int
|
|
number = "123"; // valid
|
|
|
|
var number2 := 10; // specific type is Int
|
|
var number3: Int = 10; // both is ok
|
|
/*
|
|
number2 = 3.14;
|
|
invalid!
|
|
*/
|
|
|
|
const Pi := 3.14; // recommended, auto detect type
|
|
// equal -> const Pi: Double = 3.14;
|
|
|
|
/*
|
|
In fig, we have 13 builtin-type
|
|
|
|
01 Any
|
|
02 Null
|
|
03 Int
|
|
04 String
|
|
05 Bool
|
|
06 Double
|
|
07 Function
|
|
08 StructType
|
|
09 StructInstance
|
|
10 List
|
|
11 Map
|
|
12 Module
|
|
13 InterfaceType
|
|
|
|
3, 4, 5, 6, 10, 11 are initable
|
|
|
|
value system:
|
|
object is immutable
|
|
(included basic types: Int, String...)
|
|
|
|
`variable` is a name, refers to an object
|
|
assignment is to bind name to value
|
|
|
|
Example: var a := 10;
|
|
|
|
[name] 'a' ---> variable slot (name, declared type, access modifier, [value) ---> ObjectPtr ---> raw Object class
|
|
bind bind (shared_ptr)
|
|
|
|
For example:
|
|
var a := 10;
|
|
var b := 10;
|
|
|
|
`a` and `b` reference to the same object in memory
|
|
|
|
a = 20;
|
|
|
|
now a refers to a new object (20, Int)
|
|
|
|
what about complex types?
|
|
they actually have same behaviors with basic types
|
|
|
|
var a := [1, 2, 3, 4];
|
|
var b := a;
|
|
|
|
> a
|
|
[1, 2, 3, 4]
|
|
> b
|
|
[1, 2, 3, 4]
|
|
|
|
set a[0] to 5
|
|
|
|
> a
|
|
[5, 2, 3, 4]
|
|
> b
|
|
[5, 2, 3, 4]
|
|
|
|
Why did such a result occur?
|
|
|
|
" `a` and `b` reference to the same object in memory "
|
|
|
|
If you wish to obtain a copy, use List {a} to deeply copy it
|
|
*/ |