শ্রমজীবী ​​মানুষের জন্য সংযুক্তকারীগুলির ব্যাখ্যা


93

কম্বিনেটর কী ??

এটি কি "কোনও ফাংশন বা সংজ্ঞা নেই কোনও মুক্ত ভেরিয়েবলগুলি সহ" (এসও তে সংজ্ঞায়িত)?

বা এটি সম্পর্কে কীভাবে: অ্যারোস সম্পর্কিত তাঁর সুপরিচিত কাগজে জন হিউজেসের মতে , "একটি সংযুক্তকারী একটি ফাংশন যা প্রোগ্রামের টুকরোগুলি থেকে প্রোগ্রামের টুকরো তৈরি করে" , যা সুবিধাজনক কারণ "... সংযুক্তকারী ব্যবহার করে প্রোগ্রামারটি পছন্দসই অনেকগুলি গঠন করে প্রোগ্রাম স্বয়ংক্রিয়ভাবে, হাতের দ্বারা প্রতিটি বিবরণ লেখার চেয়ে "। তিনি এ কথা বলতেই যান mapএবং এ filterজাতীয় সংযোজকগুলির দুটি সাধারণ উদাহরণ।

কিছু সংযোজক যা প্রথম সংজ্ঞাটির সাথে মেলে:

কিছু সংযোজক যা দ্বিতীয় সংজ্ঞাটির সাথে মেলে:

  • মানচিত্র
  • ছাঁকনি
  • ভাঁজ / হ্রাস (সম্ভবত)
  • >>>, রচনা, এফএম্যাপ এর কোনটি ?????

আমি প্রথম সংজ্ঞায় আগ্রহী নই - সেগুলি আমাকে একটি সত্যিকারের প্রোগ্রাম লিখতে সহায়তা করবে না (+1 আপনি যদি বোঝান আমি ভুল করছি)। দ্বিতীয় সংজ্ঞা বুঝতে দয়া করে আমাকে সহায়তা করুন । আমি ম্যাপ, ফিল্টার এবং হ্রাস দরকারী বলে মনে করি: তারা আমাকে উচ্চ স্তরে প্রোগ্রাম করার অনুমতি দেয় - কম ভুল, সংক্ষিপ্ত এবং পরিষ্কার কোড। সংযুক্তকারী সম্পর্কে আমার নির্দিষ্ট প্রশ্নগুলির এখানে:

  1. সংযুক্তকারীগুলির আরও কী কী উদাহরণ যেমন মানচিত্র, ফিল্টার?
  2. প্রোগ্রামিং ভাষাগুলি প্রায়শই কি সংযোজকগুলি প্রয়োগ করে?
  3. সংযুক্তিরা কীভাবে আমাকে আরও উন্নত এপিআই ডিজাইন করতে সহায়তা করতে পারেন?
  4. আমি কার্যকর সংযোজকগুলি কীভাবে ডিজাইন করব?
  5. অ-কার্যকরী ভাষাতে (যেমন, জাভা) সংযুক্তকারীগুলি কী কী, বা সংযুক্তকারীগুলির জায়গায় এই ভাষাগুলি কী ব্যবহার করে?

হালনাগাদ

@ সিএ ম্যাকক্যানকে ধন্যবাদ, আমার এখন সংযুক্তকারীদের সম্পর্কে কিছুটা ভাল বোঝার দরকার আছে। তবে একটি প্রশ্ন আমার কাছে এখনও একটি স্টিকিং পয়েন্ট:

সাথে যুক্ত একটি কার্যকরী প্রোগ্রাম এবং একটি ছাড়া, একটি সংযুক্তকারীগুলির ভারী ব্যবহারের মধ্যে পার্থক্য কী?

আমি সন্দেহ উত্তরটি হ'ল সংযুক্তি-ভারী সংস্করণটি হ'ল সংক্ষিপ্ত, পরিষ্কার, আরও সাধারণ, তবে সম্ভব হলে আমি আরও গভীরভাবে আলোচনার প্রশংসা করব।

আমি foldসাধারণ প্রোগ্রামিং ভাষায় জটিল সংযোজকগুলির (আরও বেশি জটিল ) আরও উদাহরণ এবং ব্যাখ্যা খুঁজছি ।


4
আমি মানচিত্র / ফিল্টার / ভাঁজ উচ্চ-ক্রমের ক্রিয়াগুলি বিবেচনা করি এবং আমি সেগুলি সর্বদা ব্যবহার করি। কম্বিনেটর কী তা আমার এখনও ধারণা নেই।

4
@pst - আমি 5 দিন আগে একমত হয়েছি, তবে এখন আমি জন হিউজেসের সাথে তর্ক করতে পারি না
ম্যাট ফেনউইক

উত্তর:


93

আমি প্রথম সংজ্ঞায় আগ্রহী নই - সেগুলি আমাকে একটি সত্যিকারের প্রোগ্রাম লিখতে সহায়তা করবে না (+1 যদি আপনি আমাকে বোঝান আমি ভুল করছি)। আমাকে দ্বিতীয় সংজ্ঞাটি বুঝতে সহায়তা করুন। আমি ম্যাপ, ফিল্টার এবং হ্রাস দরকারী বলে মনে করি: তারা আমাকে উচ্চ স্তরে প্রোগ্রাম করার অনুমতি দেয় - কম ভুল, সংক্ষিপ্ত এবং পরিষ্কার কোড।

দুটি সংজ্ঞা মূলত একই জিনিস। প্রথমটি আনুষ্ঠানিক সংজ্ঞা এবং আপনি যে উদাহরণগুলি দিয়েছেন তার উপর ভিত্তি করে আদিম সংযুক্তকারীগুলি - এটি সম্ভব ছোট বিল্ডিং ব্লক। তারা আপনাকে একটি বাস্তব প্রোগ্রাম লিখতে সহায়তা করতে পারে যেমন তাদের সাথে, আপনি আরও পরিশীলিত সংযোজক তৈরি করতে পারেন। এস এবং কে এর মতো সংযুক্তিগুলিকে একটি অনুমান "কম্বিনেটরি কম্পিউটার" এর যন্ত্রের ভাষা হিসাবে ভাবেন। প্রকৃত কম্পিউটারগুলি সেভাবে কাজ করে না, অবশ্যই, তাই অনুশীলনে আপনি সাধারণত অন্যান্য উপায়ে পর্দার আড়ালে উচ্চ-স্তরের ক্রিয়াকলাপগুলি প্রয়োগ করেন তবে ধারণাগত ভিত্তি এখনও সেই উচ্চ স্তরের অর্থ বোঝার জন্য একটি দরকারী সরঞ্জাম অপারেশন।

আপনার দেওয়া দ্বিতীয় সংজ্ঞাটি হ'ল উচ্চতর অর্ডার ফাংশনগুলির আকারে যা বিভিন্ন উপায়ে অন্যান্য ফাংশনগুলিকে একত্রিত করে, আরও অনানুষ্ঠানিক এবং আরও পরিশীলিত সমন্বয়কারীদের ব্যবহার সম্পর্কে। নোট করুন যে যদি বেসিক বিল্ডিং ব্লকগুলি উপরের আদিম সংযোজক হয় তবে সেগুলি থেকে তৈরি সমস্ত কিছু উচ্চতর অর্ডার ফাংশন এবং একটি সংযুক্তকারীও। এমন একটি ভাষায় যেখানে অন্যান্য আদিমগুলি রয়েছে, তবে আপনার যে কাজগুলি হয় বা না হয় সেগুলির মধ্যে আপনার একটি পার্থক্য রয়েছে, এক্ষেত্রে একটি সংযোজককে সাধারণত কোনও ফাংশন হিসাবে সংজ্ঞায়িত করা হয় যা কোনও সাধারণ পদ্ধতিতে অন্য ক্রিয়াকলাপগুলিকে পরিচালনা করে, কোনও অ-কাজ করার পরিবর্তে than সরাসরি জিনিস ফাংশন।

সংযুক্তকারীগুলির আরও কী কী উদাহরণ যেমন মানচিত্র, ফিল্টার?

অনেক অনেকের তালিকা! এই দু'টিই একটি ফাংশনকে রূপান্তর করে যা একটি একক মানের উপর আচরণকে একটি ফাংশনে রূপান্তর করে যা পুরো সংগ্রহে আচরণ বর্ণনা করে। আপনার কাছে এমন ফাংশন থাকতে পারে যা কেবলমাত্র অন্যান্য ক্রিয়াকে রূপান্তর করে, যেমন এগুলি শেষ থেকে শেষের দিকে রচনা করে, বা বিভাজক করে এবং যুক্তিগুলি পুনরায় সমন্বিত করে। আপনার সংযোগকারী থাকতে পারে যা একক-পদক্ষেপের ক্রিয়াকলাপগুলিকে পুনরাবৃত্ত অপারেশনে রূপান্তর করে যা সংগ্রহগুলি উত্পাদন করে বা গ্রহণ করে। বা অন্য সব ধরণের জিনিস সত্যই।

প্রোগ্রামিং ভাষাগুলি প্রায়শই কি সংযোজকগুলি প্রয়োগ করে?

এটি বেশ কিছুটা ভিন্ন হতে চলেছে। অপেক্ষাকৃত কয়েকটি সম্পূর্ণ জেনেরিক কম্বিনেটর রয়েছে - বেশিরভাগ উপরে উল্লিখিত আদিমগুলি - সুতরাং বেশিরভাগ ক্ষেত্রে সংযুক্তকারীরা যে কোনও ডেটা স্ট্রাকচার ব্যবহার করার বিষয়ে কিছুটা সচেতনতা অবলম্বন করতে পারেন (এমনকি যদি সেই ডেটা স্ট্রাকচারগুলি অন্য সংযোজকগুলির বাইরেও নির্মিত হয়), এতে কেস সাধারণত সাধারণত কিছু মুখ্য "সম্পূর্ণ জেনেরিক" সংযুক্তকারী এবং তারপরে যে কোনও বিশেষায়িত ফর্ম যে কেউ সরবরাহ করার সিদ্ধান্ত নিয়েছে। এমন একটি হাস্যকর সংখ্যক কেস রয়েছে যেখানে মানচিত্র, ভাঁজ এবং অনাবৃত আপনার পছন্দমতো প্রায় সবকিছু করার জন্য যথেষ্ট।

সংযুক্তিরা কীভাবে আমাকে আরও উন্নত এপিআই ডিজাইন করতে সহায়তা করতে পারেন?

ঠিক যেমনটি আপনি বলেছেন, উচ্চ-স্তরের ক্রিয়াকলাপগুলির বিবেচনায় এবং নিম্ন-স্তরের বিশদগুলির পরিবর্তে সেগুলি যেভাবে যোগাযোগ করে।

"প্রতিটি জন্য" -র স্টাইল লুপগুলি সংগ্রহের ওপরে জনপ্রিয়তার কথা চিন্তা করুন, যা আপনাকে সংকলন গণনার বিবরণে বিমূর্ত করতে দেয়। এগুলি বেশিরভাগ ক্ষেত্রে কেবল মানচিত্র / ভাঁজ অপারেশন এবং একটি সংযোজক তৈরি করে (অন্তর্নির্মিত সিনট্যাক্সের পরিবর্তে) আপনি দুটি বিদ্যমান লুপ নিতে এবং এগুলি সরাসরি একাধিক উপায়ে একত্রিত করার মতো কাজ করতে পারেন - অন্যটির অভ্যন্তরে নীড়, একের পর এক করুন, এবং আরও কিছু - পুরো সংযোগের গুচ্ছ চারপাশে জাগ্রাল করার পরিবর্তে কেবল একটি সংযুক্তকারী প্রয়োগ করে।

আমি কার্যকর সংযোজকগুলি কীভাবে ডিজাইন করব?

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

অ-কার্যকরী ভাষাতে (যেমন, জাভা) সংযুক্তকারীগুলি কী কী, বা সংযুক্তকারীগুলির জায়গায় এই ভাষাগুলি কী ব্যবহার করে?

আহহহহহহ। মজার বিষয়টি আপনার জিজ্ঞাসা করা উচিত, কারণ বস্তুগুলি প্রথম স্থানে উচ্চতর অর্ডারযুক্ত জিনিস থাকে - তাদের কিছু ডেটা থাকে তবে এগুলি অনেকগুলি অপারেশনও বহন করে এবং ভাল ওওপি ডিজাইনের গঠনের বেশিরভাগ অংশ "অবজেক্টগুলিতে হওয়া উচিত" সাধারণত ডেটা স্ট্রাকচারের মতো নয়, সংযুক্তকারীগুলির মতো কাজ করে।

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


দুর্দান্ত উত্তর! আসুন দেখুন আমি এটি বুঝতে পারি কিনা - সংযুক্তকারীগুলি বিশেষ নয়, বরং, একটি রক্ষণাবেক্ষণযোগ্য সফ্টওয়্যার সিস্টেম তৈরির একটি অবিচ্ছেদ্য অঙ্গ? আমি এখনও আপনার পোস্টের প্রসঙ্গে হিউজেসের "প্রোগ্রামের টুকরো" বিবৃতি হজম করার চেষ্টা করছি।
ম্যাট ফেনউইক

@ ম্যাট ফেনউইক: আমি নিশ্চিত যে তিনি যে "রূপান্তর / ক্রিয়াকলাপের" বিষয়ে কথা বলছেন তার অর্থ বোঝাতে তিনি "প্রোগ্রামের টুকরা" ব্যবহার করছেন, বিশেষত যদি এটি "তীর" সম্পর্কে কথা বলছেন, যা এই পদ্ধতির আরও দৃ strongly়তার সাথে জোর দেয়। এছাড়াও, আমি এটি সঠিকভাবে রক্ষণাবেক্ষণযোগ্য সিস্টেম তৈরির বিষয়ে বলব না - বিল্ডিং সিস্টেমগুলি সম্পর্কে যা একটি বিশেষ উপায়ে অত্যন্ত মডুলার এবং ডিকোপলড রয়েছে সেগুলি সম্পর্কে আরও জানায় ent
সিএ ম্যাকক্যান

সংযোজকগুলির ব্যবহারিক ব্যবহার সম্পর্কে পড়ার জন্য কোনও ভাল সংস্থান সম্পর্কে আপনি কি জানেন? একটি গুচ্ছ ধন্যবাদ!
ম্যাট ফেনউইক

@ ম্যাট ফেনউইক: আমার মাথার উপরের অংশ থেকে সুনির্দিষ্ট কিছু নেই , দুঃখিত। তবে এটি খুব কার্যকরী স্টাইলে লিখিত প্রোগ্রামগুলির জন্য একটি প্রাকৃতিক দৃষ্টিভঙ্গি হিসাবে দেখা যায়, তাই কেবল সেই ভাষাগুলির সাথে কিছুটা সময় ব্যয় করে যা দৃ strongly়ভাবে উত্সাহ দেয় (উদাহরণস্বরূপ, হাস্কেল বা ক্লোজার), এবং সেই ভাষায় কীভাবে পরিষ্কার এবং আইডোমেটিক কোড লেখা আছে তা দেখুন looking , শৈলীর জন্য অনুভূতি পাওয়ার একটি দুর্দান্ত উপায়।
সিএ ম্যাকক্যান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.