فرض کنید همهی اعداد صحیح نامنفی تا ۱۰۰۰ را میخواهید. اگر مجبور بودید همهی آنها را در یک آرایه تایپ کنید، واقعاً مسخره میشد.
برای همین، نوع 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
اندازهی گام را هم میتوان مشخص کرد، که در این حالت ۰٫۳ است:
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 فراتر نمیرود.
دنبالههای غیرعددی را هم میتوان در بازهها به کار برد. سادهترین مثال، حروف 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() بررسی کنید.
r = 1:10 # => 1:10
first(r) # => 1
last(r) # => 10
از بازههای صحیح و بردارها میتوان در نمایهگذاری بردار استفاده کرد:
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]
به عنوان یک علاقهمند به شطرنج، دوست دارید نسخهی خودتان از این بازی را بنویسید. بله، شاید همین حالا هم پیادهسازیهای زیادی از شطرنج به صورت آنلاین در دسترس باشد، اما نسخهی شما منحصربهفرد خواهد بود!
اما پیش از آنکه بتوانید افسار تخیلتان را رها کنید، باید به اصول اولیه بپردازید. بیایید با ساختن صفحهی شطرنج شروع کنیم.
هر خانه از صفحهی شطرنج با یک جفت حرف و عدد مشخص میشود. ستونهای عمودی خانهها، که به آنها «ستون» میگویند، با حروف A تا H برچسبگذاری شدهاند. ردیفهای افقی خانهها، که به آنها «ردیف» میگویند، از ۱ تا ۸ شمارهگذاری شدهاند.
تابع rank_range() را پیادهسازی کنید. این تابع باید یک بازه از اعداد صحیح را برگرداند، از ۱ تا ۸.
julia> rank_range()
# output omitted
تابع file_range() را پیادهسازی کنید.
این تابع باید یک بازه از کاراکترها را برگرداند، از حرف بزرگ A تا حرف بزرگ H.
julia> file_range()
# output omitted
تابع ranks() را پیادهسازی کنید. این تابع باید یک بردار از اعداد صحیح را برگرداند، از ۱ تا ۸.
این بردار را دستی ننویسید و آن را از بازهای که تابع rank_range() برمیگرداند بسازید.
julia> ranks()
[1, 2, 3, 4, 5, 6, 7, 8]
تابع files را پیادهسازی کنید. این تابع باید یک بردار از کاراکترها را برگرداند، از 'A' تا 'H'.
این بردار را دستی ننویسید و آن را از بازهای که تابع file_range() برمیگرداند بسازید.
julia> files()
['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']