সি # ল্যাম্বদা এক্সপ্রেশন: আমি কেন সেগুলি ব্যবহার করব?


309

আমি মাইক্রোসফ্ট ল্যাম্বদা এক্সপ্রেশন ডকুমেন্টেশনটি খুব দ্রুত পড়েছি ।

এই ধরণের উদাহরণ আমাকে আরও ভালভাবে বুঝতে সাহায্য করেছে, যদিও:

delegate int del(int i);
del myDelegate = x => x * x;
int j = myDelegate(5); //j = 25

তবুও, আমি কেন বুঝতে পারি না যে এটি কেন এমন একটি উদ্ভাবন। এটি কেবলমাত্র একটি পদ্ধতি যা "মেথড ভেরিয়েবল" শেষ হয়ে গেলে মারা যায়, তাই না? আসল পদ্ধতির পরিবর্তে কেন আমি এটি ব্যবহার করব?


3
আপনারা যারা এই পৃষ্ঠায় এসেছেন এবং জানেন না যে delegateসি # তে কী রয়েছে, আমি এই পৃষ্ঠার বাকীটি পড়ার আগে এই প্রবন্ধটি
কলব ক্যানিয়ন

উত্তর:


281

লাম্বদা এক্সপ্রেশন হ'ল বেনাম প্রতিনিধিদের জন্য একটি সহজ বাক্য গঠন এবং যেখানেই বেনামে প্রতিনিধি ব্যবহার করা যেতে পারে সর্বত্র ব্যবহার করা যেতে পারে। তবে এর বিপরীতটি সত্য নয়; লাম্বদা এক্সপ্রেশনগুলি এক্সপ্রেশন ট্রিগুলিতে রূপান্তরিত হতে পারে যা LINQ এর মত অনেকগুলি যাদুবিদ্যাকে এসকিউএল রূপান্তর করতে দেয়।

নীচে বেনামে প্রতিনিধিরা লম্বা এক্সপ্রেশন ব্যবহার করে চোখের উপর কতটা সহজ তা দেখানোর জন্য অবজেক্ট এক্সপ্রেশনের কাছে একটি লিনকিউর উদাহরণ রয়েছে:

// anonymous delegate
var evens = Enumerable
                .Range(1, 100)
                .Where(delegate(int x) { return (x % 2) == 0; })
                .ToList();

// lambda expression
var evens = Enumerable
                .Range(1, 100)
                .Where(x => (x % 2) == 0)
                .ToList();

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

এক্সপ্রেশন ট্রি হ'ল সি # 3.0 এর একটি খুব শক্তিশালী নতুন বৈশিষ্ট্য যা কোনও এপিআইকে মৃত্যুদন্ড কার্যকর করা যায় এমন কোনও পদ্ধতির কেবল রেফারেন্স না দিয়ে এক্সপ্রেশনের কাঠামোটি দেখার অনুমতি দেয়। একটি এপিআইকে কেবলমাত্র একটি প্রতিনিধি প্যারামিটারকে একটি প্যারামিটারে পরিণত করতে Expression<T>হবে এবং সংকলক বেনামে প্রতিনিধি পরিবর্তে ল্যাম্বডা থেকে একটি এক্সপ্রেশন ট্রি তৈরি করবে:

void Example(Predicate<int> aDelegate);

যেমন বলা হয়:

Example(x => x > 5);

হয়ে:

void Example(Expression<Predicate<int>> expressionTree);

পরেরটি বিমূর্ত সিনট্যাক্স ট্রিটির একটি প্রতিনিধিত্ব করে যা অভিব্যক্তিটি বর্ণনা করে x > 5। এসকিউএল-এর লাইনকিউ সার্ভারের পাশে ফিল্টারিং / অর্ডারিং / ইত্যাদির জন্য পছন্দসই এসকিউএল এক্সপ্রেশনগুলিতে সি # এক্সপ্রেশনগুলি ঘুরিয়ে আনতে সক্ষম হওয়ার জন্য এই আচরণের উপর নির্ভর করে।


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

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

138

অজ্ঞাতনামা ফাংশন এবং এক্সপ্রেশনগুলি এক-বন্ধ পদ্ধতির জন্য কার্যকর যা সম্পূর্ণ পদ্ধতি তৈরি করতে প্রয়োজনীয় অতিরিক্ত কাজের ফলে উপকৃত হয় না।

এই উদাহরণ বিবেচনা করুন:

 string person = people.Find(person => person.Contains("Joe"));

বনাম

 public string FindPerson(string nameContains, List<string> persons)
 {
     foreach (string person in persons)
         if (person.Contains(nameContains))
             return person;
     return null;
 }

এগুলি কার্যত সমতুল্য।


8
এই ল্যাম্বডা এক্সপ্রেশনটি পরিচালনা করতে কীভাবে ফাইন্ড () পদ্ধতিটি নির্ধারণ করা হত?
প্যাট্রিক দেশজার্ডিনস

3
ভবিষ্যদ্বাণী করা <T> অনুসন্ধান পদ্ধতিটি প্রত্যাশা করে।
ড্যারেন কোপ

1
যেহেতু আমার ল্যাম্বডা এক্সপ্রেশনটি প্রিডিকেট <টি> এর সাথে চুক্তির সাথে মেলে, তাই (সন্ধান পদ্ধতি) এটি গ্রহণ করে।
জোসেফ ডাইগল

আপনার অর্থ কি "স্ট্রিং ব্যক্তি = মানুষ F ফাইন্ড (ব্যক্তি => ব্যক্তি। কনটেন্টস (" জো "));"
গার্ন ব্ল্যানস্টন

5
@ এফ কেকোডার, না, তিনি করেন না, যদিও তিনি যদি "স্ট্রিং ব্যক্তি = মানুষ" বলে থাকেন তবে এটি স্পষ্ট হতে পারে ind ফাইন্ড (পি => পি। কনটেনস ("জো")); "
বেনজল

84

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

private ComboBox combo;
private Label label;

public CreateControls()
{
    combo = new ComboBox();
    label = new Label();
    //some initializing code
    combo.SelectedIndexChanged += new EventHandler(combo_SelectedIndexChanged);
}

void combo_SelectedIndexChanged(object sender, EventArgs e)
{
    label.Text = combo.SelectedValue;
}

ল্যাম্বদা এক্সপ্রেশন আপনাকে ধন্যবাদ এটি ব্যবহার করতে পারেন:

public CreateControls()
{
    ComboBox combo = new ComboBox();
    Label label = new Label();
    //some initializing code
    combo.SelectedIndexChanged += (s, e) => {label.Text = combo.SelectedValue;};
}

আরো সহজ.


প্রথম উদাহরণে কেন প্রেরককে কাস্ট করে মান পাবেন না?
অ্যান্ড্রু

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

35

ল্যাম্বদা সি # 2.0 এর বেনামে প্রতিনিধি সিনট্যাক্স পরিষ্কার করেছে ... উদাহরণস্বরূপ

Strings.Find(s => s == "hello");

সি # 2.0 তে এভাবে করা হয়েছিল:

Strings.Find(delegate(String s) { return s == "hello"; });

কার্যকরীভাবে, তারা ঠিক একই জিনিসটি করে, এটি কেবল আরও অনেক সংক্ষিপ্ত বাক্য গঠন।


3
তারা একেবারে একই জিনিস নয় - যেমনটি @ নীল উইলিয়ামস উল্লেখ করেছেন, আপনি এক্সপ্রেশন ট্রি ব্যবহার করে একটি ল্যাম্বডাসের এএসটি বের করতে পারবেন, যেখানে বেনাম পদ্ধতিগুলি একইভাবে ব্যবহার করা যাবে না।
ljs

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

29

এটি ল্যাম্বডা এক্সপ্রেশনটি ব্যবহার করার একমাত্র উপায়। আপনি প্রতিনিধি ব্যবহার করতে পারেন যে কোনও জায়গায় ল্যাম্বডা এক্সপ্রেশন ব্যবহার করতে পারেন। এটি আপনাকে এ জাতীয় কাজ করতে দেয়:

List<string> strings = new List<string>();
strings.Add("Good");
strings.Add("Morning")
strings.Add("Starshine");
strings.Add("The");
strings.Add("Earth");
strings.Add("says");
strings.Add("hello");

strings.Find(s => s == "hello");

এই কোডটি "হ্যালো" শব্দের সাথে মেলে এমন একটি প্রবেশের জন্য তালিকার সন্ধান করবে। এটি করার অন্য উপায়টি হ'ল প্রকৃতপক্ষে অনুসন্ধান পদ্ধতির জন্য কোনও প্রতিনিধিকে পাস করা:

List<string> strings = new List<string>();
strings.Add("Good");
strings.Add("Morning")
strings.Add("Starshine");
strings.Add("The");
strings.Add("Earth");
strings.Add("says");
strings.Add("hello");

private static bool FindHello(String s)
{
    return s == "hello";
}

strings.Find(FindHello);

সম্পাদনা :

সি # 2.0 তে, বেনামে প্রতিনিধি সিনট্যাক্স ব্যবহার করে এটি করা যেতে পারে:

  strings.Find(delegate(String s) { return s == "hello"; });

ল্যাম্বদা সেই বাক্য গঠনটি উল্লেখযোগ্যভাবে পরিষ্কার করেছে।


2
@ জোনাথান হল্যান্ড: বেনাম প্রতিনিধি সিনট্যাক্স সম্পাদনা এবং যুক্ত করার জন্য ধন্যবাদ। এটি চমৎকারভাবে উদাহরণটি সম্পূর্ণ করে।
স্কট ডরম্যান

বেনামে প্রতিনিধি কী? // দুঃখিত আমি সি # তে নতুন এসেছি
হ্যাকারম্যান

1
@ হ্যাকারম্যান, কোনও বেনামে প্রতিনিধিটিকে এমন একটি ফাংশন হিসাবে ভাবুন যার "নাম" নেই। আপনি এখনও একটি ফাংশন সংজ্ঞায়িত করছেন, যার ইনপুট এবং আউটপুট থাকতে পারে, তবে এটি একটি নাম হিসাবে আপনি সরাসরি এটি উল্লেখ করতে পারবেন না। উপরের দেখানো কোডটিতে, আপনি একটি পদ্ধতিটিকে (যা গ্রহণ করে stringএবং ফেরত দেয় bool) Findনিজেই সেই পদ্ধতির পরামিতি হিসাবে সংজ্ঞায়িত করছেন ।
স্কট ডরম্যান

22

মাইক্রোসফ্ট আমাদের লম্বা এক্সপ্রেশন নামে পরিচিত বেনামী প্রতিনিধি তৈরির আরও একটি পরিষ্কার এবং আরও সহজ উপায় দিয়েছে। তবে এই বিবৃতিটির এক্সপ্রেশন অংশের দিকে খুব বেশি মনোযোগ দেওয়া হচ্ছে না । মাইক্রোসফ্ট একটি সম্পূর্ণ নেমস্পেস, সিস্টেম.লিংক.এক্সপ্রেসান্স প্রকাশ করেছে , যেখানে ল্যাম্বডা এক্সপ্রেশনগুলির উপর ভিত্তি করে এক্সপ্রেশন ট্রি তৈরির ক্লাস রয়েছে। এক্সপ্রেশন গাছগুলি যুক্তিগুলির প্রতিনিধিত্ব করে এমন বস্তু দ্বারা গঠিত। উদাহরণস্বরূপ, x = y + z হল এমন একটি অভিব্যক্তি যা। নেট এ কোনও অভিব্যক্তি গাছের অংশ হতে পারে। নিম্নলিখিত (সহজ) উদাহরণ বিবেচনা করুন:

using System;
using System.Linq;
using System.Linq.Expressions;


namespace ExpressionTreeThingy
{
    class Program
    {
        static void Main(string[] args)
        {
            Expression<Func<int, int>> expr = (x) => x + 1; //this is not a delegate, but an object
            var del = expr.Compile(); //compiles the object to a CLR delegate, at runtime
            Console.WriteLine(del(5)); //we are just invoking a delegate at this point
            Console.ReadKey();
        }
    }
}

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


12

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

এবং এটি আসলে নতুনত্ব নয়। এলআইএসপি প্রায় 30 বছর বা তারও বেশি সময় ধরে ল্যাম্বদা ফাংশন করে।


6

আপনার পদ্ধতিতে কাজ করতে আপনি জেনেরিক কোডগুলি লেখার ক্ষেত্রে ল্যাম্বডা এক্সপ্রেশনটির ব্যবহারও পেতে পারেন।

উদাহরণস্বরূপ: পদ্ধতি কল দ্বারা নেওয়া সময় গণনা করার জন্য জেনেরিক ফাংশন। (যেমন Actionএখানে)

public static long Measure(Action action)
{
    Stopwatch sw = new Stopwatch();
    sw.Start();
    action();
    sw.Stop();
    return sw.ElapsedMilliseconds;
}

এবং আপনি নীচে ল্যাম্বডা এক্সপ্রেশন ব্যবহার করে উপরের পদ্ধতিটি কল করতে পারেন,

var timeTaken = Measure(() => yourMethod(param));

এক্সপ্রেশন আপনাকে আপনার পদ্ধতি থেকে ফেরতের মান এবং পাশাপাশি পরম আউট পেতে দেয়

var timeTaken = Measure(() => returnValue = yourMethod(param, out outParam));

5

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


5

একটি ল্যাম্বডা এক্সপ্রেশন একটি প্রতিনিধি উদাহরণের জায়গায় লেখা একটি বেনামি পদ্ধতির মতো।

delegate int MyDelagate (int i);
MyDelagate delSquareFunction = x => x * x;

ল্যাম্বদা এক্সপ্রেশন বিবেচনা করুন x => x * x;

ইনপুট প্যারামিটার মান x (=> এর বাম দিকে)

ফাংশন যুক্তিটি হল x * x (=> এর ডান দিকে)

ল্যাম্বডা এক্সপ্রেশনের কোডটি এক্সপ্রেশনের পরিবর্তে স্টেটমেন্ট ব্লক হতে পারে।

x => {return x * x;};

উদাহরণ

দ্রষ্টব্য: Funcএকটি পূর্বনির্ধারিত জেনেরিক প্রতিনিধি।

    Console.WriteLine(MyMethod(x => "Hi " + x));

    public static string MyMethod(Func<string, string> strategy)
    {
        return strategy("Lijo").ToString();
    }

তথ্যসূত্র

  1. কোনও প্রতিনিধি এবং ইন্টারফেস কীভাবে বিনিময়যোগ্যভাবে ব্যবহার করা যেতে পারে?

4

অনেক সময়, আপনি কেবলমাত্র এক জায়গায় কার্যকারিতা ব্যবহার করছেন, সুতরাং একটি পদ্ধতি তৈরি করে ক্লাসটি কেবল বিশৃঙ্খলা করে।


3

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

একইভাবে, আপনার ভবিষ্যদ্বাণী ব্যবহার করা দরকার কেন? লুপের জন্য একটি প্লেইন বা সরাসরি আইউনামেবল সরাসরি ব্যবহার করে আপনি পূর্বাঞ্চে সবকিছু করতে পারেন। উত্তর: আপনার এটির দরকার নেই তবে এটি আপনার কোডটিকে আরও পঠনযোগ্য করে তোলে।


0

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

উদাহরণস্বরূপ, আপনি এসকিউএল ব্যবহার করার আগে এবং এসকিউএল ইঞ্জেকশন আক্রমণ পেতে পারার আগে হ্যাকার একটি স্ট্রিং পেরিয়েছিল যেখানে একটি সংখ্যা সাধারণত প্রত্যাশিত ছিল। এখন আপনি একটি লিনকুই ল্যাম্বডা এক্সপ্রেশন ব্যবহার করবেন, যা এটি থেকে সুরক্ষিত।

খাঁটি প্রতিনিধিদের জন্য একটি লিনকিউ এপিআই তৈরি করা সম্ভব নয়, কারণ এটির মূল্যায়নের আগে অভিব্যক্তি গাছগুলি একত্রিত করা দরকার।

২০১ 2016 সালে বেশিরভাগ জনপ্রিয় ভাষাগুলির ল্যাম্বডা এক্সপ্রেশন সমর্থন রয়েছে এবং মূলধারার অপরিহার্য ভাষার মধ্যে সি # এই বিবর্তনের অন্যতম পথিকৃৎ ছিল।


0

ল্যাম্বডা এক্সপ্রেশন কেন ব্যবহার করবেন সে সম্পর্কে এটি সম্ভবত সেরা ব্যাখ্যা -> https://youtu.be/j9nj5dTo54Q

সংক্ষেপে, এটি কোডের পঠনযোগ্যতার উন্নতি করা, কোডের প্রতিলিপি তৈরির পরিবর্তে পুনরায় ব্যবহারের মাধ্যমে ত্রুটির সম্ভাবনা হ্রাস করা এবং পর্দার আড়ালে ঘটে যাওয়া লিভারেজ অপ্টিমাইজেশন।


0

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

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

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