আমি প্রথম সংজ্ঞায় আগ্রহী নই - সেগুলি আমাকে একটি সত্যিকারের প্রোগ্রাম লিখতে সহায়তা করবে না (+1 যদি আপনি আমাকে বোঝান আমি ভুল করছি)। আমাকে দ্বিতীয় সংজ্ঞাটি বুঝতে সহায়তা করুন। আমি ম্যাপ, ফিল্টার এবং হ্রাস দরকারী বলে মনে করি: তারা আমাকে উচ্চ স্তরে প্রোগ্রাম করার অনুমতি দেয় - কম ভুল, সংক্ষিপ্ত এবং পরিষ্কার কোড।
দুটি সংজ্ঞা মূলত একই জিনিস। প্রথমটি আনুষ্ঠানিক সংজ্ঞা এবং আপনি যে উদাহরণগুলি দিয়েছেন তার উপর ভিত্তি করে আদিম সংযুক্তকারীগুলি - এটি সম্ভব ছোট বিল্ডিং ব্লক। তারা আপনাকে একটি বাস্তব প্রোগ্রাম লিখতে সহায়তা করতে পারে যেমন তাদের সাথে, আপনি আরও পরিশীলিত সংযোজক তৈরি করতে পারেন। এস এবং কে এর মতো সংযুক্তিগুলিকে একটি অনুমান "কম্বিনেটরি কম্পিউটার" এর যন্ত্রের ভাষা হিসাবে ভাবেন। প্রকৃত কম্পিউটারগুলি সেভাবে কাজ করে না, অবশ্যই, তাই অনুশীলনে আপনি সাধারণত অন্যান্য উপায়ে পর্দার আড়ালে উচ্চ-স্তরের ক্রিয়াকলাপগুলি প্রয়োগ করেন তবে ধারণাগত ভিত্তি এখনও সেই উচ্চ স্তরের অর্থ বোঝার জন্য একটি দরকারী সরঞ্জাম অপারেশন।
আপনার দেওয়া দ্বিতীয় সংজ্ঞাটি হ'ল উচ্চতর অর্ডার ফাংশনগুলির আকারে যা বিভিন্ন উপায়ে অন্যান্য ফাংশনগুলিকে একত্রিত করে, আরও অনানুষ্ঠানিক এবং আরও পরিশীলিত সমন্বয়কারীদের ব্যবহার সম্পর্কে। নোট করুন যে যদি বেসিক বিল্ডিং ব্লকগুলি উপরের আদিম সংযোজক হয় তবে সেগুলি থেকে তৈরি সমস্ত কিছু উচ্চতর অর্ডার ফাংশন এবং একটি সংযুক্তকারীও। এমন একটি ভাষায় যেখানে অন্যান্য আদিমগুলি রয়েছে, তবে আপনার যে কাজগুলি হয় বা না হয় সেগুলির মধ্যে আপনার একটি পার্থক্য রয়েছে, এক্ষেত্রে একটি সংযোজককে সাধারণত কোনও ফাংশন হিসাবে সংজ্ঞায়িত করা হয় যা কোনও সাধারণ পদ্ধতিতে অন্য ক্রিয়াকলাপগুলিকে পরিচালনা করে, কোনও অ-কাজ করার পরিবর্তে than সরাসরি জিনিস ফাংশন।
সংযুক্তকারীগুলির আরও কী কী উদাহরণ যেমন মানচিত্র, ফিল্টার?
অনেক অনেকের তালিকা! এই দু'টিই একটি ফাংশনকে রূপান্তর করে যা একটি একক মানের উপর আচরণকে একটি ফাংশনে রূপান্তর করে যা পুরো সংগ্রহে আচরণ বর্ণনা করে। আপনার কাছে এমন ফাংশন থাকতে পারে যা কেবলমাত্র অন্যান্য ক্রিয়াকে রূপান্তর করে, যেমন এগুলি শেষ থেকে শেষের দিকে রচনা করে, বা বিভাজক করে এবং যুক্তিগুলি পুনরায় সমন্বিত করে। আপনার সংযোগকারী থাকতে পারে যা একক-পদক্ষেপের ক্রিয়াকলাপগুলিকে পুনরাবৃত্ত অপারেশনে রূপান্তর করে যা সংগ্রহগুলি উত্পাদন করে বা গ্রহণ করে। বা অন্য সব ধরণের জিনিস সত্যই।
প্রোগ্রামিং ভাষাগুলি প্রায়শই কি সংযোজকগুলি প্রয়োগ করে?
এটি বেশ কিছুটা ভিন্ন হতে চলেছে। অপেক্ষাকৃত কয়েকটি সম্পূর্ণ জেনেরিক কম্বিনেটর রয়েছে - বেশিরভাগ উপরে উল্লিখিত আদিমগুলি - সুতরাং বেশিরভাগ ক্ষেত্রে সংযুক্তকারীরা যে কোনও ডেটা স্ট্রাকচার ব্যবহার করার বিষয়ে কিছুটা সচেতনতা অবলম্বন করতে পারেন (এমনকি যদি সেই ডেটা স্ট্রাকচারগুলি অন্য সংযোজকগুলির বাইরেও নির্মিত হয়), এতে কেস সাধারণত সাধারণত কিছু মুখ্য "সম্পূর্ণ জেনেরিক" সংযুক্তকারী এবং তারপরে যে কোনও বিশেষায়িত ফর্ম যে কেউ সরবরাহ করার সিদ্ধান্ত নিয়েছে। এমন একটি হাস্যকর সংখ্যক কেস রয়েছে যেখানে মানচিত্র, ভাঁজ এবং অনাবৃত আপনার পছন্দমতো প্রায় সবকিছু করার জন্য যথেষ্ট।
সংযুক্তিরা কীভাবে আমাকে আরও উন্নত এপিআই ডিজাইন করতে সহায়তা করতে পারেন?
ঠিক যেমনটি আপনি বলেছেন, উচ্চ-স্তরের ক্রিয়াকলাপগুলির বিবেচনায় এবং নিম্ন-স্তরের বিশদগুলির পরিবর্তে সেগুলি যেভাবে যোগাযোগ করে।
"প্রতিটি জন্য" -র স্টাইল লুপগুলি সংগ্রহের ওপরে জনপ্রিয়তার কথা চিন্তা করুন, যা আপনাকে সংকলন গণনার বিবরণে বিমূর্ত করতে দেয়। এগুলি বেশিরভাগ ক্ষেত্রে কেবল মানচিত্র / ভাঁজ অপারেশন এবং একটি সংযোজক তৈরি করে (অন্তর্নির্মিত সিনট্যাক্সের পরিবর্তে) আপনি দুটি বিদ্যমান লুপ নিতে এবং এগুলি সরাসরি একাধিক উপায়ে একত্রিত করার মতো কাজ করতে পারেন - অন্যটির অভ্যন্তরে নীড়, একের পর এক করুন, এবং আরও কিছু - পুরো সংযোগের গুচ্ছ চারপাশে জাগ্রাল করার পরিবর্তে কেবল একটি সংযুক্তকারী প্রয়োগ করে।
আমি কার্যকর সংযোজকগুলি কীভাবে ডিজাইন করব?
প্রথমে, আপনার প্রোগ্রামটি যে কোনও ডেটা ব্যবহার করে তা কী অপারেশনগুলি বোঝায় তা সম্পর্কে চিন্তা করুন। তারপরে কীভাবে সেই অপারেশনগুলি জেনেরিক উপায়ে অর্থপূর্ণভাবে সংযুক্ত করা যায়, সেইসাথে অপারেশনগুলিকে কীভাবে ছোট ছোট টুকরো টুকরো করা যায় যা একসাথে সংযুক্ত রয়েছে। প্রধান জিনিস হ'ল প্রত্যক্ষ ক্রিয়া নয়, রূপান্তর ও পরিচালনা নিয়ে কাজ করা । আপনার যদি এমন কোনও ফাংশন থাকে যা কেবল অস্বচ্ছভাবে কিছু জটিল কার্যকারিতা করে এবং কিছুটা প্রাক-হজম ফলাফলকে ছড়িয়ে দেয়, তখন আপনি তেমন কিছু করতে পারবেন না। সংযুক্তকারীগুলি ব্যবহার করে এমন কোডে চূড়ান্ত ফলাফলগুলি ছেড়ে দিন - আপনি এমন জিনিস চান যা আপনাকে বিন্দু A থেকে বি বিন্দুতে নিয়ে যায়, এমন কোনও জিনিস নয় যা কোনও প্রক্রিয়াটির শুরু বা শেষ হওয়ার প্রত্যাশা করে।
অ-কার্যকরী ভাষাতে (যেমন, জাভা) সংযুক্তকারীগুলি কী কী, বা সংযুক্তকারীগুলির জায়গায় এই ভাষাগুলি কী ব্যবহার করে?
আহহহহহহ। মজার বিষয়টি আপনার জিজ্ঞাসা করা উচিত, কারণ বস্তুগুলি প্রথম স্থানে উচ্চতর অর্ডারযুক্ত জিনিস থাকে - তাদের কিছু ডেটা থাকে তবে এগুলি অনেকগুলি অপারেশনও বহন করে এবং ভাল ওওপি ডিজাইনের গঠনের বেশিরভাগ অংশ "অবজেক্টগুলিতে হওয়া উচিত" সাধারণত ডেটা স্ট্রাকচারের মতো নয়, সংযুক্তকারীগুলির মতো কাজ করে।
সুতরাং সম্ভবত এখানে সর্বোত্তম উত্তর হ'ল সংযুক্তকরণের মতো জিনিসগুলির পরিবর্তে তারা প্রচুর গেটর এবং সেটার পদ্ধতি বা পাবলিক ফিল্ড সহ ক্লাস ব্যবহার করে এবং যুক্তি যা বেশিরভাগ ক্ষেত্রে অস্বচ্ছ, পূর্বনির্ধারিত ক্রিয়া করে থাকে।