Tegyük fel, hogy az összes nemnegatív egész számra szükséged van 1000-ig. Nevetséges lenne, ha ezeket egy tömbbe kellene begépelned.
Erre való a range típus:
julia> 0:1000
0:1000
julia> typeof(0:1000)
UnitRange{Int64}
A tartományok nagyon gyakoriak: nemcsak gépelést spórolnak meg, hanem függvények visszatérési típusaként is előfordulnak.
Figyeld meg, hogy a tartományok nem tömbök.
A tömbök már a létrehozásuk pillanatában meghatározódnak („mohó” kiértékelés), és a tárhelyigényük arányos a tömb hosszával.
Ezzel szemben a tartományok csupán utasítások összessége egy sorozat előállításához („lusta” kiértékelés, más néven „iterátor”).
Ha a tartományra tömbként van szükséged, a collect() függvénnyel alakíthatod át:
julia> collect(0:5)
6-element Vector{Int64}:
0
1
2
3
4
5
Igény szerint a collect(type, range) hívással megadhatod a kimeneti tömb típusát is.
A lépésköz is megadható, ebben az esetben 0.3:
julia> collect(1.0:0.3:2.0)
4-element Vector{Float64}:
1.0
1.3
1.6
1.9
A szintaxis tehát start:stepsize:stop.
Mindkét végpont beleértendő, ahogy az egész számos példában is látszik.
Ha a lépésköz nem osztja pontosan a stop - start különbséget, az utolsó elem nem lépi túl a stop értékét.
Finomabb szabályozáshoz használd a Base.range() függvényt, amelynek számos további beállítási lehetősége van.
A tartományokban nem numerikus sorozatok is szerepelhetnek. A legegyszerűbb példa az ASCII-betűk:
julia> 'a':'d'
'a':1:'d'
julia> typeof('a':'d')
StepRange{Char, Int64}
julia> collect('a':'d')
4-element Vector{Char}:
'a': ASCII/Unicode U+0061 (category Ll: Letter, lowercase)
'b': ASCII/Unicode U+0062 (category Ll: Letter, lowercase)
'c': ASCII/Unicode U+0063 (category Ll: Letter, lowercase)
'd': ASCII/Unicode U+0064 (category Ll: Letter, lowercase)
A Char típust egy másik fogalom tárgyalja majd részletesebben.
Egyelőre tekintsd őket egyszeres idézőjelbe zárt karaktereknek.
Egy tartomány határait a first() és a last() függvénnyel kérdezheted le.
Gyakran hasznos megtudni, hogy egy adott érték része-e egy tartománynak.
Ezt a mögöttes in() függvény végzi, de gyakoribb az infix in operátor vagy annak matematikaibb szinonimája, a ∈ használata.
Egy megfelelő szerkesztőben a ∈ gyorsbillentyűje: \in, majd tab.
r = 1:10 # => 1:10
first(r) # => 1
last(r) # => 10
7 in r # => true
11 ∈ r # => false
Az in és a ∈ operátor itt tartományokkal szerepel, de más gyűjteménytípusokkal is használható, például vektorokkal, halmazokkal és szótárakkal.
A tömbindexelésben egész számtartományok és tömbök is használhatók:
nums = collect(10.0:50.0)
nums[3:2:7] # gives [12.0, 14.0, 16.0]
nums[ [3, 5, 7] ] # also gives [12.0, 14.0, 16.0]
Az end kulcsszóval együtt is működik, bár az operátorok elsőbbsége miatt zárójelekre lehet szükség:
nums[(end - 3):end]
4-element Vector{Float64}:
47.0
48.0
49.0
50.0
Az index bármely eleme természetesen lehet egy korábban létrehozott egész típusú változó is.