فرض کنید میخواهید همهی اعداد صحیح نامنفی تا ۱۰۰۰ را داشته باشید. اگر مجبور بودید اینها را درون یک آرایه تایپ کنید، مسخره میشد.
برای این کار، نوع range را داریم:
julia> 0:1000
0:1000
julia> typeof(0:1000)
UnitRange{Int64}
بازهها بسیار رایجاند: نه فقط برای صرفهجویی در تایپ کردن، بلکه بهعنوان نوع بازگشتی توابع هم به کار میروند.
توجه کنید که بازهها آرایه نیستند.
آرایهها از همان ابتدا تعریف میشوند (ارزیابی «حریصانه») و به حافظهای متناسب با طول آرایه نیاز دارند.
در مقابل، بازهها فقط مجموعهای از دستورها برای تولید یک دنباله هستند (ارزیابی «تنبلانه» یا یک «تکرارگر»).
اگر به بازهای به شکل آرایه نیاز دارید، از تابع collect() برای تبدیل استفاده کنید:
julia> collect(0:5)
6-element Vector{Int64}:
0
1
2
3
4
5
بهصورت اختیاری، از collect(type, range) استفاده کنید تا نوع آرایهی خروجی را مشخص کنید.
اندازهی گام را میتوان مشخص کرد، در این مورد ۰٫۳:
julia> collect(1.0:0.3:2.0)
4-element Vector{Float64}:
1.0
1.3
1.6
1.9
پس نحوهی نگارش به این صورت است: start:stepsize:stop.
هر دو حد انتهایی شامل میشوند، همانطور که در مثال اعداد صحیح دیدید.
اگر اندازهی گام stop - start را دقیقاً تقسیم نکند، آخرین عنصر از stop فراتر نخواهد رفت.
برای کنترل دقیقتر، از تابع Base.range() استفاده کنید که گزینههای بیشتری دارد.
دنبالههای غیرعددی را هم میتوان در بازهها به کار برد. سادهترین مثال، حروف ASCII است:
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)
نوع Char در مفهوم دیگری با جزئیات بیشتری بررسی میشود.
فعلاً با اینها مثل نویسههای تکی داخل کوتیشن ساده رفتار کنید.
حدود یک بازه را با first() و last() بررسی کنید.
اغلب مفید است که بفهمید آیا یک مقدار خاص بخشی از یک بازه است یا نه.
تابع زیربنایی این کار in() است، اما رایجتر آن است که از عملگر میانوندی in یا هممعنی ریاضیترش ∈ استفاده کنید.
در یک ویرایشگر مناسب، میانبر ∈ به این صورت است: \in و سپس کلید Tab.
r = 1:10 # => 1:10
first(r) # => 1
last(r) # => 10
7 in r # => true
11 ∈ r # => false
عملگر in یا ∈ در اینجا با بازهها به کار رفته است، اما با چند نوع مجموعهی دیگر مانند بردارها، مجموعهها و دیکشنریها هم به کار میرود.
بازههای صحیح و آرایهها را میتوان در نمایهگذاری آرایه به کار برد:
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]
استفاده همراه با end هم کار میکند، هرچند اولویت عملگرها باعث میشود پرانتزها ممکن است لازم باشند:
nums[(end - 3):end]
4-element Vector{Float64}:
47.0
48.0
49.0
50.0
البته هر یک از عناصر نمایه میتواند یک متغیر صحیح از قبل موجود باشد.