ধরুন, আপনার 1000 পর্যন্ত সব অ-ঋণাত্মক ইন্টিজার দরকার। এগুলো একটি অ্যারেতে টাইপ করতে হলে সেটা হাস্যকরই হতো।
এর জন্যই আছে 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
স্টেপ সাইজ নির্দিষ্ট করা যায়, এখানে 0.3:
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']
Exercism-এ সাইন আপ করুন, Julia ট্র্যাকের 35টি কনসেপ্ট128টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।