Elixir-এ ফাংশনকে প্রথম শ্রেণির নাগরিক হিসেবে গণ্য করা হয়। এর মানে হলো:
নামযুক্ত ফাংশনের বিপরীতে অ্যানোনিমাস ফাংশনের জন্য কোনো স্থির রেফারেন্স পাওয়া যায় না; এগুলো কেবল তখনই পাওয়া যায় যখন কোনো ভ্যারিয়েবলে অ্যাসাইন করা হয় বা সঙ্গে সঙ্গে ইনভোক করা হয়।
আমরা অ্যানোনিমাস ফাংশন ব্যবহার করতে পারি:
অ্যানোনিমাস ফাংশন শুরু হয় সংরক্ষিত শব্দ fn দিয়ে, ফাংশনের বডি থেকে আর্গুমেন্টগুলো আলাদা করা হয় -> টোকেন দিয়ে, আর শেষ করা হয় end দিয়ে। নামযুক্ত ফাংশনের মতোই, ফাংশনের শেষ এক্সপ্রেশনটি যে ফাংশনটি এটিকে কল করেছে তার কাছে অন্তর্নিহিতভাবে রিটার্ন করা হয়।
একটি ফাংশন রেফারেন্স ইনভোক করতে হলে রেফারেন্স ভ্যারিয়েবল ও আর্গুমেন্টের তালিকার মাঝে একটি . ব্যবহার করতে হবে:
function_variable = fn param ->
param + 1
end
function_variable.(1)
# => 2
আরও সংক্ষিপ্ত করতে আপনি শর্টহ্যান্ড ক্যাপচার নোটেশনও ব্যবহার করতে পারেন:
variable = &(&1 + 1)
variable.(1)
# => 2
Elixir-এ Bitwise মডিউলে বিট নিয়ে কাজ করার অনেক ফাংশন রয়েছে।
band/2: বিটওয়াইজ ANDbsl/2: বিটওয়াইজ SHIFT LEFTbsr/2: বিটওয়াইজ SHIFT RIGHTbxor/2: বিটওয়াইজ XORbor/2: বিটওয়াইজ ORbnot/1: বিটওয়াইজ NOTএকটি বিটওয়াইজ ফাংশন কীভাবে ব্যবহার করতে হয় তার একটি উদাহরণ এখানে:
Bitwise.bsl(1, 3)
# => 8
সব বিটওয়াইজ ফাংশন কেবল ইন্টিজারের উপর কাজ করে।
আপনি যদি Elixir-এর 1.9 বা তার নিচের সংস্করণ রান করেন, তাহলে Bitwise মডিউলটি ব্যবহার করতে হলে মডিউল ডেফিনিশনের শুরুতে require Bitwise কল করতে হবে।
এই অনুশীলনীতে আপনাকে ডেটার উপর রূপান্তর ঘটিয়ে কাজ করে এমন একটি এনক্রিপশন ডিভাইসের সফটওয়্যার লেখার দায়িত্ব দেওয়া হয়েছে। সহজ ফাংশনগুলো একসাথে জুড়ে জটিল ফাংশন নমনীয়ভাবে তৈরি করার একটি উপায় আপনার দরকার।
প্রতিটি কাজের জন্য এমন একটি অ্যানোনিমাস ফাংশন রিটার্ন করুন, যা কলিং স্কোপ থেকে কল করা যায়।
সব ফাংশনই ইন্টিজার আর্গুমেন্ট প্রত্যাশা করবে। Elixir-এ বিটওয়াইজ অপারেশন করার জন্যও ইন্টিজার উপযুক্ত।
Secrets.secret_add/1 ইমপ্লিমেন্ট করুন। এটি এমন একটি ফাংশন রিটার্ন করবে, যা একটি আর্গুমেন্ট নেয় এবং তার সাথে secret_add-এ পাস করা আর্গুমেন্ট যোগ করে।
adder = Secrets.secret_add(3)
adder.(2)
# => 5
Secrets.secret_subtract/1 ইমপ্লিমেন্ট করুন। এটি এমন একটি ফাংশন রিটার্ন করবে, যা একটি আর্গুমেন্ট নেয় এবং সেই আর্গুমেন্ট থেকে secret_subtract-এ পাস করা সিক্রেট বিয়োগ করে।
subtractor = Secrets.secret_subtract(2)
subtractor.(3)
# => 1
Secrets.secret_multiply/1 ইমপ্লিমেন্ট করুন। এটি এমন একটি ফাংশন রিটার্ন করবে, যা একটি আর্গুমেন্ট নেয় এবং secret_multiply-এ পাস করা সিক্রেট দিয়ে সেটিকে গুণ করে।
multiplier = Secrets.secret_multiply(7)
multiplier.(3)
# => 21
Secrets.secret_divide/1 ইমপ্লিমেন্ট করুন। এটি এমন একটি ফাংশন রিটার্ন করবে, যা একটি আর্গুমেন্ট নেয় এবং secret_divide-এ পাস করা সিক্রেট দিয়ে সেটিকে ভাগ করে।
divider = Secrets.secret_divide(3)
divider.(32)
# => 10
আউটপুট যাতে অন্য ফাংশনগুলোর প্রত্যাশিত ইনপুটের সাথে মানানসই হয়, সেজন্য ইন্টিজার ডিভিশন ব্যবহার করুন।
Secrets.secret_and/1 ইমপ্লিমেন্ট করুন। এটি এমন একটি ফাংশন রিটার্ন করবে, যা একটি আর্গুমেন্ট নেয় এবং সেটি ও secret_and-এ পাস করা সিক্রেটের উপর একটি বিটওয়াইজ and অপারেশন করে।
ander = Secrets.secret_and(1)
ander.(2)
# => 0
Secrets.secret_xor/1 ইমপ্লিমেন্ট করুন। এটি এমন একটি ফাংশন রিটার্ন করবে, যা একটি আর্গুমেন্ট নেয় এবং সেটি ও secret_xor-এ পাস করা সিক্রেটের উপর একটি বিটওয়াইজ xor অপারেশন করে।
xorer = Secrets.secret_xor(1)
xorer.(3)
# => 2
Secrets.secret_combine/2 ইমপ্লিমেন্ট করুন। এটি এমন একটি ফাংশন রিটার্ন করবে, যা একটি আর্গুমেন্ট নেয় এবং secret_combine-এ পাস করা দুটি ফাংশন ক্রমানুসারে তার উপর প্রয়োগ করে।
add_one = Secrets.secret_add(1)
multiply_by_2 = Secrets.secret_multiply(2)
combined = Secrets.secret_combine(add_one, multiply_by_2)
combined.(3)
# => 8
Exercism-এ সাইন আপ করুন, Elixir ট্র্যাকের 58টি কনসেপ্ট168টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।