Datové typy
Každá hodnota Redu má svůj specifický datový typ, který určuje rozsah přípustných hodnot, přípustné operace a způsob uložení hodnot v paměti. Datových typů je aktuálně 46, včetně datového typu datatype! Výpis datových typů získáme dotazem:
>> ? datatype!
Z těchto 46 datových typů je vytvořeno 16 skupin (typesetů), majících společné vlastnosti. Některé datové typy se vyskytují ve více skupinách. Výpis těchto skupin získáme dotazem:
>> ? typeset!
Jsou to tyto tyto skupiny: any-(type!, object!, string!, word!, function!, block!, path!, list!), series!, number!, scalar!, immediate!, internal!, external!, default!, all-word!.
Jednotlivé datové typy:
word!
Základní datový typ. Slova jsou klíčovým pojmem v jazyce Red. Vyskytují se ve čtveré typové formě:
word - typ word!, základní formát pro přirozenou hodnotu slova
word: - typ set-word!, formát pro přiřazení hodnoty ke slovu
:word - typ get-word!, odkaz na hodnotu slova (bez vyhodnocení)
'word - typ lit-word!, odkaz na slovo jako symbol
block!
Bloky jsou skupiny hodnot a slov. Používají se všude, od samotného skriptu až po bloky dat a bloky kódu ve skriptu.
>> bl: [123 data "zdar"] ; blok s daty
== [123 data "zdar"]
>> [] ; prázdný blok
== []
paren!
Datový typ paren! je kolektor, ohraničený kulatými závorkami. Používá se hlavně k vyjádření preference aritmetických operací.
Objekt typu paren! se vytvoří příkazem make paren! :
>> prn: make paren! ["a" 5]
== ("a" 5)
none!
Ekvivalent "nuly" v jiných programovacích jazycích. Indikuje neexistující data.
>> a: [1 2 3 4 5]
== [1 2 3 4 5]
>> pick a 7
== none
logic!
Kromě klasických true a false, používá Red také on , off, yes a no jako hodnoty datového typu logic!.
>> a: 2 b: 3
== 3
>> a > b
== false
>> a: on
== true
>> a
== true
>> a: off
== false
>> a
== false
>> a: yes
== true
>> a
== true
>> a: no
== false
>> a
== false
string!
Řada (series) znaků uvnitř uvozovek nebo složených závorek. Zabírá-li řetězec více než jeden řádek, je použití {} jedině možné.
Manipulace s řetězci se provádí s použitím příkazů, popsaných v kapitolách o řadách.
>> a: "my string"
== "my string"
>> a: {my string}
== "my string"
>> a: {my
{ string} ; první "{" je signál konzoly!
== "my^/string"
>> print a
my
string
>> a: "my new ;trying to span over more than one line
*** Syntax Error: invalid value at {"my new}
char!
Uvedena znakem # a uvnitř uvozovek, představuje hodnota typu char! kódový bod Unicodu. Jsou to celá čísla v rozsahu hexadecimal 00 po hexadecimal 10FFFF (0 až 1,114,111).
#"A" je char!
"A" je string!
Umožňuje určité matematické operace.
>> a: "my string"
== "my string"
>> pick a 2
== #"y"
>> poke a 3 #"X"
== #"X"
>> a
== "myXstring"
>> a: #"b"
== #"b"
>> a: a + 1
== #"c"
integer!
32 bitová celá signovaná čísla. Od −2,147,483,648 po 2,147,483,647. Je-li číslo mimo tento rozsah, přiřadí mu Red datový typ float!.
Poznámka: Dělení 2 celých čísel dává oseknutý výsledek:
>> 7 / 2
== 3
float!
64 bitová desetinná čísla. Prezentují se s desetinnou tečkou či čárkou nebo e-notací.
>> 7.0 / 2
== 3.5
>> 3e2
== 300.0
>> 6.0 / 7
== 0.8571428571428571
file!
Název je uveden znakem %. Nepoužíváte-li aktuální cestu, máte uvést cestu v uvozovkách. Cesta používá lomítka (/); zpětná lomítka (\) jsou ve Windows automaticky konvertována na obyčejná lomítka.
>> write %myfirstfile.txt "This is my first file"
>> write %"C:\Users\André\Documents\RED\mysecondfile.txt" "This is my second file"
path!
Používá se k přístupu k interním položkám větších struktur pomocí lomítka (/). Používá se v různých situacích, například:
>> a: [23 45 89]
== [23 45 89]
>> print a/2
45
Lomítka "/" se také používají při přístupu k objektům a k upřesněním.
time!
Čas je vyjádřen ve formátu hours:minutes:seconds.subseconds. Všimněte si, že sekundy a subsekundy jsou odděleny tečkou, nikoliv dvojtečkou. Ke každé části je možný přístup přes upřesnění (refinement). Nahlédněte do kapitoly Práce s časem.
>> mymoment: 8:59:33.4
== 8:59:33.4
>> mymoment/minute: mymoment/minute + 1
== 60
>> mymoment == 9:00:33.4
>> a: now/time/precise
== 22:05:46.805
>> type? a
== time! ; datový typ objektu a je time!
>> a/hour
== 22
>> a/minute
== 5
>> a/second
== 46.805 ; datový typ a/second je float!
date!
Red akceptuje datumy v různých formátech:
>> print 31-10-2017
31-Oct-2017
>> print 31/10/2017
31-Oct-2017
>> print 2017-10-31
31-Oct-2017
>> print 31/Oct/2017
31-Oct-2017
>> print 31-october-2017
31-Oct-2017
>> print 31/oct/2017
31-Oct-2017
>> print 31/oct/17 ; zkuste si totéž pro první a druhé tisíciletí
31-Oct-2017
Red rovněž ověřuje platnost datumů, včetně s uvážením přechodných let. Na den, měsíc či rok se lze odkázat upřesněním:
>> a: 31-oct-2017
== 31-Oct-2017
>> print a/day
31
>> print a/month
10
>> print a/year
2017
point! a pair!
Point! a pair! se zdají být úplně stejné. Uvádějí celočíselné souřadnice v kartézském souřadnicovém systému (x y axys). K typu point! nejsou informace
>> a: 12x23
== 12x23
>> a: 2 * a
== 24x46
>> print a/x
24
>> print a/y
46
percent!
Prezentují se přidáním znaku "%" za číslem.
>> a: 100 * 11.2%
== 11.2
>> a: 1000 * 11.3%
== 113.0
tuple!
Tuple (entice) je výpis tří až dvanácti celých čísel o velikosti 0 až 255, oddělených tečkami. Entice jsou užitečné pro prezentaci čísel verzí, IP adres a barev (např.: 0.255.0).
S enticí lze provádět tyto operace: random, add, divide, multiply, remainder, subtract, and, or, xor, length?, pick (nikoliv poke), reverse.
>> a: 1.2.3.4
== 1.2.3.4
>> a: 2 * a
== 2.4.6.8
>> print pick a 3
6
>> a/3: random 255
== 41
>> a
== 2.4.41.8
Úplný přehled barev ve vyjádření typu word! a tuple! získáme zadáním následujícího dotazu:
>> ? tuple!
red 255.0.0 ; následuje výpis 45 barev