কখন প্রকাশিত দেহযুক্ত সদস্যদের ব্যবহার করা উপযুক্ত? [বন্ধ]


24

সি # 6 এক্সপ্রেশন-দেহযুক্ত সদস্যদের পরিচয় করিয়ে দেয়, যা পদ্ধতি এবং বৈশিষ্ট্যগুলিতে সরল কোডের জন্য অনুমতি দেয় যা কেবলমাত্র একটি অভিব্যক্তির ফলাফল ফেরত দেয়:

public override string ToString()
{
     return string.Format("{0} {1}", _field1, _field2);
}

হয়ে:

public override string ToString() =>
    string.Format("{0} {1}", _field1, _field2);

যেহেতু আমাদের কাছে এখন দুটি সমতুল্য এবং বৈধ বাক্য গঠন রয়েছে, কোনটি ব্যবহার করবেন তা সিদ্ধান্ত নিতে থাম্বের কিছু নিয়ম অবশ্যই ব্যবহার করা উচিত। নতুন বিকল্প কখন উপযুক্ত?


7
উম্মে, মেম্বারের শরীরে কি এক্সপ্রেশন হয়?
Jörg ডব্লু মিটাগ

1
এটি প্রশ্নের উত্তর দেবে "শরীরের সদস্যদের এক্সপ্রেশন ব্যবহার করা কখন সম্ভব"।
আসিক

7
সম্পূর্ণ সম্পর্কিত নয়, তবে আপনি কি ব্যবহার করতে পারবেন না public override string ToString() => $"{_field1} {_field2}";?
থোডেন

3
@ জর্জ ডাব্লু মিটাগ আমি এতে "" ... এর পার্শ্ব প্রতিক্রিয়া নেই "যুক্ত করব। কোনও পদ্ধতি যখন বিশুদ্ধভাবে কার্যকর হয় না তখন একটি কার্যকরী স্টাইলে ঘোষণা করা বিভ্রান্তিকর হবে।
জুলে

উত্তর:


12

ফাংশনাল প্রোগ্রামিং ল্যাঙ্গুয়েজে কেবল প্রকাশ থাকে so তাই বেশিরভাগেরই প্রাথমিকভাবে থেকেই এর মতো বৈশিষ্ট্য রয়েছে। আপনি যখন এটি তুলনামূলকভাবে সংক্ষিপ্ত, প্রায়শই পুনরাবৃত্তি হয়, এমন অভিব্যক্তি থাকে যা একটি আরও ছোট, আরও বেশি অর্থবহ নাম দ্বারা প্রতিস্থাপিত হতে পারে।

একটি সাধারণ উদাহরণ ভবিষ্যদ্বাণীগুলি হবে যা অন্য কোথাও ব্যবহৃত হয়, যেমন:

public static bool isOdd(int num) => (num % 2) == 1;

যদি অভিব্যক্তিটি দীর্ঘ হয় তবে এটিকে আলাদা ফাংশনে ভাগ করা আরও ভাল বা নামযুক্ত মধ্যবর্তী ফলাফল সহ একটি ফাংশন। যদি এটি সংক্ষিপ্ত হয় তবে আপনি একটি ভাল নামের কথা ভাবতে পারেন না, আপনি কোনও মত ভয়ঙ্কর নাম তৈরির চেয়ে এক্সপ্রেশনটি অনুলিপি করা ভাল condition1


21

থেকে সি # / নেট লিটল বিস্ময়। প্রকাশ-সাকার সি # 6 সদস্য :

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

(জোর, আমার; নীচে আপডেট 1 দেখুন)

উপরের নিবন্ধটির সংক্ষিপ্তসার থেকে আরও:

সুতরাং সি # 6 এখন আমাদেরকে কেবলমাত্র সম্পত্তি এবং পদ্ধতির সংজ্ঞাগুলি দিয়ে অভিব্যক্তিগুলি নির্দিষ্ট করার সক্ষমতা দেয়। এটি আপনার কোডটিকে আরও সংক্ষিপ্ত করতে খুব সহজ পদ্ধতির সিনট্যাক্স বোঝা হ্রাস করতে সহায়তা করতে পারে।

যাইহোক, সমস্ত কিছুর সাথে, এটি কোনও প্রদত্ত পরিস্থিতির জন্য উপযুক্ত কিনা তা নিয়ে আপনার রায় ব্যবহার করুন। যখন কোনও অভিব্যক্তি খুব দীর্ঘ বা জটিল হয়, তখন পুরো বডি সিনট্যাক্স ব্যবহার করা আরও পড়তে পারে।

এবং পারফরম্যান্স সম্পর্কে অন্য একটি উদ্ধৃতি, কারণ নির্দিষ্ট ভাষার বৈশিষ্ট্যটি ব্যবহার করার উপযুক্ত হওয়ার সাথে সাথে পারফরম্যান্স সমস্যাগুলিও খেলতে পারে:

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

(জোর, লেখক)

আপডেট 1: @ জার্গডব্লিউমিত্যাগ বলেছেন

এর কোন মানে নেই. "এটিকে সাধারণ অভিব্যক্তি এবং বিবৃতিতে সীমাবদ্ধ করবেন"? তাই না? এটি বিবৃতি দিয়েও কাজ করে না, কেবল প্রকাশের সাথে!

এটি প্রদর্শিত হয় মূল লেখকের ভুল বানান থাকতে পারে। স্পষ্ট করতে, নতুন এবং উন্নত সি # 6.0 থেকে :

এক্সপ্রেশন দেহযুক্ত ক্রিয়াকলাপগুলি সি # 6.0 এ অন্য বাক্য গঠন সহজীকরণ। এগুলি কোনও বিবৃতি দেহের সাথে ফাংশন। পরিবর্তে, আপনি ফাংশন ঘোষণার পরে একটি অভিব্যক্তি দিয়ে এগুলি প্রয়োগ করেন।

স্পষ্টতই, এটি কোনও পদ্ধতি বা সম্পত্তিকে একটি এক্সপ্রেশন করে না । কোডের লাইনগুলি (এবং কোঁকড়া ধনুর্বন্ধনী সংখ্যা) হ্রাস করতে এটি এক্সপ্রেশন সিনট্যাক্সটি ব্যবহার করে ।

আমার আসল সুপারিশটি এখনও দাঁড়িয়ে আছে: এটি আপনার কোডটি স্পষ্ট এবং বোঝার জন্য সহজ করে যখন আপনি এটি ব্যবহার করতে পারেন কেবল তা নয় Use


2
এর কোন মানে নেই. "এটিকে সাধারণ অভিব্যক্তি এবং বিবৃতিতে সীমাবদ্ধ করবেন "? তাই না? এটি বিবৃতি দিয়েও কাজ করে না , কেবল প্রকাশের সাথে! আমিও বিশ্বাস করছি না যে যোগ গোলমাল (দুই প্রথম বন্ধনী এবং একটি returnশব্দ) আগের চেয়ে আরও বেশি পাঠযোগ্যতা হতে পারে। সর্বোপরি, জটিল ভাবটি এখনও ঠিক একই জটিল অভিব্যক্তি, কেবল সিনট্যাকটিক গন্ডগোলের মধ্যে সমাহিত।
Jörg ডব্লু মিট্টাগ

3
আমি যা প্রকাশ পেয়েছি তা থেকে শরীরের সদস্যরা আসলেই প্রকাশ নয়। তারা সিনট্যাকটিক চিনি হয়। ব্লগ পোস্টের পরে যেহেতু সি # স্পেসটি পরিবর্তিত হয়নি তা অকার্যকর রিটার্নের ধরণের সাহায্যের পদ্ধতিগুলি সমর্থন করে।
গ্রেগ বার্গার্ট

1
আমি ভুল হতে পারি, তবে আমি বিশ্বাস করি যে এক্সপ্রেশন বিবৃতিতে পার্শ্ব প্রতিক্রিয়াগুলি অনুমোদিত নয়। আমার কাছে, অভিব্যক্তি বিবৃতিগুলির সুবিধাটি হ'ল আপনি পাঠককে বলছেন যে এই "এক্সপ্রেশন" খাঁটি এবং কোনও গোপন পার্শ্ব প্রতিক্রিয়া নেই যা আপনার, পাঠককে সন্ধান করতে হবে।
জন

1
@ জন "অস্বীকৃত" সম্পূর্ণ ভুল। আপনি ক্রিয়া তৈরির মতো সমস্ত শেননিগানগুলি করতে পারেন, ক্রিয়া ঘোষণার ভিতরে সদস্য ভেরিয়েবল সেট করে এবং তারপরে ক্রিয়াটি আহ্বান করতে পারেন। সুতরাং, পার্শ্ব প্রতিক্রিয়াগুলি অবশ্যই প্রত্যাখ্যানযোগ্য নয়। আমি অবশ্যই তাদের নিরুৎসাহিত করব, তারা অভিব্যক্তি বাক্য বিন্যাসের বিন্দুটি মিস করে।
মাফাই

@Mafii। ধন্যবাদ। আমি তখন থেকে শিখেছি যে আপনি "এক্সপ্রেশন স্টেটমেন্ট" করতে পারেন, যা "আধুনিক" হিসাবে বর্ণনা করা হয়েছিল। আমার কাছে তবে, খুব ধারণাটি কেবল বিভ্রান্তিকর।
জন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.