ব্যবসায় সফ্টওয়্যারগুলিতে ল্যাম্বদা ফাংশন \ পদ্ধতিগুলি ব্যবহার করা কি গ্রহণযোগ্য?


26

আমি এখানে পোস্টগুলি লক্ষ্য করেছি যে প্রতিনিধিদের ব্যবহার demonst লাম্বদা ফাংশনগুলির মধ্যবর্তী ধারণাটির গর্তটি সমাধানের জন্য অনেকগুলি পুনরাবৃত্তি ছাড়াই ব্যবহার করা হয়েছে: http://www.markhneedham.com/blog/2009/04/04/functional-c যে সময়টাতে-গহ্বর-ইন-মধ্যম প্যাটার্ন /

সমস্যাটি মনে হয় যে জুনিয়র বিকাশকারীরা এবং অন্যরা প্রয়োজনীয়ভাবে ফাংশন পয়েন্টার \ প্রতিনিধি \ ল্যাম্বদা ফাংশন ধারণাটি কী তা বোঝে না, যা কোড পড়া (এবং সম্ভবত ডিবাগিং) করা আরও কঠিন করে।

ব্যবসায় সফ্টওয়্যার লেখার ক্ষেত্রে বিশেষত ছোট দল বা একমাত্র বিকাশকারী দোকানগুলিতে আমাদের এই সরঞ্জামটির ব্যবহার এড়ানো বা গুরুতরভাবে সীমাবদ্ধ করা উচিত?

অথবা উপযুক্ত মন্তব্য সহ এটি ব্যবহার করা গ্রহণযোগ্য এবং আশা করা যায় যে আমি যখন আর থাকি না তখন পরবর্তী বিকাশকারী ল্যাম্বদা ফাংশনগুলি বুঝতে বা শিখতে পারে?


10
রুবিতে, ল্যাম্বডাস (নিজেদের হিসাবে এবং ব্লকের আকারে) একটি মূল ভাষা ধারণা। এগুলি Arrayক্লাস থেকে জটিল ওআরএম পর্যন্ত সর্বত্র ব্যবহৃত হয় । ভাল, কেউ অভিযোগ করে না।
হোয়াইটকায়ার্ক

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

3
যদি কোনও জুনিয়র কোডার ল্যাম্বডাস ব্যবহার করতে চান তবে পুরানো সি ++ হ্যাকারগুলি এটি পাচ্ছে না তা নিয়ে উদ্বিগ্ন? ল্যাম্বডাস, বা ... আলগোরিদিমগুলির মতো ব্যবসায়ের সফ্টওয়্যারটিতে ব্যবহার করা উচিত।
কাজ

10
যদি এটি এই মনোভাবের জন্য থাকত তবে আমরা এখনও দুটি একরঙা মনিটরের ঘর্ষণ করে আগুন জ্বালাতাম।
sbi

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

উত্তর:


23

সমস্যাটি মনে হচ্ছে জুনিয়র বিকাশকারীরা এবং অন্যরা প্রয়োজনীয়ভাবে বুঝতে পারেন না যে ফাংশন পয়েন্টার \ প্রতিনিধি \ ল্যাম্বদা ফাংশন ধারণাটি কী

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

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

একজন বিকাশকারীর জানা উচিত যে তারা জুনিয়র বা না সে ভাষাটি কীভাবে ব্যবহার করবেন। যদি তারা তা না করে তবে তাদের গুলি চালান এবং এমন কাউকে খুঁজে নিন যিনি করেন বা তাদের প্রশিক্ষণ দিন যাতে তারা তা করে।


11
ভাল, আমি
ল্যাম্বডাস

49

হ্যাঁ, সেগুলি ব্যবহার করুন।

আমি একটি জুনিয়র বিকাশকারী, এবং আমি ল্যাম্বডাসকে জানি / বুঝতে পারি (এবং অন্যান্য ধারণাগুলি আপনি উল্লেখ করেছেন)। জুনিয়র বিকাশকারীকে খুব স্বল্প সময়ে এই সমস্ত ধারণাগুলি শিখতে বাধা দেওয়ার মতো কিছু আমি করতে পারি না। সফটওয়্যার বিকাশের অনেকগুলি ক্ষেত্রে যখন জুনিয়রদের অভিজ্ঞতা / দক্ষতার পরিমাণ নাও থাকতে পারে তবে লাম্বডাসের মতো ধারণাগুলি ঠিক তত সহজেই প্রোগ্রামিং এবং একটি ইন্টারনেট সংযোগের বুনিয়াদি বোঝার দ্বারা যে কেউ বুঝতে পারে। এছাড়াও, এটি অদ্ভুত বলে মনে হচ্ছে যে আপনি ল্যাম্বদাসকে উদাহরণ হিসাবে বেছে নিয়েছেন, আপনি যদি সি # ব্যবহার করছেন তবে বিবেচনা করে আপনি সম্ভবত জুনিয়র বিকাশকারীদের উপর ল্যাম্বডাস শিখতে শুরু করার মতো এতটা মাথাও না নিয়েছেন (এগুলি কেবল ২০০৮ সালে প্রবর্তিত হয়েছিল, যদি আমি সঠিকভাবে মনে রাখবেন)।

সংক্ষেপে, আমাদের নওফাইটদের জন্য আপনার কোডটি বোবা করার দরকার নেই। আমরা ঠিক থাকব, এবং আপনি যে সর্বোত্তম সম্ভাবনা বাস্তবায়ন করতে পারেন তার পক্ষে কাজ করতে পছন্দ করবেন। :)


4
আমরা না থাকলে, নিওফাইটরা ধীরে ধীরে। সেক্ষেত্রে দয়া করে আমাদের জন্য কোডটি নিস্তব্ধ করুন, বা ... আমাদের প্রথম স্থানে নিয়োগ করবেন না।
কাজ

19
@ জোব - আমার মনে হয় আমাদের খালি খোলামেলা হতে হবে এবং বলতে হবে যে যদি কোনও জুনিয়র ল্যাম্বডা সিনট্যাক্সটি কয়েক দিন দেওয়া (বেশ উদার হয়ে উঠতে) বুঝতে না পারে তবে এটি সত্যিই ভাড়া নেওয়ার বিষয় হতে পারে।
মরগান হের্লোকার

2
নিওফিটদের স্ট্যাকওভারফ্লো . com/ জিজ্ঞাসাগুলি / 2167360/ … তে নির্দেশ করুন ... এই সময়ে আমার প্রশ্নের এটি একটি দুর্দান্ত উত্তর ছিল এবং লিনক এবং ল্যাম্বডাস সম্পর্কে আমার বোঝার স্প্রিংবোর্ডকে সহায়তা করেছিল।
IAbstract

20

যদি তারা আপনার সমস্যার বোধগম্য সমাধান হয় তবে আপনার সেগুলি ব্যবহার করা উচিত।

কৃত্রিমভাবে নিজেকে সীমাবদ্ধ রাখবেন না - আপনার পক্ষে খারাপ মানের কোডটি বজায় রাখা শক্ত হওয়ার সম্ভাবনা বেশি।

কোডটি যদি যথাযথ মন্তব্যের সাথে ভালভাবে লেখা থাকে তবে নিম্নলিখিত অনুসরণকারীরা আপনার কাছ থেকে শিখতে সক্ষম হবে ।


13

একটি ব্লকের শীর্ষে মন্তব্যগুলিতে এমএসডিএন ডকুমেন্টেশনের একটি লিঙ্ক রাখুন যা এটি ব্যবহার করে তারপরে এগিয়ে যান। আপনি নতুন / জটিল প্রযুক্তি ব্যবহার করতে ভয় পাবেন না, এটি বিকাশকারীদের কাজের অংশ যা তারা জানেন না সেগুলি শেখার জন্য।


14
একটি লিঙ্ক কি এমনকি প্রয়োজনীয়?
মরগান হের্লোকার

3
প্রতিবার ল্যাম্বডা ব্যবহার করার সময় আপনি কি সত্যিই একটি লিঙ্ক রাখবেন?
ফেডেরিকো ক্লেজ কুলোকা

জটিলতা শত্রু ...
রবার্ট এস সিয়াসসিও

11

সমস্যাটি মনে হচ্ছে জুনিয়র বিকাশকারীরা এবং অন্যরা প্রয়োজনীয়ভাবে বুঝতে পারেন না যে ফাংশন পয়েন্টার \ প্রতিনিধি \ ল্যাম্বদা ফাংশন ধারণাটি কী

তারপরে তাদের এগুলি শিখতে হবে। সময়কাল।

  1. এটি সি # এর কোনও গুপ্ত কোণ নয় । অনেকগুলি। নেট লাইব্রেরি ব্যবহার করার জন্য আপনাকে এগুলি বুঝতে হবে।
  2. এটি সাধারণভাবে কোনও গুরূত্বপূর্ণ ভাষার বিষয় নয়। কার্যত জনপ্রিয় জনপ্রিয় প্রতিটি ভাষাতে ফাংশন পয়েন্টারটির কিছু স্বাদ রয়েছে এবং বেশিরভাগ জাভা এবং সি ++ এর ক্ষেত্রে (বা শীঘ্রই পাচ্ছেন)।

তাদের এটি ব্যাখ্যা করতে কয়েক মিনিট সময় নিন। এটা কঠিন না.


5

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

ফাংশন পয়েন্টার \ প্রতিনিধি \ ল্যাম্বদা ফাংশন ধারণা

এটি লক্ষ করা উচিত যে সেগুলি তিনটি ভিন্ন জিনিস।


3

দুটি সম্ভাব্য পরিস্থিতি:

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

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


2

এখানেই ধারাবাহিকতা অনেক সাহায্য করতে পারে। আপনি যদি এটি একই স্টাইল ইত্যাদির সাথে ধারাবাহিকভাবে ব্যবহার করেন তবে পাঠকদের কেবল একবার এটি শিখতে হবে এবং তারপরে তারা এটিকে সর্বত্র স্বীকৃতি দেবে।

এছাড়াও, এটি কমপক্ষে প্রথমে স্পষ্ট হতে সহায়তা করতে পারে। উদাহরণস্বরূপ, এই দুটি সমতুল্য:

doSomething(() => someMethod());

doSomething(someMethod);

private void doSomething(Action someAction) { ... }
private void someMethod() { ... }

... তবে প্রথম ক্ষেত্রে এটি সুস্পষ্ট, আপনি যদি ল্যাম্বদা সিনট্যাক্সটি জানেন তবে আমরা কী করছি। এমনকি যদি আপনি ল্যাম্বদা সিনট্যাক্সটি না জানেন তবে এটি স্পষ্টতই আপনি নতুন কিছু দেখছেন, এবং আপনাকে এটি সন্ধান করতে হবে। দ্বিতীয় ক্ষেত্রে, দেখতে একরকম মনে হচ্ছে আপনি একটি ভেরিয়েবল পাস করছেন।

আমি জানি যে রিশার্পার আপনাকে এটি দ্বিতীয় ক্ষেত্রে পরিবর্তন করার জন্য চাপ দেয় তবে আমি অবাক হয়েছি যদি এটি সর্বদা একটি ভাল ধারণা। দ্বিতীয় ক্ষেত্রে, আপনাকে জানতে হবে যে এটি doSomethingগ্রহণ করে Action


1
আমি দ্বিতীয়টি ব্যবহার করব, আমি দেখতে পাচ্ছি যে কিছু ম্যাথোড passedুকে গেছে এবং কোনওটি ম্যাথোদ কী তা নির্ধারণ করার জন্য, আমি ডান ক্লিক করব এবং ডিফনে যেতে চাই। দেখুন এটি একটি ফাংশন / পদ্ধতি এবং এটি যে কোনও প্রোগ্রামারকে বুঝতে হবে।
ক্যাফগীক

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

"দ্বিতীয় ক্ষেত্রে, আপনাকে জানতে হবে যে এটি doSomethingগ্রহণ করে Action।" এবং কিভাবে থাকার থেকে কোন ভিন্ন জানাতে চাই যে, যে functionWithNameThatDoesNotSpecifyItsArgumentTypesএকটি লাগে ObjectOfSomeType? প্রকৃতপক্ষে, ভাষাগুলিতে যেখানে ফাংশনগুলি সত্য প্রথম শ্রেণীর অবজেক্ট, এটি কোনও আলাদা নয়।
জাব

1

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

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


1
itemsList.ForEach(item => DoAction(item));
...
public void DoAction(Item item) {
  //...do various things here...
}

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

আপনার কেবল এইভাবে ডোএকশন কল করা উচিত:

itemsList.ForEach(DoAction);

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


-1

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

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

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