গোপনীয়তা

গোপনীয়তা

লার্নিং অনুশীলনী

ভূমিকা

অ্যানোনিমাস ফাংশন

Elixir-এ ফাংশনকে প্রথম শ্রেণির নাগরিক হিসেবে গণ্য করা হয়। এর মানে হলো:

  • নামযুক্ত ও অ্যানোনিমাস ফাংশন ভ্যারিয়েবলে অ্যাসাইন করা যায়।
  • নামযুক্ত ও অ্যানোনিমাস ফাংশন ডেটার মতো আর্গুমেন্ট ও রিটার্ন ভ্যালু হিসেবে এক জায়গা থেকে আরেক জায়গায় পাঠানো যায়।
  • অ্যানোনিমাস ফাংশন ডাইনামিকভাবে তৈরি করা যায়।

নামযুক্ত ফাংশনের বিপরীতে অ্যানোনিমাস ফাংশনের জন্য কোনো স্থির রেফারেন্স পাওয়া যায় না; এগুলো কেবল তখনই পাওয়া যায় যখন কোনো ভ্যারিয়েবলে অ্যাসাইন করা হয় বা সঙ্গে সঙ্গে ইনভোক করা হয়।

আমরা অ্যানোনিমাস ফাংশন ব্যবহার করতে পারি:

  • লেক্সিকাল স্কোপ (যা ক্লোজার নামেও পরিচিত) ব্যবহার করে ডেটা লুকাতে।
  • রানটাইমে ডাইনামিকভাবে ফাংশন তৈরি করতে।

অ্যানোনিমাস ফাংশন শুরু হয় সংরক্ষিত শব্দ fn দিয়ে, ফাংশনের বডি থেকে আর্গুমেন্টগুলো আলাদা করা হয় -> টোকেন দিয়ে, আর শেষ করা হয় end দিয়ে। নামযুক্ত ফাংশনের মতোই, ফাংশনের শেষ এক্সপ্রেশনটি যে ফাংশনটি এটিকে কল করেছে তার কাছে অন্তর্নিহিতভাবে রিটার্ন করা হয়।

একটি ফাংশন রেফারেন্স ইনভোক করতে হলে রেফারেন্স ভ্যারিয়েবল ও আর্গুমেন্টের তালিকার মাঝে একটি . ব্যবহার করতে হবে:

function_variable = fn param ->
  param + 1
end

function_variable.(1)
# => 2

আরও সংক্ষিপ্ত করতে আপনি শর্টহ্যান্ড ক্যাপচার নোটেশনও ব্যবহার করতে পারেন:

variable = &(&1 + 1)

variable.(1)
# => 2

বিট ম্যানিপুলেশন

Elixir-এ Bitwise মডিউলে বিট নিয়ে কাজ করার অনেক ফাংশন রয়েছে।

  • band/2: বিটওয়াইজ AND
  • bsl/2: বিটওয়াইজ SHIFT LEFT
  • bsr/2: বিটওয়াইজ SHIFT RIGHT
  • bxor/2: বিটওয়াইজ XOR
  • bor/2: বিটওয়াইজ OR
  • bnot/1: বিটওয়াইজ NOT

একটি বিটওয়াইজ ফাংশন কীভাবে ব্যবহার করতে হয় তার একটি উদাহরণ এখানে:

Bitwise.bsl(1, 3)
# => 8

সব বিটওয়াইজ ফাংশন কেবল ইন্টিজারের উপর কাজ করে।

আপনি যদি Elixir-এর 1.9 বা তার নিচের সংস্করণ রান করেন, তাহলে Bitwise মডিউলটি ব্যবহার করতে হলে মডিউল ডেফিনিশনের শুরুতে require Bitwise কল করতে হবে।

নির্দেশনা

এই অনুশীলনীতে আপনাকে ডেটার উপর রূপান্তর ঘটিয়ে কাজ করে এমন একটি এনক্রিপশন ডিভাইসের সফটওয়্যার লেখার দায়িত্ব দেওয়া হয়েছে। সহজ ফাংশনগুলো একসাথে জুড়ে জটিল ফাংশন নমনীয়ভাবে তৈরি করার একটি উপায় আপনার দরকার।

প্রতিটি কাজের জন্য এমন একটি অ্যানোনিমাস ফাংশন রিটার্ন করুন, যা কলিং স্কোপ থেকে কল করা যায়।

সব ফাংশনই ইন্টিজার আর্গুমেন্ট প্রত্যাশা করবে। Elixir-এ বিটওয়াইজ অপারেশন করার জন্যও ইন্টিজার উপযুক্ত।

1. একটি যোগ করার ফাংশন তৈরি করুন

Secrets.secret_add/1 ইমপ্লিমেন্ট করুন। এটি এমন একটি ফাংশন রিটার্ন করবে, যা একটি আর্গুমেন্ট নেয় এবং তার সাথে secret_add-এ পাস করা আর্গুমেন্ট যোগ করে।

adder = Secrets.secret_add(3)
adder.(2)
# => 5

2. একটি বিয়োগ করার ফাংশন তৈরি করুন

Secrets.secret_subtract/1 ইমপ্লিমেন্ট করুন। এটি এমন একটি ফাংশন রিটার্ন করবে, যা একটি আর্গুমেন্ট নেয় এবং সেই আর্গুমেন্ট থেকে secret_subtract-এ পাস করা সিক্রেট বিয়োগ করে।

subtractor = Secrets.secret_subtract(2)
subtractor.(3)
# => 1

3. একটি গুণ করার ফাংশন তৈরি করুন

Secrets.secret_multiply/1 ইমপ্লিমেন্ট করুন। এটি এমন একটি ফাংশন রিটার্ন করবে, যা একটি আর্গুমেন্ট নেয় এবং secret_multiply-এ পাস করা সিক্রেট দিয়ে সেটিকে গুণ করে।

multiplier = Secrets.secret_multiply(7)
multiplier.(3)
# => 21

4. একটি ভাগ করার ফাংশন তৈরি করুন

Secrets.secret_divide/1 ইমপ্লিমেন্ট করুন। এটি এমন একটি ফাংশন রিটার্ন করবে, যা একটি আর্গুমেন্ট নেয় এবং secret_divide-এ পাস করা সিক্রেট দিয়ে সেটিকে ভাগ করে।

divider = Secrets.secret_divide(3)
divider.(32)
# => 10

আউটপুট যাতে অন্য ফাংশনগুলোর প্রত্যাশিত ইনপুটের সাথে মানানসই হয়, সেজন্য ইন্টিজার ডিভিশন ব্যবহার করুন।

5. একটি "and" করার ফাংশন তৈরি করুন

Secrets.secret_and/1 ইমপ্লিমেন্ট করুন। এটি এমন একটি ফাংশন রিটার্ন করবে, যা একটি আর্গুমেন্ট নেয় এবং সেটি ও secret_and-এ পাস করা সিক্রেটের উপর একটি বিটওয়াইজ and অপারেশন করে।

ander = Secrets.secret_and(1)
ander.(2)
# => 0

6. একটি "xor" করার ফাংশন তৈরি করুন

Secrets.secret_xor/1 ইমপ্লিমেন্ট করুন। এটি এমন একটি ফাংশন রিটার্ন করবে, যা একটি আর্গুমেন্ট নেয় এবং সেটি ও secret_xor-এ পাস করা সিক্রেটের উপর একটি বিটওয়াইজ xor অপারেশন করে।

xorer = Secrets.secret_xor(1)
xorer.(3)
# => 2

7. একটি ফাংশন কম্বাইনার তৈরি করুন

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
GitHub-এর মাধ্যমে সম্পাদনা করুন লিংকটি একটি নতুন উইন্ডো বা ট্যাবে খোলে
Elixir Exercism

গোপনীয়তা শুরু করতে প্রস্তুত?

Exercism-এ সাইন আপ করুন, Elixir ট্র্যাকের 58টি কনসেপ্ট168টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।