aboutsummaryrefslogtreecommitdiff
path: root/documentation/tour/literals.sloth
diff options
context:
space:
mode:
Diffstat (limited to 'documentation/tour/literals.sloth')
-rw-r--r--documentation/tour/literals.sloth79
1 files changed, 79 insertions, 0 deletions
diff --git a/documentation/tour/literals.sloth b/documentation/tour/literals.sloth
new file mode 100644
index 0000000..53e29cd
--- /dev/null
+++ b/documentation/tour/literals.sloth
@@ -0,0 +1,79 @@
+# Literals
+val number = 85; #TODO: Decide on default integer type
+val number = 85.0; # f64 is the default decimal type
+
+val number: u16 = 27; # If you want more control over memory usage you can specify a integer type
+val number: u16 = 27u16;
+val number: u16 = 0x1B;
+val number: u16 = 0x1Bu16;
+
+val number: BigInt = BigInt::from(73); #TODO: naming
+val number: BigFloat = BigFloat::from(73); #TODO: naming
+
+val chars: char = ' ';
+
+val strings: String = "Normal string";
+val strings: String = "Formated strings ${number}";
+val strings: String = """String literals""";
+
+val regex: Regex = /[0-9A-F]/;
+
+val list: List<i32> = [1, 2, 3, 2];
+val sets: Set<i32> = {1, 2, 3, 2};
+
+val maps = {
+ "foo": 48,
+ "bar": 97,
+};
+
+val maps: Map<String, i32> = {
+ "foo": 48,
+ "bar": 97,
+};
+
+# Types can be 'any' and be assigned to anything
+var anything: any = "I'm a string right now";
+anything = 53;
+anything = "I was a number- but now I'm a string again";
+
+# You can use the `is` keyword to check if a type is something
+if anything is String {
+ # Now I can call functions that take a String
+ anything.split('-');
+}
+
+# TODO: HMMMMMMM-
+if anything is Some(it) {}
+
+# You can use the `in` keyword to check if something is in a collection
+if "hello" in ["hello", "hola"] {
+ #
+}
+
+# ... or a range
+if 5 in 2..17 {
+ #
+}
+
+# ... or anything that implements Contains<T>
+if 'p' in "Apple" {} # impl Contains<char> for String
+if "ppl" in "Apple" {} # impl Contains<String> for String
+if /[0-9]/ in "24" {} # impl Contains<Regex> for String
+
+# `value!` Can be used to bubble up an Option or Result
+# `value!!` Can be used to panic on None or Error
+# `value?` Can be used to optionally chain
+# `value ?: 0` Can be used to provide a default
+
+maps["foo"] # Option<i32>
+maps["foo"]!! # 48 - Panics in None case
+maps["foo"]! # 48 - Caller of function is responsible for None case
+maps["foo"]?.signum() ?? 0 # 1 - Provide a default for None case
+maps.keys() # ["foo", "bar"]
+maps.values() # [48, 97]
+
+# Spreading
+val lhs = [1, 2, 3];
+val rhs = [4, 5, 6];
+val combined_list = [..lhs, ..rhs, 2, 4, 6];
+val combined_sets = {..lhs, ..rhs, 2, 4, 6};