এটি করার জন্য একটি পদ আছে: ফানক 1 (ফানক 2 (), ফানক 3 ());


24

আমি জানি যে obj.func1().func2()এটিকে মেথড চেইনিং বলা হয় তবে এর জন্য প্রযুক্তিগত শব্দটি কী:

func1(func2(), func3());

যেখানে কোনও ফাংশনের রিটার্ন অন্যটির পক্ষে যুক্তি হিসাবে ব্যবহৃত হয়।


8
obj.func1().func2() is called method chaining- সংশোধন: একে ট্রেনের ধ্বংসস্তূপ বলা হয়।
ইয়াম মার্কোভিচ

এটি খুব, খুব, খুব জটিল মনে হয় যদি না আপনি সম্পূর্ণরূপে নিশ্চিত হন যে কোনও সদস্য ফাংশন হিসাবে থাকা obj.func1()কোনও বস্তু সর্বদা ফেরত func2()দেয়।
শাদুর

8
@ ইয়াম কেয়ার ব্যাখ্যা করতে? এটি অন্যদের মধ্যে সাবলীল ইন্টারফেসে দুর্দান্ত লাভের জন্য নিযুক্ত করা হয়। আপনি কি ডেমিটারের আইন উল্লেখ করছেন? যদি তা হয় তবে এটি উপরের প্যাটার্নটিকে নিষিদ্ধ করে না, এমনকি এমন ক্ষেত্রেও যেখানে এলওডি-র বিরুদ্ধে ভাল মামলা রয়েছে।
কনরাড রুডল্ফ

1
পদ্ধতি শৃঙ্খলাকৃতির সিন্ট্যাকটিক চিনির সাথে একটি শেল্ফের উপরে অবস্থিত, এটির উপর কোনও ঝগড়া করার দরকার নেই।
কোস

1
@ পাওলিস্টার ø আমি ভেবেছিলাম স্ট্যাক ট্রেসিং এর অর্থ।
ক্রিস সি

উত্তর:


38

আমি মনে করি না এটি ফাংশন রচনা। ফাংশন কম্পোজিশনের অর্থ f . g . hহ্যাস্কেলের মতো দুটি বা আরও বেশি ফাংশন নেওয়া এবং এগুলিকে একটি নতুন ফাংশনে পরিণত করা । মনে রাখবেন যে এই মুহুর্তে কোনও ফাংশন ডাকা হয় না।

ব্যক্তিগতভাবে, আমি func1(func2(), func3())"নেস্টেড ফাংশন কল" এর মতো নির্মাণগুলি উল্লেখ করব।


+1, আমি দেখেছি এমন সমস্ত প্রোগ্রামিং প্রসঙ্গে "নেস্টেড ফাংশন কল" হিসাবে উল্লেখ করা হয়।
ইজকাটা

1
+1, এই "ফাংশন কম্পোজিশন" বলা কল্পনাজনকভাবে ভুল।
জিয়ান

+1 টি। সব f(g())করছে f()প্রথম আর্গুমেন্টের জন্য একটি ভাবের সাথে কল করা, এবং এটি ঘটে ফাংশন কলটি g()একটি অভিব্যক্তি হিসাবে যোগ্যতা অর্জন করে। তবে যদি এর জন্য কোনও নাম থাকতে হয় তবে এটি যতটা কাছে যায় তত কাছাকাছি।
blrfl

16

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


4
এটি ক্রিয়ামূলক প্রোগ্রামিংয়ে রচনাও বলে।
চক

8
আমি মনে করি না এটি "মূলত এড়ানো"। আইএমও printf("%d %d\n", strlen(a), strlen(b));মধ্যস্থতাকারী ভেরিয়েবলগুলি ব্যবহার না করে কোড লিখতে অস্বাভাবিক নয় ।
ব্যবহারকারী 281377

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

7
ফানক 2 এর পূর্বে সংকলক ফানক 3 মূল্যায়ন করতে মুক্ত কিনা তা সম্পূর্ণরূপে ব্যবহৃত ভাষার উপর নির্ভর করে। জাভাতে, উদাহরণস্বরূপ, মূল্যায়ন আদেশ কঠোরভাবে নির্দিষ্ট করা হয়েছে। আমি আসলে সন্দেহ করব যে এটি বেশিরভাগ ভাষার ক্ষেত্রে।
মাইকেল বর্গওয়ার্ট

2
গণিতে "ফাংশন কম্পোজিশন" শব্দটি আসলে কেবলমাত্র একক যুক্তিযুক্ত কার্যের ক্ষেত্রে প্রযোজ্য, যেখানে এটি ফর্মের কাঠামোকে বোঝায় func1(func2(func3(x)))। অথবা টেকনিক্যালি, এটি বোঝায় ফাংশন নিজেদের যদি g(x) = f1(f2(f3(x))), তারপর g( না g(x) ) রচনা হয় f1, f2এবং f3। যদিও আমি কোনও উপায় দেখতে পেলাম যেখানে আপনি কাঠামোটিকে "ফাংশন কম্পোজিশন" প্রশ্নে ডাকতে পারেন, এটি গাণিতিক দিক থেকে শব্দটির খুব অস্বাভাবিক ব্যবহার হিসাবে আমাকে আঘাত করেছে।
ডেভিড জেড

2

@ কার্ল বিলেফেল্ট পয়েন্ট হিসাবে, এটি ম্যাথে ফাংশন রচনা বলে।

প্রোগ্রামিং এ এই জিনিস জন্য কোন প্রযুক্তিগত শব্দ নেই। এবং আমি মনে করি এটি একটি ভাল জিনিস, কারণ এটি নির্দেশ করে যে অপারেশনটি স্বাভাবিক এবং অরথোগোনাল

প্রোগ্রামিং ল্যাঙ্গুয়েজে অরথোগোনালটির অর্থ আপনি এর প্রসঙ্গে পৃথক কোনও নির্দেশনা / ক্রিয়াকলাপ ব্যবহার করতে পারেন । উদাহরণস্বরূপ, আপনি নীচের সমস্ত উপায়ে একটি ফাংশন / পদ্ধতি কল করতে পারেন এবং এটি একই আচরণ করবে ...

f1()(f2(), f3());

x = y + f4();

if ( f5() && !f6() ) doSomething();

f7() = f8() + f9(); // in C++ when a function returns a reference

x = f10() ? f11(f12(f13(x))) : f14();

আপনি উইকিপিডিয়ায় প্রোগ্রামিংয়ে অর্থোগোনালিটি সম্পর্কে আরও পড়তে পারেন এবং স্ট্যাকওভারফ্লোতে এটি নিয়ে একটি প্রশ্ন রয়েছে


এটি orthogonality নির্দেশ করে না তবে তার উপর নির্ভর করে।
রাফেল

+1 আপনি কেবল মানগুলি পার করছেন,
ওপির

1

আমি শর্তগুলির সাথে সত্যই তেমন ভাল নই, তবে কিছুদিন আগে আমি একটি নিবন্ধ পড়েছিলাম যা উচ্চতর ক্রম শব্দটি বোঝায় , এবং এখানে উইকিপিডিয়া প্রতি সংজ্ঞাটির একটি বিমূর্ততা রয়েছে:

http://en.wikipedia.org/wiki/Higher-order_function

গণিত এবং কম্পিউটার বিজ্ঞানে উচ্চতর অর্ডার ফাংশন, কার্যকরী ফর্ম বা ফাংশনাল হ'ল ফাংশন যা নিম্নলিখিতগুলির মধ্যে কমপক্ষে একটি করে:

  • ইনপুট হিসাবে এক বা একাধিক ফাংশন নিন
  • আউটপুট একটি ফাংশন

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

সুতরাং এই ক্ষেত্রে, যেহেতু সেই পরিস্থিতিতে অন্তত একটি ইনপুট / পরম হিসাবে ফাংশন নেয়, তাই এটি একটি উচ্চতর ক্রম হিসাবে বিবেচিত হবে, আমি বিশ্বাস করি।


1
না, উচ্চতর অর্ডার ফাংশনটি কল করার মতো দেখায় func1(func2, func3)। অনুপস্থিত প্রথম বন্ধনী নোট করুন।
ফ্রেডওভারফ্লো

ফ্রেড বোঝার এটি। কারওর কোনও ফাংশনের ঠিকানা এবং অন্যটি সেই ফাংশনটি সম্পাদন করার ফলাফল। যে ইশারা জন্য ধন্যবাদ।
রৌপ্যকালীন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.