লিনকিউ স্টাইল পছন্দ [বন্ধ]


21

আমি প্রতিদিনের প্রোগ্রামিংয়ে লিনকিউ ব্যবহার করতে এসেছি। আসলে, আমি খুব কমই, যদি কখনও হয় তবে একটি স্পষ্ট লুপ ব্যবহার করি। তবে, আমি পেয়েছি যে আমি এসকিউএলটিকে সিনট্যাক্সের মতো আর ব্যবহার করি না। আমি কেবল এক্সটেনশন ফাংশন ব্যবহার করি। তবে বরং বলছেন:

from x in y select datatransform where filter 

আমি ব্যবহার করি:

x.Where(c => filter).Select(c => datatransform)

আপনি লিনকিউ এর কোন স্টাইলটি পছন্দ করেন এবং আপনার দলের অন্যরা কি স্বাচ্ছন্দ্য বোধ করেন?


5
খেয়াল করার মতো বিষয় যে অফিশিয়ালি এমএসের অবস্থানটি হল ক্যোরিয়াম সিনট্যাক্সটি পছন্দনীয়।
R0MANARMY

1
শেষ পর্যন্ত তাতে কিছু আসে যায় না। কী বিষয়টি কোডটি বোধগম্য। একটি ফর্ম একটি ক্ষেত্রে ভাল হতে পারে, অন্য একটি ভিন্ন ক্ষেত্রে। সুতরাং যে সময়ে সময়ে উপযুক্ত উপযুক্ত ব্যবহার করুন।
ক্রিসএফ

আমি বিশ্বাস করি যে আপনার দ্বিতীয় উদাহরণটিকে ল্যাম্বদা সিনট্যাক্স বলা হয়, যা আমি 95% সময় ব্যবহার করি। অন্যান্য 5% আমি কোয়েরি সিনট্যাক্সটি ব্যবহার করি যা যখন আমি যোগদান করি তখন আমি ল্যাম্বডা সিনট্যাক্সের সাথে পরিবর্তিত হওয়ার চেষ্টা করি তবে অন্যরা যেমন ইঙ্গিত করে যে এটি অগোছালো হয়ে যায়।
দ্য মফিন ম্যান

উত্তর:


26

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

var products = from p in Products
               where p.StockOnHand == 0
               select p;

প্রতি:

var products = Products.Where(p => p.StockOnHand == 0);

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

var itemInfo = InventoryItems
    .Where(r => r.ItemInfo is GeneralMerchInfo)
    .Select(r => r.ItemInfo)
    .Cast<GeneralMerchInfo>()
    .FirstOrDefault(r => r.Xref == xref);

আমার জ্ঞানের কাছে, ক্যোয়ারী সিনট্যাক্স ব্যবহার করে এই ক্যোয়ারীটির প্রতিলিপি তৈরি করতে (যতটা সম্ভব সম্ভব) এটি দেখতে এটির মতো লাগবে:

var itemInfo = (from r in InventoryItems
                where r.ItemInfo is GeneralMerchInfo
                select r.ItemInfo)
                .Cast<GeneralMerchInfo>()
                .FirstOrDefault(r => r.Xref == xref);

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

// projects an InventoryItem collection with total stock on hand for each GSItem
inventoryItems = repository.GSItems
    .Select(gsItem => new InventoryItem() {
        GSItem = gsItem,
        StockOnHand = repository.InventoryItems
            .Where(inventoryItem => inventoryItem.GSItem.GSNumber == gsItem.GSNumber)
            .Sum(r => r.StockOnHand)
     });

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


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

2
কেবল রেকর্ডের জন্য আপনি সিলেক্ট করতে পারেন (x => x.ItemInfo) এন * 2 মি এর পরিবর্তে আমি মনে করি)। তবে আপনি সম্পূর্ণরূপে ঠিক বলেছেন, লাম্বদা সিনট্যাক্সটি পাঠযোগ্যতার দিক থেকে অনেক ভাল।
এড জেমস

16

আমি কার্যকরী বাক্য গঠনটিকে চোখে আরও আনন্দিত মনে করি। একমাত্র ব্যতিক্রম হ'ল যদি আমাকে আরও দুটি সেটে যোগ দিতে হয়। যোগদান () খুব দ্রুত পাগল হয়ে যায়।


সম্মত ... আমি যোগদানের সময় এক্সটেনশন পদ্ধতিগুলি থেকে বর্ণন এবং পাঠযোগ্যতা বেশি পছন্দ করি joining উপাদান বিক্রেতারা (যেমন টেলিক) এক্সটেনশন পদ্ধতিগুলি দুর্দান্ত ব্যবহার করে। আমি যে উদাহরণটির কথা ভাবছি তা হ'ল এএসপি.নেট এমভিসিতে তাদের রেড কন্ট্রোলগুলি। এগুলি ব্যবহার / পড়ার জন্য আপনাকে এক্সটেনশন পদ্ধতিগুলি ব্যবহার করে খুব দক্ষ হতে হবে।
ক্যাচপপস

এ কথা বলতে এসেছি। জড়িত না থাকলে আমি সাধারণত ল্যাম্বডাস ব্যবহার করি। একবার যোগদানের পরে, লিনিক্যু সিনট্যাক্সটি আরও পঠনযোগ্য হতে থাকে।
শান

10

আর কোনও উত্তর যুক্ত করতে কি খুব দেরি হচ্ছে?

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

অবশ্যই এমন সময় আসে যখন ডট সিনট্যাক্স হয় IS যেতে উপায় - অন্যদের এইসব ক্ষেত্রে বিভিন্ন প্রদান করে; তবে আমি মনে করি বোঝাপড়াগুলি সংক্ষিপ্ত-পরিবর্তিত হয়েছে - যদি আপনি চান তবে একটি খারাপ রেপ দেওয়া হয়েছে। সুতরাং আমি একটি নমুনা সরবরাহ করব যেখানে আমি বিশ্বাস করি যে বোধগম্যতা কার্যকর।

এখানে একটি ডিজিটাল প্রতিস্থাপন ধাঁধাটির সমাধান: (লিনিকপ্যাড ব্যবহার করে লিখিত সমাধান, তবে কনসোল অ্যাপ্লিকেশনটিতে একা দাঁড়িয়ে থাকতে পারে)

// NO
// NO
// NO
//+NO
//===
// OK

var solutions =
    from O in Enumerable.Range(1, 8) // 1-9
                    //.AsQueryable()
    from N in Enumerable.Range(1, 8) // 1-9
    where O != N
    let NO = 10 * N + O
    let product = 4 * NO
    where product < 100
    let K = product % 10
    where K != O && K != N && product / 10 == O
    select new { N, O, K };

foreach(var i in solutions)
{
    Console.WriteLine("N = {0}, O = {1}, K = {2}", i.N, i.O, i.K);
}

//Console.WriteLine("\nsolution expression tree\n" + solutions.Expression);

... যা ফলাফল:

এন = 1, ও = 6, কে = 4

খুব খারাপ নয়, যুক্তিটি সুস্পষ্টভাবে প্রবাহিত হয় এবং আমরা দেখতে পাই যে এটি একটি একক সঠিক সমাধান নিয়ে আসে। এই ধাঁধাটি হাত দ্বারা সমাধান করার পক্ষে যথেষ্ট সহজ: 3>> N0, এবং O> 4 * N এর দ্বারা 8> = O> = 4 বোঝানো হয়েছে hand এর অর্থ হাতে হাতে পরীক্ষার জন্য সর্বোচ্চ 10 টি মামলা রয়েছে ( N2--5- এর জন্য 2 O)। আমি যথেষ্ট বিপথগামী - এই ধাঁধাটি LINQ চিত্রের উদ্দেশ্যে দেওয়া হয়েছে purposes

সংকলক রূপান্তর

সংকলক এর সমতুল্য বিন্দু-বাক্য বিন্যাসে অনুবাদ করতে অনেক কিছুই করে। সাধারণ দ্বিতীয় এবং পরবর্তী fromধারাগুলি SelectManyকলগুলিতে রূপান্তরিত হওয়ার পাশাপাশি আমাদের এমন letধারা Selectরয়েছে যা অনুমানের সাথে কল হয়ে যায় , উভয়ই স্বচ্ছ-শনাক্তকারী ব্যবহার করে । আমি যেমন প্রদর্শন করতে চলেছি, বিন্দু বাক্য গঠনতে এই সনাক্তকারীদের নামকরণ করা সেই পদ্ধতির পাঠযোগ্যতার থেকে দূরে সরে যায়।

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

এন = 1, ও = 6, কে = 4

সমাধান এক্সপ্রেশন ট্রি সিস্টেম.লিনক.ইনিমিউরেবল + ডি_বি 8.স্লেকটম্যানি (ও => রেঞ্জ (1, 8), (ও, এন) => নতুন <> চ _ অজ্ঞাতনামা টাইপ 2(O = O, N = N)).Where(<>h__TransparentIdentifier0 => (<>h__TransparentIdentifier0.O != <>h__TransparentIdentifier0.N)).Select(<>h__TransparentIdentifier0 => new <>f__AnonymousType12 (<> h_ স্বচ্ছ আইডেন্টিফায়ার 0 = <> এইচ_ট্রান্সপারেন্ট আইডেন্টিফায়ার 0, কোন = ((10 * <> h_ স্বচ্ছ আইডেন্টিফায়ার 0. এন )) + <> এইচ_ট্রান্সপারেন্টআইডেন্টিফায়ার 0.O))) নির্বাচন করুন (<> এইচ_ ট্রান্সপারেন্টআইডেন্টিফায়ার 1 => নতুন <> চ _ অজ্ঞাতনামা টাইপ 2(<>h__TransparentIdentifier1 = <>h__TransparentIdentifier1, product = (4 * <>h__TransparentIdentifier1.NO))).Where(<>h__TransparentIdentifier2 => (<>h__TransparentIdentifier2.product < 100)).Select(<>h__TransparentIdentifier2 => new <>f__AnonymousType32 2 (<> h_ স্বচ্ছ আইডেন্টিফায়ার 2 = <h h_ Transp2_d <> h_ স্বচ্ছ আইডেন্টিফায়ার 2. প্রোডাক্ট % 10%))) যেখানে (<> এইচ_প্রসারণকারী পরিচয়কারী 3 => (((<<h_ TranspantIdentifier3.K ! = <> h_ ট্রান্সপারেন্টআইডেন্টিফায়ার 3) <<< h_ স্বচ্ছ আইডেন্টিফায়ার 2। <>এইচ_ট্রান্সপারেন্ট আইডেন্টিফায়ার 1। <> এইচ_TransparentIdentifier0.O) AndAlso (<> জ _TransparentIdentifier3.K! = <> H_ TransparentIdentifier3। <> জ _TransparentIdentifier2। <> H_ TransparentIdentifier1। <> জ _TransparentIdentifier0.N)) AndAlso ((<> h_ TransparentIdentifier3। <> জ _TransparentIdentifier2। পণ্য / 10) == <> h_ TransparentIdentifier3। <> জ _TransparentIdentifier2। <> h_ TransparentIdentifier1। <> জ _TransparentIdentifier0.O)))। নির্বাচন করুন (<> h_ TransparentIdentifier3 => নতুন <> চ _AnonymousType4`3 (এন = < > h_ TransparentIdentifier3। <> জ _TransparentIdentifier2। <> h_ TransparentIdentifier1। <> জ _TransparentIdentifier0.N,ও = <> এইচ_ স্বচ্ছ আইডেন্টিফায়ার 3। <> এইচ‍ট্রান্সপারেন্ট আইডেন্টিফায়ার 2। <> এইচ_ট্রান্সপারেন্টআইডেন্টিফায়ার 1। <> এইচ_ট্রান্সপারেন্টআইডেন্টিফায়ার 0.O, কে = <> h__ ট্রান্সপারেন্টআইডেন্টিফায়ার 3. কে))

প্রতিটি লিনকিউ অপারেটরকে একটি নতুন লাইনে রেখে, আমরা "কথা বলতে" পারছি না এমনগুলিতে "অবর্ণনীয়" সনাক্তকারীকে অনুবাদ করে, বেনামি প্রকারগুলিকে তাদের পরিচিত ফর্মের সাথে পরিবর্তন করে এবং AndAlsoসংমিশ্রণে &&সংকলক যে রূপান্তরটি প্রকাশ করে তা প্রকাশ করতে এক্সপ্রেশন-ট্রি লিঙ্গো পরিবর্তন করে বিন্দু বাক্য গঠন:

var solutions = 
    Enumerable.Range(1,8) // from O in Enumerable.Range(1,8)
        .SelectMany(O => Enumerable.Range(1, 8), (O, N) => new { O = O, N = N }) // from N in Enumerable.Range(1,8)
        .Where(temp0 => temp0.O != temp0.N) // where O != N
        .Select(temp0 => new { temp0 = temp0, NO = 10 * temp0.N + temp0.O }) // let NO = 10 * N + O
        .Select(temp1 => new { temp1 = temp1, product = 4 * temp1.NO }) // let product = 4 * NO
        .Where(temp2 => temp2.product < 100) // where product < 100
        .Select(temp2 => new { temp2 = temp2, K = temp2.product % 10 }) // let K = product % 10
        .Where(temp3 => temp3.K != temp3.temp2.temp1.temp0.O && temp3.K != temp3.temp2.temp1.temp0.N && temp3.temp2.product / 10 == temp3.temp2.temp1.temp0.O)
        // where K != O && K != N && product / 10 == O
        .Select(temp3 => new { N = temp3.temp2.temp1.temp0.N, O = temp3.temp2.temp1.temp0.O, K = temp3.K });
        // select new { N, O, K };

foreach(var i in solutions)
{
    Console.WriteLine("N = {0}, O = {1}, K = {2}", i.N, i.O, i.K);
}

আপনি যদি চালনা করেন তবে যাচাই করতে পারবেন যে এটি আবার আউটপুট রয়েছে:

এন = 1, ও = 6, কে = 4

... তবে আপনি কি কখনও এই জাতীয় কোড লিখবেন?

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

এই ধাঁধার নমুনা আপনার পক্ষে গুরুত্ব সহকারে নেওয়ার পক্ষে যথেষ্ট বাস্তব-জগতের নাও হতে পারে ; যাইহোক, অন্যান্য পরিস্থিতি উপস্থিত রয়েছে যেখানে ক্যোয়ারী অনুধাবনগুলি আলোকিত হয়:

  • এর জটিলতা Joinএবং GroupJoin: ক্যোয়ারী বোধগম্য শর্তাদি মধ্যে পরিসীমা ভেরিয়েবলগুলির স্কোপিং joinএমন ভুলগুলি ঘুরিয়ে দেয় যা অন্যথায় ডট-সিনট্যাক্সে সংযোজন সিনট্যাক্সের সংকলন-সময় ত্রুটিতে সংকলন করতে পারে।
  • সংকলক যেকোন সময় বোঝা রূপান্তরে স্বচ্ছ-শনাক্তকারী পরিচয় করিয়ে দেবে, বোধগম্যতা সার্থক হয়ে উঠবে। fromএটিতে নিম্নলিখিতগুলির যে কোনওটির ব্যবহার অন্তর্ভুক্ত রয়েছে: একাধিক ধারা, join& join..intoধারা এবং letধারাগুলি।

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


-১: বাহ। ওপি একটু পরামর্শ দিচ্ছিল। আপনি একটি উপন্যাস মন্থন! এটাকে কিছুটা আঁকড়ে ধরতে আপত্তি করবেন?
জিম জি।

8

আমার পরামর্শটি হল কোয়েরি বোধগম্য বাক্য গঠনটি ব্যবহার করা যখন সম্পূর্ণ এক্সপ্রেশন সিঙ্কট্যাক্সে সম্পূর্ণ অভিব্যক্তিটি করা যায়। এটি, আমি পছন্দ করব:

var query = from c in customers orderby c.Name select c.Address;

থেকে

var query = customers.OrderBy(c=>c.Name).Select(c=>c.Address);

তবে আমি পছন্দ করি

int count = customers.Where(c=>c.City == "London").Count();

থেকে

int count = (from c in customers where c.City == "London" select c).Count();

আমি আশা করি আমরা এমন কিছু সিনট্যাক্স নিয়ে এসেছি যা এ দুটিকে মেশানো আরও সুন্দর করে তুলেছে। কিছুটা এইরকম:

int count = from c in customers 
            where c.City == "London" 
            select c 
            continue with Count();

তবে দুঃখের বিষয় আমরা তা করি নি।

তবে মূলত, এটি অগ্রাধিকারের বিষয়। আপনার এবং আপনার সহকর্মীদের কাছে আরও ভাল দেখাচ্ছে এমনটি করুন।


3
বিকল্পভাবে আপনি অন্য একটি লিনকিউ অপারেটর কলগুলি থেকে একটি "উপস্থাপনকারী ভেরিয়েবল" রিফ্যাক্টরিংয়ের মাধ্যমে কোনও বোঝাপড়া আলাদা করে বিবেচনা করতে পারেন। উদাহরণস্বরূপ,var londonCustomers = from c in ...; int count = londonCustomers.Count();
ডেগিজার

3

এসকিউএল-মত শুরু করার একটি ভাল উপায়। তবে এটি সীমাবদ্ধ থাকার কারণে (এটি আপনার বর্তমান ভাষা সমর্থন করে কেবল সেই নির্মাণগুলিকে সমর্থন করে) অবশেষে বিকাশকারীরা এক্সটেনশন-পদ্ধতিগুলির স্টাইলে যান।

আমি লক্ষ করতে চাই যে এমন কিছু কেস রয়েছে যা এসকিউএল-জাতীয় স্টাইলে সহজেই প্রয়োগ করা যেতে পারে।

এছাড়াও আপনি একটি ক্যোয়ারিতে উভয় উপায়ে একত্রিত করতে পারেন।


2

কোয়েরির মতো যদিও আমার কোনও চলকটির মাঝারি উপায়টি সংজ্ঞায়িত করতে না চাই আমি নন-কোয়েরি সিনট্যাক্সটি ব্যবহার করি

from x in list
let y = x.DoExpensiveCalulation()
where y > 42
select y

তবে আমি নন-কোয়েরি সিনট্যাক্সটি লিখি

x.Where(c => filter)
 .Select(c => datatransform)

2

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


আমি মনে করি আপনি "ক্যোয়ারী অনুধাবন" সিনট্যাক্সে পৃষ্ঠায় ক্রমটি ক্রমটি ক্রিয়াকলাপের ক্রম হিসাবে একইরূপে পাবেন S
এরিক লিপার্ট

1

আমি এক্সটেনশন ফাংশনটিও পছন্দ করি।

হতে পারে কারণ এটি আমার মনে সিনট্যাক্সের একটি লাফিয়ে কম।

এটি চোখেও আরও পঠনযোগ্য বোধ করে, বিশেষত যদি আপনি তৃতীয় পক্ষের ফ্রেমওয়ার্ক ব্যবহার করেন যা লিনক এপিআই থাকে।


0

এখানে আমি যে হিউরিস্টিক অনুসরণ করি তা হল:

ল্যাঙ্কডাডাসের সাথে লাইনকড এক্সপ্রেশনটি পছন্দ করুন যখন আপনি যোগদান করবেন।

আমি মনে করি যে ল্যাম্বডাস যোগ দেয় এবং দেখতে অসুবিধাজনক।

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