কম্পিউটার

A নেপথ্যে ম্যাপ, ফিল্টার, এবং সুইফ্ট কমাতে দেখুন

একটি ফাংশন কিছু ইনপুট নেয়, এটিতে কিছু করে এবং একটি আউটপুট তৈরি করে। একটি ফাংশন একটি স্বাক্ষর এবং একটি বডি আছে. আপনি যদি একটি ফাংশনে একই ইনপুট দেন তবে আপনি সবসময় একই আউটপুট পাবেন। এটি সংক্ষেপে ফাংশন এর সংজ্ঞা .

এখন আমরা ফাংশনগুলিকে আরও ঘনিষ্ঠভাবে দেখার মাধ্যমে সেগুলি সম্পর্কে আরও কথা বলব। আমরা সুইফটে উচ্চতর অর্ডার ফাংশন অন্বেষণ করব। যে ফাংশন ইনপুট হিসাবে অন্য একটি ফাংশন গ্রহণ করে বা একটি ফাংশন প্রদান করে তাকে বলে একটি উচ্চ অর্ডার ফাংশন .

সুইফটে, আমরা ম্যাপ, ফিল্টার, কমিয়ে খেলি প্রতিদিন. যখন আমরা এই ফাংশনগুলি ব্যবহার করি, তখন এটি জাদুর মতো মনে হয়। এই মুহুর্তে, পর্দার আড়ালে কী ঘটছে সে সম্পর্কে আপনার ধারণা নাও থাকতে পারে। মানচিত্র, ফিল্টার, এবং কার্যকারি প্রোগ্রামিং এর ধারণা এবং পদ্ধতির মাধ্যমে কাজ হ্রাস করুন। যদিও সুইফট একটি বিশুদ্ধ কার্যকরী ভাষা নয়, এটি আপনাকে কার্যকরী জিনিসগুলি করতে দেয়৷

এখন তাদের জন্য পটভূমিতে কী ঘটছে তা একে একে দেখি। প্রথমে আমরা কিছু নির্দিষ্ট ডেটা প্রকারের জন্য এই ফাংশনগুলির মৌলিক সংস্করণগুলি বাস্তবায়ন করব, তারপর আমরা একটি জেনেরিক সংস্করণ প্রয়োগ করার চেষ্টা করব৷

মানচিত্র ফাংশন

ধরা যাক আমাদের কাছে পূর্ণসংখ্যার একটি অ্যারে রয়েছে এবং আমাদের একটি ফাংশন লিখতে হবে যা মূল অ্যারের প্রতিটি উপাদানে কিছু ডেল্টা মান যোগ করার পরে একটি নতুন অ্যারে প্রদান করে। নিচের মত একটি সিম্পল ফর লুপ ব্যবহার করে আমরা সহজেই এর জন্য একটি ফাংশন লিখতে পারি:

এখন আমাদের আরেকটি ফাংশন দরকার যা মূল অ্যারের প্রতিটি উপাদানকে দ্বিগুণ করে একটি নতুন অ্যারে প্রদান করে। এর জন্য, আমরা নিচের মত এটি বাস্তবায়ন করতে পারি:

আমরা যদি উপরের দুটি ফাংশন দেখি, আমরা দেখতে পাব যে তারা মূলত একই কাজ করছে। শুধুমাত্র ফর লুপের ভিতরে কার্যকারিতা ভিন্ন। তারা উভয়ই একটি পূর্ণসংখ্যা নেয় ইনপুট হিসাবে অ্যারে, লুপ ব্যবহার করে প্রতিটি উপাদানকে রূপান্তর করুন এবং একটি নতুন অ্যারে ফেরত দিন। তাই মূলত মূল বিষয় হল প্রতিটি উপাদানকে নতুন কিছুতে রূপান্তর করা।

যেহেতু সুইফ্ট উচ্চ-ক্রম ফাংশন সমর্থন করে, তাই আমরা একটি ফাংশন লিখতে পারি যা একটি পূর্ণসংখ্যার অ্যারে নেবে, ফাংশনটিকে ইনপুট হিসাবে রূপান্তর করবে এবং মূল অ্যারের প্রতিটি উপাদানে ট্রান্সফর্ম ফাংশন প্রয়োগ করে একটি নতুন অ্যারে ফেরত দেবে৷

কিন্তু এখনও, উপরের সাথে একটি সমস্যা আছে:এটি শুধুমাত্র একটি পূর্ণসংখ্যা অ্যারে প্রদান করে। আমাদের যদি ইনপুট পূর্ণসংখ্যা অ্যারেকে একটি স্ট্রিং অ্যারেতে রূপান্তর করার প্রয়োজন হয়, উদাহরণস্বরূপ, তাহলে আমরা এই ফাংশনটি দিয়ে তা করতে পারি না। এটি করার জন্য, আমাদের একটি জেনেরিক ফাংশন লিখতে হবে যা যেকোনো ধরনের জন্য কাজ করে।

আমরা একটি অ্যারে এক্সটেনশনে একটি জেনেরিক ফাংশন এইভাবে প্রয়োগ করতে পারি:

  1. অ্যারে এক্সটেনশনে একটি মানচিত্র ফাংশন ঘোষণা করুন যা একটি জেনেরিক টাইপের সাথে কাজ করে T .
  2. ফাংশনটি (এলিমেন্ট) ->; ধরনের একটি ফাংশন নেয় ইনপুট হিসাবে T
  3. একটি খালি ফলাফল অ্যারে ঘোষণা করুন যা T ধারণ করে ফাংশনের ভিতরে টাইপের ডেটা।
  4. লুপ পুনরাবৃত্তি করার জন্য a প্রয়োগ করুন এবং উপাদানটিকে T টাইপে রূপান্তর করতে রূপান্তর ফাংশনটিকে কল করুন।
  5. পরিণত অ্যারেতে রূপান্তরিত মান যোগ করুন

এভাবেই মানচিত্র ফাংশন সুইফটে কাজ করে। যদি আমাদের মানচিত্র বাস্তবায়ন করতে হয় ফাংশন, তারপর আমরা উপরের মত এটি বাস্তবায়ন করব। তাই মূলত, এটি একটি অ্যারেতে কোনো যাদু ঘটায় না — আমরা সহজেই ফাংশনটিকে নিজেদের দ্বারা সংজ্ঞায়িত করতে পারতাম।

ফিল্টার ফাংশন

ধরুন আমাদের পূর্ণসংখ্যার একটি অ্যারে আছে এবং আমরা অ্যারেতে শুধুমাত্র জোড় সংখ্যা রাখতে চাই। আমরা একটি সাধারণ ফর লুপ ব্যবহার করে এটি বাস্তবায়ন করতে পারি:

এখন আবার, বলুন আমাদের কাছে একটি প্রজেক্টের ক্লাস ফাইলের নাম প্রতিনিধিত্বকারী স্ট্রিংগুলির একটি অ্যারে রয়েছে এবং আমরা শুধুমাত্র রাখতে চাই৷ দ্রুত নথি পত্র. এটি নীচের মত একটি একক লুপ দিয়েও করা যেতে পারে:

আমরা যদি উপরোক্ত দুটি ফাংশনের বাস্তবায়ন ঘনিষ্ঠভাবে দেখি, তাহলে আমরা বুঝতে পারি যে তারা মূলত একই কাজ করে — শুধুমাত্র ডেটা টাইপ দুটি অ্যারের জন্য আলাদা। আমরা একটি জেনেরিক ফিল্টার ফাংশন প্রয়োগ করে এটিকে সাধারণীকরণ করতে পারি, যা একটি অ্যারে এবং একটি ফাংশনকে ইনপুট হিসাবে নেয় এবং includeElement-এর আউটপুটের উপর নির্ভর করে। ফাংশন, এটি ফলাফল অ্যারেতে উপাদান যোগ করবে কিনা তা সিদ্ধান্ত নেয়।

ফাংশন হ্রাস করুন

ধরুন আমাদের কাছে পূর্ণসংখ্যার একটি অ্যারে আছে এবং আমরা দুটি ফাংশন বাস্তবায়ন করতে চাই যা উপাদানগুলির যোগফল এবং গুণফল প্রদান করে। আমরা একটি সাধারণ ফর লুপ ব্যবহার করে এটি বাস্তবায়ন করতে পারি:

এখন পূর্ণসংখ্যার অ্যারের পরিবর্তে, বলুন আমাদের কাছে স্ট্রিংগুলির একটি অ্যারে রয়েছে এবং আমরা অ্যারের সমস্ত উপাদানগুলিকে সংযুক্ত করতে চাই:

তিনটি ফাংশনই মূলত একই কাজ করে। তারা ইনপুট হিসাবে একটি অ্যারে নেয়, একটি ফলস্বরূপ ভেরিয়েবল শুরু করে, অ্যারের উপর পুনরাবৃত্তি করে এবং ফলাফল পরিবর্তনশীল আপডেট করে৷

এখান থেকে আমরা একটি জেনেরিক ফাংশন বাস্তবায়ন করতে পারি যা সবার জন্য কাজ করা উচিত। এটি করার জন্য আমাদের ফলাফলের ভেরিয়েবলের প্রাথমিক মান এবং প্রতিটি পুনরাবৃত্তিতে সেই ভেরিয়েবলটি আপডেট করার জন্য ফাংশন প্রয়োজন।

সুতরাং আমরা নিম্নলিখিত সংজ্ঞা দিয়ে জেনেরিক ফাংশন বাস্তবায়ন করতে পারি:

[Element] প্রকারের যেকোনো ইনপুট অ্যারের জন্য উপরের বাস্তবায়নটি জেনেরিক। এটি T প্রকারের ফলাফল গণনা করবে . কাজ করার জন্য, এটির T প্রকারের একটি প্রাথমিক মান প্রয়োজন৷ একটি ফলাফল পরিবর্তনশীল বরাদ্দ করা. তারপর, এটি (T, Element) -> ধরনের একটি ফাংশন প্রয়োজন T যা প্রতিটি পুনরাবৃত্তির জন্য লুপের ভিতরে ব্যবহার করা হবে ফলাফল পরিবর্তনশীল আপডেট করতে।

পড়ার জন্য ধন্যবাদ!


  1. জাভাস্ক্রিপ্টে ফাংশন এবং পদ্ধতির মধ্যে পার্থক্য কী?

  2. ফাংশন এবং মাদারবোর্ডের সংজ্ঞা

  3. সুইফটে ফাংশন কম্পোজিশনের একটি দ্রুত ভূমিকা

  4. আসুন জেনেরিক্স এবং সুইফটের যেকোন প্রকারের মধ্যে পার্থক্যগুলি ব্যবচ্ছেদ করি