সম্পূর্ণ Julia ট্র্যাকেই আপনাকে আপনার সমাধানকে ছোট ছোট লাইব্রেরির মতো ভাবতে হবে, অর্থাৎ আপনাকে ফাংশন, টাইপ ইত্যাদি ডিফাইন করতে হবে, যেগুলো পরে একটি টেস্ট স্যুটের বিপরীতে রান করা হবে। সেই কারণেই আমরা একেবারে প্রথম ধারণা হিসেবে নামযুক্ত ফাংশন নিয়ে আলোচনা করব।
Julia একটি ডাইনামিক, স্ট্রংলি টাইপড প্রোগ্রামিং ভাষা। এর প্রোগ্রামিং স্টাইল মূলত ফাংশনাল, যদিও Haskell-এর মতো ভাষাগুলোর চেয়ে এতে বেশি নমনীয়তা আছে।
আগে থেকে কোনো ভ্যারিয়েবল ডিক্লেয়ার করার দরকার নেই। শুধু একটি উপযুক্ত নামে একটি মান অ্যাসাইন করুন:
julia> myvar = 42 # an integer
42
julia> name = "Maria" # strings are surrounded by double-quotes ""
"Maria"
কোনো মান যদি পুরো প্রোগ্রাম জুড়ে পাওয়া দরকার হয়, কিন্তু তা পরিবর্তন হবে বলে আশা করা না যায়, তাহলে সেটিকে ধ্রুবক হিসেবে চিহ্নিত করাই ভালো।
একটি অ্যাসাইনমেন্টের আগে const কিওয়ার্ড বসালে কম্পাইলার আরও দক্ষ কোড তৈরি করতে পারে, যা একটি ভ্যারিয়েবলের ক্ষেত্রে সম্ভব নয়।
ধ্রুবক কোড লেখার সময় এরর থেকেও আপনাকে রক্ষা করতে সাহায্য করে।
ভুলবশত const মানটি পরিবর্তন করার চেষ্টা করলে একটি ওয়ার্নিং দেখতে পাবেন:
julia> const answer = 42
42
julia> answer = 24
WARNING: redefinition of constant Main.answer. This may fail, cause incorrect answers, or produce other errors.
24
মনে রাখবেন, কোনো const শুধু যেকোনো ফাংশনের বাইরে ডিক্লেয়ার করা যায়।
এটি সাধারণত *.jl ফাইলের একেবারে উপরের দিকে, ফাংশন ডেফিনিশনের আগে থাকে।
এগুলো অন্য অনেক ভাষার মতোই:
2 + 3 # 5 (addition)
2 - 3 # -1 (subtraction)
2 * 3 # 6 (multiplication)
8 / 2 # 4.0 (division with floating-point result)
8 % 3 # 2 (remainder)
Julia-তে নামযুক্ত ফাংশন ডিফাইন করার দুটি সাধারণ উপায় আছে:
function কিওয়ার্ড ব্যবহার করে
function muladd(x, y, z)
x * y + z
end
৪ স্পেস দিয়ে ইনডেন্ট করা পড়ার সুবিধার জন্য প্রচলিত, তবে কম্পাইলার এটি উপেক্ষা করে।
end কিওয়ার্ডটি অবশ্যই লাগবে।
মনে রাখবেন, আমরা return x * y + z লিখতেও পারতাম।
তবে Julia ফাংশন সবসময়ই শেষ এক্সপ্রেশনটি রিটার্ন করে, তাই return কিওয়ার্ডটি ঐচ্ছিক।
অনেক প্রোগ্রামার নিজেদের উদ্দেশ্য আরও স্পষ্ট করতে এটি লেখা পছন্দ করেন।
"অ্যাসাইনমেন্ট রূপ" ব্যবহার করে
muladd(x, y, z) = x * y + z
সংক্ষিপ্ত, একক-এক্সপ্রেশন ফাংশন তৈরির জন্য এটি সবচেয়ে বেশি ব্যবহৃত হয়।
অ্যাসাইনমেন্ট রূপে return কিওয়ার্ড কখনোই ব্যবহার করা হয় না।
দুটি রূপই সমতুল্য এবং ঠিক একইভাবে ব্যবহৃত হয়, তাই যেটি পড়তে বেশি সুবিধাজনক মনে হয় সেটিই বেছে নিন।
কোনো ফাংশন কল করতে হলে তার নাম লিখতে হয় এবং ফাংশনের প্রতিটি প্যারামিটারের জন্য আর্গুমেন্ট পাঠাতে হয়:
# invoking a function
muladd(10, 5, 1)
# and of course you can invoke a function within the body of another function:
square_plus_one(x) = muladd(x, x, 1)
অনেক ভাষার মতোই Julia-তে নাম (ভ্যারিয়েবল, ফাংশন এবং আরও অনেক কিছুর) অবশ্যই একটি অক্ষর দিয়ে শুরু হতে হবে, তারপর অক্ষর, অঙ্ক ও আন্ডারস্কোরের যেকোনো সমন্বয় আসতে পারে।
প্রচলিত নিয়ম অনুযায়ী, ভ্যারিয়েবল, ধ্রুবক ও ফাংশনের নাম ছোট হাতের অক্ষরে লেখা হয়, আর আন্ডারস্কোর যতটা যুক্তিসঙ্গত ততটাই কম রাখা হয়।
এই অনুশীলনীতে আপনি আপনার প্রিয় রান্নার বই থেকে একটি দুর্দান্ত লাসাগনা রান্না করতে সাহায্য করার জন্য কিছু কোড লিখবেন।
আপনার চারটি কাজ আছে, সবগুলোই লাসাগনা রান্নায় ব্যয় হওয়া সময়ের সাথে সম্পর্কিত।
expected_bake_time কনস্ট্যান্টটি ডিফাইন করুন, যেটি রিটার্ন করে লাসাগনাটি ওভেনে কত মিনিট বেক করা উচিত।
রান্নার বই অনুযায়ী, লাসাগনাকে মোট ৬০ মিনিট ওভেনে থাকতে হবে।
julia> expected_bake_time
60
preparation_time ফাংশনটি ডিফাইন করুন, যেটি আর্গুমেন্ট হিসেবে লাসাগনায় আপনি যে সংখ্যক স্তর যোগ করেছেন তা নেয় এবং রিটার্ন করে লাসাগনা প্রস্তুত করতে আপনার কত মিনিট লেগেছে, ধরে নিয়ে যে প্রতিটি স্তর প্রস্তুত করতে আপনার ২ মিনিট লাগে।
julia> preparation_time(4)
8
remaining_time ফাংশনটি ডিফাইন করুন, যেটি প্যারামিটার হিসেবে লাসাগনা ওভেনে থাকার প্রকৃত মিনিট নেয় এবং রিটার্ন করে লাসাগনাকে আরও কত মিনিট ওভেনে থাকতে হবে।
julia> remaining_time(50)
10
total_working_time ফাংশনটি ডিফাইন করুন, যেটি দুটি আর্গুমেন্ট নেয়: প্রথম আর্গুমেন্টটি হলো লাসাগনায় আপনি যে সংখ্যক স্তর যোগ করেছেন, আর দ্বিতীয় আর্গুমেন্টটি হলো লাসাগনা কত মিনিট ওভেনে আছে।
ফাংশনটি রিটার্ন করবে লাসাগনা রান্না করতে মোট কত মিনিট আপনি কাজ করেছেন, যা হলো মিনিটে প্রস্তুতির সময় এবং এই মুহূর্তে লাসাগনা ওভেনে যে মিনিট ব্যয় করেছে তার যোগফল।
julia> total_working_time(3, 20)
26
Exercism-এ সাইন আপ করুন, Julia ট্র্যাকের 35টি কনসেপ্ট128টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।