লিনকিউ এবং ল্যাম্বডা এক্সপ্রেশনগুলির ব্যবহার কি কম পাঠযোগ্য কোডের দিকে নিয়ে যায়? [বন্ধ]


43

আমি লিন্কে সহকর্মীর সাথে আলোচনা করছি, আমি এখানে অনুলিপি করব:

সহকর্মী: এখানে সৎ হতে দিন। লিনাক সিনট্যাক্স চুষে দেয়। এটি বিভ্রান্তিকর এবং স্বজ্ঞাত নয়।

আমি: ওহ এসো, টি-এসকিউএল এর চেয়ে বেশি বিভ্রান্তি?

সহকর্মী: আহ, হ্যাঁ

আমি: এটির একই বেসিক অংশ রয়েছে, নির্বাচন করুন, কোথায় এবং কোথা থেকে

সহকর্মী: আমার কাছে লিনক হ'ল রিলেশনাল + ওওর জারজ। সহকর্মী: আমাকে ভুল করবেন না - এটি অবিশ্বাস্যভাবে শক্তিশালী, তবে তারা এসকিউএলকে পুনরায় উদ্দেশ্য বস্তুর সংগ্রহগুলি ব্যবহার করতে পুনরায় প্রত্যাবর্তন করেছিল।

আমি মতামত নিয়েছি যে লিনক + লামডা ব্যবহার করা খুব শক্তিশালী (তিনি সম্মত হন), এবং কোডটি পড়া সহজ করে তোলে (তিনি এই বিষয়ে একমত নন):

pickFiles = from f in pickFolder.GetFiles("*.txt")
where ValidAuditFileName.IsMatch(f.Name)
select f;

অথবা

var existing = from s in ActiveRecordLinq.AsQueryable<ScannedEntity>()
where s.FileName == f.FullName && s.DocumentType != "Unknown"
select s;

বা (এখানে ভিবি কোড)

   Dim notVerified = From image In images.AsParallel
     Group Join verifyFile In verifyFolder.GetFiles("*.vfy").AsParallel.Where(
      Function(v) v.Length > 0
      ).AsParallel
   On image.Name.Replace(image.Extension, ".vfy") Equals verifyFile.Name
     Into verifyList = Group
    From verify In verifyList.DefaultIfEmpty
    Where verify Is Nothing
    Select verify

আমার কাছে এটি পরিষ্কার এবং সহজ (বিকল্পগুলির চেয়ে কমপক্ষে সহজ) পড়া সহজ, এতে আপনার মতামত কী?


11
মানুষ, সাধারণভাবে, ঘৃণা পরিবর্তন। একটি বড় শতাংশ এটিকে এত ঘৃণা করে যে তারা আসলে এটিকে ভয় করে।
টনি

9
আসুন এটির মুখোমুখি ... লিনকটি সি # এবং ভিবি.নেটে যুক্ত একটি ডাম্বড ডাউন ফাংশনাল প্রোগ্রামিং সিনট্যাক্স। ল্যাঙ্ক এবং ল্যাম্বডা এক্সপ্রেশনকে বশ করা মূলত "এফপি সাকস" বলছে। আপনার সহকর্মী এটাই বলছেন। আমি মনে করি যে বিতর্কটি অন্য কোথাও ছড়িয়ে পড়েছে।
স্কট হুইটলক

48
এটি কি অন্য কাউকে বিরক্ত করে যে মানুষ "স্বজ্ঞাত" শব্দটির ব্যবহার করার প্রবণতা যখন সত্যই "পরিচিত" বলে?
ল্যারি কোলেম্যান

7
যাইহোক, সি # টিম (এরিক লিপার্ট সহ) লিনক এসকিউএল-র কোনও বন্দর নয় , এটি অন্যান্য বৈশিষ্ট্যগুলির মতো গ্রাউন্ড আপ থেকে তৈরি করা হয়েছিল তা বোঝানোর জন্য তাদের পথ ছেড়ে গেছে । আমার বলতে হবে যে আপনার সহকর্মী লুডাইটাইট।
অ্যারোনআউট

16
কি এটা এর মূল্য জন্য: আমি শুধু আমার স্ত্রী (অফিস প্রশাসক - শূন্য ব্যবহারিক প্রোগ্রামিং অভিজ্ঞতা পাশে) ছিল aaronaught এর 3 উদাহরণ তাকান এবং linq এবং ল্যামডা উদাহরণ কয়েক অভিপ্রায় অর্থোদ্ধারে পেরেছিলেন পর্যন্ত ঐতিহ্যগত অনুজ্ঞাসূচক উদাহরণ চেয়ে আরো সহজে।
স্টিভেন এভার্স

উত্তর:


73

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

লিনক আপনাকে কোডটি লিখতে সক্ষম করে যা উদ্দেশ্যটি প্রকাশ করে , প্রক্রিয়াটি নয়

আপনি আমাকে বলুন কোনটি পড়া সহজ is এই:

IEnumerable<Customer> GetVipCustomers(IEnumerable<Customer> source)
{
    List<Customer> results = new List<Customer>();
    foreach (Customer c in source)
    {
        if (c.FirstName == "Aaron")
        {
            results.Add(c);
        }
    }
    results.Sort(new LastNameComparer());
    return results;
}

class LastNameComparer : IComparer<Customer>
{
    public int Compare(Customer a, Customer b)
    {
        return x.LastName.CompareTo(b.LastName);
    }
}

অথবা এটা?

IEnumerable<Customer> GetVipCustomers(IEnumerable<Customer> source)
{
    return from c in source
           where c.FirstName == "Aaron"
           orderby c.LastName
           select c;
}

এই এমনকি?

IEnumerable<Customer> GetVipCustomers(IEnumerable<Customer> source)
{
    return source.Where(c => c.FirstName == "Aaron").OrderBy(c => c.LastName);
}

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

আপনার সহকর্মী তিনি যা চান বলতে পারেন; ব্যক্তিগতভাবে, আমি মনে করি লিনক আমার কোড পাঠযোগ্যতা অপরিমিতভাবে উন্নত করেছে ।

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


6
+1 যদি আপনি লিনিক পছন্দ না করেন এটি সম্ভবত কারণ "আপনি এটি ঠিক করছেন না" :)
ডার্কনাইট

1
Linq is purely object-orientedএই জন্য +1। আমাদের টিমের স্টাইল গাইডটি ক্যোয়ারী সিনট্যাক্সের উপরে সাবলীল সিনট্যাক্স ব্যবহার করে এই কারণেই। আমি দেখতে পেয়েছি যে সি-জাতীয় ভাষায় স্বীকৃতি দেওয়ার জন্য ব্যবহৃত ব্যক্তির কাছে লিঙ্কটির ওও প্রকৃতি আরও স্পষ্ট করে তোলে।
এসবিআই

1
আমি জানি পোস্টটি 7 বছরের পুরনো। তবে এখানে প্রশ্নটি রয়েছে: লিনকের সাথে দেখা করার আগে আপনি কি আপনার প্রধান সরঞ্জাম হিসাবে কার্যকরী ভাষা ব্যবহার করেছিলেন?
সের্গেই.কুইক্সোটিক্যাক্সিস.ভানভ

4
একদম স্পষ্টতই আমি নীচু লুপটিকে পছন্দ করি, কারণ তখন আমি ডানদিকে দেখি যেখানে আমরা NULL- রেফারেন্স ব্যতিক্রম করতে পারি এবং কীভাবে নাল পরিচালনা করা হয়, এবং এটি পিছিয়ে দেওয়া কার্যকর নয় যা ডিবাগিংকে শক্ত করে তোলে, এবং এটি এন তালিকা তৈরি করে না পাশাপাশি, তাই লুপটি আরও কার্যকর।
Quandary

1
@Aaronaught, আপনি বাছাই অপসারণ এবং পদ্ধতিগত কোড পুনরায় ফরম্যাট তাহলে Horstmann শৈলী , আমি বলব এটা চেয়ে বেশি পাঠযোগ্য LINQ সংস্করণ। এবং একক দায়িত্বের নীতি অনুসারে, বাছাই করা আসলে অন্তর্ভুক্ত হয় না GetVipCustomers(), এটির নাম অনুসারে, কেবলমাত্র ভিআইপি গ্রাহকদের সংগ্রহ করা হবে স্বেচ্ছাসেবী ক্রমে। জন্য বিরল ক্ষেত্রে যেখানে অর্ডার গুরুত্বপূর্ণ, যেমন পর্দায় আউটপুট আহ্বায়ক সাজানোর সংগ্রহ করা যাক।
Ant_222

69

সহকর্মী: এখানে সৎ হতে দিন। লিনাক সিনট্যাক্স চুষে দেয়। এটি বিভ্রান্তিকর এবং স্বজ্ঞাত নয়।

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

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

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

প্রায়শই যা "স্বজ্ঞাত" তা কেবল পরিচিতির বিষয়। "নির্বাচিত" ধারাটি দিয়ে আমার প্রশ্নগুলি শুরু করার আগে লিনকিউতে কয়েক মাস সময় লেগেছিল । এখন এটি দ্বিতীয় প্রকৃতি এবং এসকিউএল ক্রমটি উদ্ভট বলে মনে হচ্ছে।

এটি যা! স্কোপিংয়ের নিয়মগুলি সমস্ত এসকিউএল-এ মিশ্রিত হয়। আপনার সহকর্মীর দিকে আপনি যে বিষয়টি উল্লেখ করতে চাইতে পারেন তা হ'ল লিনিক্যুটি সাবধানতার সাথে তৈরি করা হয়েছিল যাতে (1) ভেরিয়েবল এবং স্কোপগুলির পরিচিতি বাম থেকে ডান (*) হয় এবং (2) পৃষ্ঠায় কোয়েরিটি ক্রমটি প্রদর্শিত হয় যে ক্রমে এটি কার্যকর করা হয়। অর্থাৎ, যখন আপনি বলবেন

from c in customers where c.City == "London" select c.Name

সি বামদিকে স্কোপে প্রদর্শিত হবে এবং ডান দিক দিয়ে স্কোপে থাকবে। এবং জিনিসগুলি যে ক্রমে ঘটে তা হ'ল প্রথমে "গ্রাহক" মূল্যায়ন করা হয়। তারপরে ক্রমটি ফিল্টার করার জন্য "যেখানে" মূল্যায়ন করা হয়। তারপরে ফিল্টারযুক্ত ক্রমটি "নির্বাচন করুন" দ্বারা প্রজেক্ট করা হবে।

এসকিউএল এর এই সম্পত্তি নেই। যদি তুমি বল

SELECT Name FROM Customers WHERE City = 'London'

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


(*) স্কিনিংয়ের নিয়মগুলি জয়েন ক্লজ সহ লিনকিউতে কিছুটা অদ্ভুত। তবে এগুলি বাদে স্কোপগুলি সুন্দরভাবে বাসা বাঁধে।


5
নিতপিক: জার্মান ভাষায়, "ডের হুন্ড ফ্রাইস্ট ডাস ফ্লাইশ" আসলে ইংরেজিতে একই আদেশ, "কুকুরটি মাংস খায়" :) এর বাইরে, আমি লিনকিউ ক্যোয়ারির বাক্য গঠনটি খুব পঠনযোগ্য দেখতে পেলাম যখন আমি বুঝতে পারলাম যে এটি এসকিউএল নয়
মাইকেল স্টাম

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

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

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

8
@ কাইলএম: অবশ্যই; ব্যবহারযোগ্যতা লিনকিউ ডিজাইনের একটি খুব গুরুত্বপূর্ণ বিষয় ছিল। বিশেষত, উত্পাদনশীলতার সরঞ্জামগুলিতে আধ্যাত্মিক হওয়া মূল বিষয় ছিল। কারণ লাইনকিউ ক্যোয়ারিতে লেখার জন্য বাম দিক থেকে স্কোপিং প্রবাহিত হয়, আপনি c.আইডিই টাইপ করার সময় ইতিমধ্যে টাইপটি জানেন cএবং আপনাকে ইন্টেলিসেন্স দিতে পারেন। লিনকিউতে আপনি "গ্রাহকদের মধ্যে সি থেকে যেখানে সি।" এবং বুম, আপনি সদস্যদের তালিকাভুক্ত করে ইন্টেলিসেন্স আপনাকে সহায়তা করবে Customer। এসকিউএল-এ আপনি "গ্রাহকদের কাছ থেকে নাম নির্বাচন করুন" টাইপ করার সময় কোনও নাম আইডির সাহায্য পেতে পারেন না যে "নাম" একটি ভাল পছন্দ কারণ আপনি name আগে টাইপ করেছিলেনcustomers
এরিক লিপার্ট

22

প্রোগ্রামিং জগতের অন্য যে কোনও কিছুর মতো, আপনাকে সিনট্যাক্সটি ব্যবহার করতে হবে এবং তারপরে এটি (সম্ভবত) পড়া সহজ হয়।

প্রোগ্রামিং জগতের অন্য যে কোনও কিছুর মতো স্প্যাগেটি কোড বা অন্যান্য আপত্তিজনক সম্ভাবনা রয়েছে।

প্রোগ্রামিং জগতের অন্য যে কোনও কিছুর মতো আপনিও এটি এই উপায়ে বা অন্য কোনও উপায়ে করতে পারেন।

প্রোগ্রামিং জগতের অন্য যে কোনও কিছুর মতো, আপনার মাইলেজও আলাদা হতে পারে।


6

আমি একটি মন্তব্য / মন্তব্য দেখেছি যেখানে এটি লিঙ্ক / ল্যাম্বডা সম্পর্কিত - - "আপনার কম্পিউটারে পঠনযোগ্য নয় বরং মানুষের কাছে পাঠযোগ্য কোড লিখুন" - এর পংক্তিতে কিছু বলেছিল।

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

আমি বিবিধ বিবিধ ব্যবসায়িক খাতে উত্পাদন মানের সিস্টেম এবং পরিষেবাদি সরবরাহের জন্য আমার কোডটিকে পাঠযোগ্য এবং পুনরায় ব্যবহারযোগ্য হিসাবে তৈরি করতে এবং জিওএফ ডিজাইনের অনেকগুলি নীতি গ্রহণ করার জন্য নিজেকে গর্বিত করেছি।

ল্যাম্বডা অভিব্যক্তিটির সাথে আমি প্রথমবার মুখোমুখি হয়ে ভাবলাম: "এ কী সে!!?!" এটি তাত্ক্ষণিকভাবে আমার পরিচিত (এবং তাই আরামদায়ক) সুস্পষ্ট ঘোষণামূলক সিনট্যাক্সের পাল্টা স্বজ্ঞাত ছিল । কনিষ্ঠ <5 বছরের চাকরির ছেলেরা তবে এটিকে এমনভাবে গুটিয়ে রাখল যেন স্বর্গ থেকে মান্না হয়!

এটি কারণ বছরের পর বছর ধরে কম্পিউটারের মতো চিন্তাভাবনা (সিনট্যাক্টিক অর্থে) খুব সহজেই সরাসরি কোডিং সিনট্যাক্স (ভাষা নির্বিশেষে) অনুবাদ করে। যখন আপনার কাছে 20+ yrs (আমার ক্ষেত্রে 30+) এর জন্য গণনার মানসিকতা রয়েছে তখন আপনাকে প্রশংসা করতে হবে যে ল্যাম্বডা এক্সপ্রেশনটির প্রাথমিক সিনট্যাকটিক শক সহজেই ভয় এবং অবিশ্বাসে অনুবাদ করতে পারে।

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

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

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

সুতরাং যখন কেউ বলে যে তারা "ল্যাম্বডা পাবে না?" বা লিনকিউ সিনট্যাক্স, লুডাইট ব্র্যান্ড করার পরিবর্তে তাদের অন্তর্নিহিত নীতিগুলি বুঝতে সহায়তা করার চেষ্টা করে। তাদের সর্বোপরি আমার মতো একটি "পুরাতন স্কুল" ব্যাকগ্রাউন্ড থাকতে পারে।


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

4

ল্যাম্বডা এক্সপ্রেশনগুলি যদি খুব দীর্ঘ হয় তবে কম পাঠযোগ্য কোডের দিকে নিয়ে যায়। তবে এটি অনেকগুলি নেস্টেড লুপগুলির চেয়ে অনেক ভাল ।

দুজনের মিশ্রণ দিয়ে এটি আরও ভাল ।

এটি দ্রুত (যদি আপনার এটি দ্রুত হওয়া দরকার) বা পড়া সহজ হয় তবে ল্যাম্বডায় এটি লিখুন।


হ্যাঁ, তবে কী এটি লিঙ্ক / লামদা পড়তে সহজ নয় ?
ব্ল্যাকইস

দুঃখিত, বিকল্পের চেয়ে পড়া সহজ নয়।
ব্ল্যাকইস

1

আমি মনে করি এটি বেশিরভাগ ক্ষেত্রে (খুব উদ্ভট কিছু করার ব্যতীত) উপর নির্ভর করে যদি আপনি "পাঠযোগ্য" বলতে কী বোঝাচ্ছেন যে কেউ কী চলছে বা তারা যদি খুব সহজেই সমস্ত ছোট ছোট বিবরণ সন্ধান করতে পারে তবে।

আমি মনে করি লিঙ্কটি পূর্বের সাথে সহায়তা করে, তবে প্রায়শই (বিশেষত ডিবাগিংয়ের সময়) পরবর্তীকে ব্যথা করে।

আইএমএইচওও যখন আমি কোডটি দেখছি তখন আমি পূর্বের সাথে অপরিচিত তখনকার চেয়ে অনেক বেশি গুরুত্বপূর্ণ, তাই আমি এটিকে আরও বেশি পঠনযোগ্য বলে মনে করি।


ভাল যুক্তি. পরেরটি সাধারণত ভাল ইউনিট পরীক্ষার দ্বারা আচ্ছাদিত হয়।
স্কট হুইটলক

সুতরাং আপনি কী ভাবেন যে লিনাকের মূল্যায়নের অভ্যন্তরীণগুলি সমস্ত বিবরণ সন্ধান করা কঠিন করে তোলে? আপনি কখন হতে পারেন তার একটি উদাহরণ সরবরাহ করতে পারেন?
ব্ল্যাকইস

3
@David: Linq এক্সপ্রেশন না শুধু অলস মূল্যায়ন, তারা হয় এক্সপ্রেশন । লিনাকের এক্সপ্রেশনটির প্রাপ্ত কোডটি প্রকৃতপক্ষে ভাবটি সংশোধন করতে পারে তাই এটি এস-এক্সপ্রেশনগুলিতে কাজ করা লিস্প ম্যাক্রোর মতো সম্পূর্ণ আলাদা কিছু করে। উদাহরণস্বরূপ, এসকিউএল-তে লিনাকের সাথে কাজ করার সময় এটি প্রকৃতপক্ষে ভাবটি গ্রহণ করে where e.FirstName == "John"এবং এটি এসকিউএল কোয়েরিতে অনুবাদ করে! এটি অবিচলিত (তবে পার্সড) এক্সপ্রেশনটি দেখে এটি দেখায় যে এটি FirstNameস্থায়ী সত্তার নামে ডাকা কোনও সম্পত্তির সাথে তুলনা করা হয় এবং এটি একটি স্ট্রিং ইত্যাদির সাথে তুলনা করে There এখানে অনেক কিছুই চলছে।
স্কট হুইটলক

@ ডেভিড সাধারণত আপনি নিজের বিরুদ্ধে লিনক ব্যবহার শুরু না করা অবধি বিশদগুলি খুঁজে পাওয়া মুশকিল। এটির একটি "সাধারণ" উদাহরণ যা আমাকে আমার মাথা ঘিরে রাখতে দীর্ঘ সময় নিয়েছিল তা হ'ল : বাগসকোয়াশ.ব্লগস্পট.com / 2008 / 07 / y-combinator- এবং-linq.html তবে কয়েকটিতে আরও অনেক প্রয়োজনীয় উদাহরণ রয়েছে গতিশীল, ডায়নামিকবজেক্ট এবং আইডিনামিকমেটাঅবজেক্টপ্রোভিডার অঞ্চলে লোকেরা প্রকাশের সাহায্যে কী করছে of যেখানে আপনি লিনাক কী তা নিয়ে বিতর্কযোগ্য হিসাবে লাইনটি আঁকেন তবে স্কট পয়েন্ট হিসাবে যে সমস্ত জিনিস লিন্কে / তে পাওয়া যায় কারণ লিনক একই অভিব্যক্তি গাছ ব্যবহার করে।
বিল

@ ঠিক আছে, আমি আপনাকে এটাকে শক্ত করে দেব, তবে ওয়াই-কম্বিনেটর এবং হাই-অর্ডার ফাংশনগুলি আমাদের বেশিরভাগ মাথায় আঘাত করতে চলেছে, এটি পুনরাবৃত্তির মতো, আপনি এটি পেয়েছেন বা পাবেন না। এর পুনরাবৃত্তিমূলক বাস্তবায়ন কি পড়তে সহজ (যদি আপনি কোনও একটিই জানতেন না)?
ব্ল্যাকইস

1

আমি লিনকিউ সিনট্যাক্সটি স্বজ্ঞাত এবং সহজেই পড়তে পেলাম, বিশেষত যেহেতু তারা শুরুতে এফআরএম রেখেছিল যেখানে এটি এসকিউএলের মতো মাঝখানে পরিবর্তে আসে belongs কিন্তু আইএমও ল্যাম্বডাস বিভ্রান্ত করছে এবং কোডটি পড়তে আরও কঠিন করে তুলছে।


লম্বাডাস কেন বিভ্রান্ত করছে বলে আপনি মনে করেন? এটা কি টাইপ অনুমান?
কেওসপ্যান্ডিয়ন

1
@ চাওসপ্যান্ডিয়ন: প্রথমে টাইপ অনুমান এবং দ্বিতীয়টি, প্রতীক। একটি = এবং এ> একসাথে রাখা>> এর মতো দেখায় যে কেউ ভুল করে পিছনের দিকে লিখেছিল এবং এটি আমার মস্তিষ্ককে লুপের জন্য ফেলে দেয়।
ম্যাসন হুইলারের

@ ম্যাসন - আপনি কি হাস্কেল ( \x -> x * x) বা এফ # ( fun x -> x * x) এর বাক্য গঠনটি পছন্দ করেন ?
কেওসপ্যান্ডিয়ন

@ চাওসপ্যান্ডিয়ন: না, বিশেষভাবে নয়। লাম্বদাস লিখিতভাবে দ্রুত হতে পারে তবে তাদের পার্স করা আমার পক্ষে কঠিন মনে হয়, বিশেষত যখন তারা জটিলতায় অ-তুচ্ছ হন। আপনার উদাহরণগুলি তেমন খারাপ নয়, তবে সেগুলি আরও খারাপ হওয়ার প্রবণতা।
ম্যাসন হুইলারের

6
@ মেসন: মনে হচ্ছে আপনি প্রথমে লামদাসের ধারণার প্রতি আপত্তি না দিয়ে লামদাসকে আপত্তিজনক বলে আপত্তি করছেন।
আনন

1

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


0

এটা নির্ভর করে. স্পষ্টতই, টি-এসকিউএল স্বতন্ত্রভাবে কিছু ডিবি-রিলেশনাল সমাধান সরবরাহ করে। স্পষ্টতই লিনকুই কিছু ওও সমাধান সরবরাহ করে।

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

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

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

from c in categories
join p in products on c equals p.Category into ps
from p in ps.DefaultIfEmpty()

যদি আপনি মনে করেন যে এটি স্বজ্ঞাত, আপনার কাছে আরও শক্তি। ;)


-4

লিনককে সাফ করার কারণ সম্ভবত রয়েছে, এই পাঠ্যপুস্তকের উদাহরণগুলির পরিবর্তে বাস্তব বিশ্বের উদাহরণ দেওয়ার চেষ্টা করুন।

লিনক্লামড্যাথিংসে এই ফাংশনটি দেখানোর চেষ্টা করুন এবং আপনি দেখতে পাবেন যে সমস্ত সৌন্দর্য চলে গেছে, যদিও ক্লাসিক উপায়টি পাঠযোগ্য read মুলতুবি কার্যকর কার্যকরকরণ এবং ব্রেকপয়েন্ট নির্ধারণের কথা উল্লেখ না করা।

সত্যটি হল লিনক্ল্যাম্বাডাটিংসগুলি কয়েকটি ক্ষেত্রে খুব কার্যকর এবং তারা যে সমস্ত নিম্ফটি অবজেক্টের দিকে মনোযোগ দিতে পারে তা আপনি ভাবেননি

    public IList<Customer> GetVipCustomers(IList<Customer> source, int maxCount)
    {
        var results = new SortedList<string,Customer>();

        foreach (Customer c in source)
        {
            if (maxCount == results.Count)
                break;

            if (c.IsVip && c.FirstName== "Aaron" || c.SecondName== "Aaron")
                results.Add(c.LastName, c);
        }

        return results.Values;
    }

6
আমি মনে করি এটি source.Where(c => c.IsVip && c.FirstName == "Aaron" || c.SecondName == "Aaron").Take(maxCount).OrderBy(d => d.LastName);পড়তে আপনার পক্ষে শক্ত তবে এটি আমার পক্ষে ভুল হয়েছে।)
জে কে।

1
আপনি কীভাবে এগুলি পাঠ্যপুস্তকের উদাহরণ হিসাবে বিবেচনা করেছেন? এটি হ'ল প্রোডাকশন ইউজ কোড। আপনি যদি আপনার ক্লাসিক "পঠনযোগ্য" কোড এবং লিনক / লামদা সংস্করণ উভয়ই এটির পরিবর্তনের প্রত্যাশার পরিবর্তে তুলনা করার জন্য সরবরাহ করেন তবে এটি সহায়তা করবে।
ব্ল্যাকইস

3
আপনি লিনকিউ সম্পর্কে অভিযোগ করার জন্য বিশেষভাবে নিবন্ধন করেছেন?
কেচালাক্স

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