ট্র্যাক
/
Julia
Julia
/
সিলেবাস
/
মৌলিক বিষয়
মৌ

মৌলিক বিষয় মধ্যে Julia

2টি অনুশীলনী

মৌলিক বিষয় সম্পর্কে

Julia একটি ডায়নামিক, স্ট্রংলি টাইপড প্রোগ্রামিং ভাষা। এর প্রোগ্রামিং স্টাইল মূলত ফাংশনাল, যদিও Haskell-এর মতো ভাষার চেয়ে এতে নমনীয়তা বেশি।

এখানে একটি শক্তিশালী ও বহুমুখী টাইপ সিস্টেম আছে, যা পরবর্তী ধারণাগুলোতে গুরুত্বপূর্ণ হয়ে উঠবে। বাস্তবে Julia সাধারণত প্রসঙ্গ থেকেই একটি উপযুক্ত ডিফল্ট অনুমান করে নেয়।

পড়ার সহজতার ওপর জোর দেওয়ার ফলে এটি Python আর Ruby-এর মতো স্ক্রিপ্টিং ভাষা মনে হলেও, Julia কোড চালানোর আগে কম্পাইল করা হয়। Just In Time (JIT) কম্পাইলার প্রতিটি ফাংশনের জন্য সেটি সামনে এলে অত্যন্ত অপ্টিমাইজড কোড তৈরি করে, যার ফলে রানটাইম গতি অনেক বেশি হয়।

Julia একটি অবজেক্ট-ওরিয়েন্টেড ভাষা নয়, আর অন্য অনেক ভাষার কেন্দ্রীয় বৈশিষ্ট্য যে ধরনের ক্লাস হায়ারার্কি, তা এখানে নেই।

তার বদলে (আর এটি পড়তে গিয়ে দয়া করে ঘাবড়াবেন না!), Julia নির্ভর করে:

  • একটি টাইপ হায়ারার্কির ওপর।
  • কম্পোজেবল ফাংশনের ওপর (সহজে, বহুমুখী ও শক্তিশালী উপায়ে একত্রিত হওয়ার জন্য তৈরি)।
  • মাল্টিপল ডিসপ্যাচের ওপর, অর্থাৎ ফাংশনকে পরিবর্তনশীল সংখ্যা ও ধরনের আর্গুমেন্ট দিয়ে কল করা যায়।

সিলেবাসে যত এগোবেন, এই কিছুটা বিভ্রান্তিকর পরিভাষাগুলো তত পরিষ্কার হয়ে উঠবে।

অফিসিয়াল ডকুমেন্টেশন-এ বর্তমান রিলিজের জন্য অনেক মূল্যবান তথ্য আছে, যদিও নতুনদের জন্য এটি কিছুটা ভারী মনে হতে পারে।

ভিডিওর মধ্যে আছে:

মন্তব্য

আপনার কোডে মন্তব্য রাখা অত্যন্ত জরুরি, যাতে মানুষ আপনার কোড পড়তে পারে এবং আপনার উদ্দেশ্য বুঝতে পারে: হয়তো অন্য কেউ, আবার ভবিষ্যতের আপনি নিজেও। কম্পাইলার এগুলো (বেশিরভাগ ক্ষেত্রেই) উপেক্ষা করে।

Julia-তে দুটি উপায় সম্ভব:

  • একলাইন মন্তব্য # দিয়ে শুরু হয়
  • বহুলাইন মন্তব্য #= দিয়ে শুরু হয় এবং =# দিয়ে শেষ হয়। নেস্টিং করা যায়।
# This is a single-line comment

x = 3  # This is an inline comment

#=
	Multi-line comments can be used for longer explanations.

	They are especially useful to comment out blocks of code during debugging.
=#

ভ্যারিয়েবল ও অ্যাসাইনমেন্ট

একটি ভ্যারিয়েবল তৈরি করতে শুধু এর একটি মান অ্যাসাইন করুন:

julia> myvar = 42  # an integer (in fact, Int64)
42

julia> bigint = 1_234_567_890  # optionally use underscore as digit separator, for readability
1234567890

julia> name = "Maria"  # strings are surrounded by double-quotes ""
"Maria"

অ্যাসাইনমেন্ট একটি মানকে ভ্যারিয়েবলের সঙ্গে "বাইন্ড" করে।

টাইপ উল্লেখ করা ঐচ্ছিক, আর বেশিরভাগ ক্ষেত্রেই Julia প্রসঙ্গ থেকে একটি উপযুক্ত ডিফল্ট অনুমান করে নেয়।

Julia-তে টাইপ একটি গুরুত্বপূর্ণ বিষয়। পরবর্তী ধারণাগুলোতে আমরা এগুলো আরও বিস্তারিত দেখব। আপাতত এগুলো নিয়ে চিন্তা না করাই ভালো।

অনেক ফাংশনাল ভাষার বিপরীতে, Julia-তে ভ্যারিয়েবল পুনরায় অ্যাসাইন করা যায়, এবং ভ্যারিয়েবলের সঙ্গে বাঁধা মান ও টাইপ দুটোই আপনি স্বাধীনভাবে বদলাতে পারেন:

julia> myvar = 3
3

julia> myvar = "now a string"
"now a string"

কনস্ট্যান্ট

কোনো ফাংশনের বাইরে তৈরি গ্লোবাল ভ্যারিয়েবল:

  • অনুমোদিত।
  • কখনো কখনো প্রয়োজনীয়।
  • সাধারণত নিরুৎসাহিত (তবে শুধু *.jl ফাইলের ভেতরে; REPL অন্যভাবে কাজ করে)।

যদি কোনো মান পুরো প্রোগ্রামজুড়ে থাকা দরকার হয়, কিন্তু সেটি বদলাবে বলে আশা না করা হয়, তাহলে বদলে একটি কনস্ট্যান্ট ব্যবহার করুন।

অ্যাসাইনমেন্টের আগে 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

গাণিতিক অপারেটর

গাণিতিক অপারেশন বেশিরভাগ ক্ষেত্রেই প্রচলিত নিয়মে কাজ করে:

2 + 3  # 5 (addition)
2 - 3  # -1 (subtraction)
2 * 3  # 6 (multiplication)
8 / 2  # 4.0 (division)
8 % 3  # 2 (remainder)
2 ^ 3  # 8 (exponentiation)

মনে রাখবেন, / দিয়ে ভাগ করলে সবসময় একটি ফ্লোটিং-পয়েন্ট মান পাওয়া যায়।

পরবর্তী ধারণাগুলোতে আমরা এতে ফিরে আসব, যেখানে আলোচনা হবে div() বা ÷ দিয়ে ইন্টিজার ভাগ করে ছেঁটে ফেলা এবং // দিয়ে একটি মূলদ সংখ্যা পাওয়ার বিষয়ে।

ফাংশন

সর্বোচ্চ রানটাইম পারফরম্যান্সের জন্য, কোডের বেশিরভাগ অংশ ফাংশনের ভেতরে রাখাই ভালো। অন্য কিছু ভাষার বিপরীতে, অনেক ছোট ছোট ফাংশন থাকলেও সমস্যা নেই।

Julia-তে একটি নামযুক্ত ফাংশন ডিফাইন করার দুটি প্রচলিত উপায় আছে:

  1. function কিওয়ার্ড ব্যবহার করে

    function muladd(x, y, z)
        x * y + z
    end
    

    পড়ার সুবিধার জন্য ৪ স্পেস ইন্ডেন্টেশন প্রচলিত, তবে কম্পাইলার এটি উপেক্ষা করে। end কিওয়ার্ডটি অপরিহার্য: এটি Python-এর চেয়ে Ruby-র কাছাকাছি।

    খেয়াল করুন, আমরা return x * y + z-ও লিখতে পারতাম। তবে Julia-র ফাংশন সবসময় সবচেয়ে শেষ এক্সপ্রেশনটিই রিটার্ন করে, তাই return কিওয়ার্ডটি ঐচ্ছিক। অনেক প্রোগ্রামার নিজেদের উদ্দেশ্য আরও স্পষ্ট করতে এটি লেখাই পছন্দ করেন।

  2. "অ্যাসাইনমেন্ট ফর্ম" ব্যবহার করে

    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-ও চায় যে নামগুলো (ভ্যারিয়েবল, ফাংশন এবং আরও অনেক কিছুর) একটি অক্ষর দিয়ে শুরু হবে, তারপর অক্ষর, ডিজিট ও আন্ডারস্কোরের যেকোনো সমন্বয় থাকতে পারে।

প্রচলিত নিয়ম অনুযায়ী, ভ্যারিয়েবল, কনস্ট্যান্ট ও ফাংশনের নাম ছোট হাতের অক্ষরে লেখা হয়, আর বিভ্রান্তি এড়াতে দরকার না হলে আন্ডারস্কোর এড়িয়ে চলা হয়।

তবে Julia সর্বত্র Unicode ব্যবহার করে, তাই "অক্ষর" শব্দটির ব্যাখ্যা বেশ নমনীয়।

ইংরেজি ছাড়া অন্য ভাষাও সমর্থিত, ইমোজিও (তবে দয়া করে রুচি ও উপযুক্ততা খেয়াল রেখে বেছে নিন)।

বিশেষ করে, গণিতবিদদের প্রিয় সব গ্রিক অক্ষরই পাওয়া যায় (আর বেশ কিছু কাজের মান আগে থেকেই ডিফাইন করা আছে):

julia> π   # a built-in constant
π = 3.1415926535897...

REPL, Pluto.jl, এবং Julia প্লাগিনসহ VS Code-এর মতো Julia-সচেতন এডিটরগুলো এই অক্ষরগুলো সহজে টাইপ করার সুবিধা দেয়।

π-এর জন্য \pi টাইপ করে <Tab> চাপুন। আপনার লেখাটি তখন গ্রিক অক্ষরে বদলে যাবে।

পরবর্তী ধারণাগুলোতে এর আরও অনেক উদাহরণ দেখবেন।

আসলে ব্যাকস্ল্যাশ-সংক্ষেপগুলো Julia-র নিজস্ব কিছু নয়। এগুলো নেওয়া হয়েছে LaTeX থেকে, একটি টাইপসেটিং সিস্টেম যা অনেক বিজ্ঞানী ও ইঞ্জিনিয়ার প্রায় প্রতিদিন রিপোর্ট লেখার কাজে ব্যবহার করেন।

GitHub-এর মাধ্যমে সম্পাদনা করুন লিংকটি নতুন একটি উইন্ডো বা ট্যাবে খুলবে

মৌলিক বিষয় শিখুন