আমি সম্প্রতি এফ #-এর দিকে নজর রেখেছি, এবং খুব শীঘ্রই যে কোনও সময় বেড়াটি লাফানোর সম্ভাবনা নেই, অবশ্যই এটি এমন কিছু ক্ষেত্রকে হাইলাইট করেছে যেখানে সি # (বা গ্রন্থাগার সহায়তা) জীবনকে সহজ করে তুলতে পারে।
বিশেষত, আমি এফ # এর প্যাটার্নের মিলের সামর্থ্য সম্পর্কে ভাবছি, যা একটি খুব সমৃদ্ধ সিনট্যাক্সের অনুমতি দেয় - বর্তমান স্যুইচ / শর্তসাপেক্ষ সি # সমমানের চেয়ে অনেক বেশি অভিব্যক্তিপূর্ণ। আমি সরাসরি উদাহরণ দেওয়ার চেষ্টা করব না (আমার F # এটির উপর নির্ভর করে না) তবে সংক্ষেপে এটি এর অনুমতি দেয়:
- টাইপ অনুসারে ম্যাচ করুন (বৈষম্যমূলক ইউনিয়নগুলির জন্য পূর্ণ কভারেজ চেকিং সহ) [এটি নোট করুন যে এটি সীমাবদ্ধ ভেরিয়েবলের জন্য প্রকারকে অনুগ্রহ করে, সদস্যকে অ্যাক্সেস দেয় ইত্যাদি]
- শিকারি দ্বারা ম্যাচ
- উপরের সংমিশ্রণগুলি (এবং সম্ভবত কিছু অন্যান্য পরিস্থিতিতে আমি অবগত নই)
যদিও সি # এর পক্ষে শেষ পর্যন্ত এই ধনীতার কিছুটা ধার করা [আহেমে] কাছে করা অন্তরঙ্গভাবে আমি রানটাইমের সময় কী করা যায় তা দেখছিলাম - উদাহরণস্বরূপ, কিছু বস্তুকে একসাথে ঠেকানো মোটামুটি সহজ:
var getRentPrice = new Switch<Vehicle, int>()
.Case<Motorcycle>(bike => 100 + bike.Cylinders * 10) // "bike" here is typed as Motorcycle
.Case<Bicycle>(30) // returns a constant
.Case<Car>(car => car.EngineType == EngineType.Diesel, car => 220 + car.Doors * 20)
.Case<Car>(car => car.EngineType == EngineType.Gasoline, car => 200 + car.Doors * 20)
.ElseThrow(); // or could use a Default(...) terminator
যেখানে getRentPrice হ'ল একটি ফানক <যানবাহন, int>।
[দ্রষ্টব্য - সম্ভবত স্যুইচ / কেসটি এখানে ভুল পদ রয়েছে ... তবে এটি ধারণাটি দেখায়]
আমার কাছে, এটি পুনরাবৃত্তি যদি / অন্যটি, বা একটি যৌগিক ত্রৈমাসিক শর্তসাপেক্ষ (যা তুচ্ছ-বহিরাগত এক্সপ্রেশন - বন্ধনী গ্যালোরের জন্য খুব অগোছালো হয়ে যায়) ব্যবহার করে সমতুল্যর চেয়ে অনেক বেশি পরিষ্কার। এটি প্রচুর ingালাই এড়িয়ে যায়, এবং আরও সুনির্দিষ্ট ম্যাচে সরল এক্সটেনশনের (সরাসরি বা এক্সটেনশন পদ্ধতির মাধ্যমে) মঞ্জুরি দেয়, উদাহরণস্বরূপ ভিবি সিলেকের সাথে তুলনীয় একটি ইনরঞ্জ (...) ম্যাচ ... কেস "এক্স টু ওয়াই" "ব্যবহার।
আমি যদি কেবল লোকেরা মনে করি উপরের মতো নির্মাণ (ভাষা সহায়তার অভাবে) থেকে অনেক বেশি উপকার পাওয়া যায় তবে আমি গেজ করার চেষ্টা করছি?
অতিরিক্ত হিসাবে নোট করুন যে আমি উপরের 3 টি ভেরিয়েন্টের সাথে খেলছি:
- মূল্যায়নের জন্য একটি ফানক <টিএসসোর্স, টিভিয়াল্য> সংস্করণ - সংমিশ্রিত ত্রৈমাসিকের শর্তসাপেক্ষ বিবৃতিগুলির সাথে তুলনীয়
- একটি অ্যাকশন << উত্স> সংস্করণ - সাথে তুলনাযোগ্য / অন্যথায় যদি / অন্যথায় / অন্যথায় যদি / অন্য কিছু হয়
- একটি এক্সপ্রেশন <ফানক <টিসোর্স, টিভি >> সংস্করণ - প্রথম হিসাবে, তবে নির্বিচারে লিনকিউ সরবরাহকারীদের দ্বারা ব্যবহারযোগ্য
অতিরিক্তভাবে, এক্সপ্রেশন-ভিত্তিক সংস্করণ ব্যবহার করে এক্সপ্রেশন-ট্রি পুনরায় লেখা সক্ষম করে, বারবার অনুরোধের পরিবর্তে মূলত সমস্ত শাখাকে একক যৌগিক শর্তসাপেক্ষ অভিব্যক্তিতে অন্তর্ভুক্ত করে। আমি সম্প্রতি যাচাই করে দেখিনি, তবে কিছু প্রাথমিক সত্তা ফ্রেমওয়ার্ক তৈরি হয়েছে বলে মনে হচ্ছে এটি প্রয়োজনীয় বলে মনে করি, কারণ এটি ইনভোকেশনএক্সপ্রেশনকে খুব বেশি পছন্দ করে না। এটি লিনকিউ-টু-অবজেক্টগুলির সাথে আরও দক্ষ ব্যবহারের অনুমতি দেয়, যেহেতু এটি বারবার প্রতিনিধিদের অনুরোধকে এড়িয়ে চলে - পরীক্ষাগুলি সমান সি # এর তুলনায় একই গতিতে [সামান্য তাত্পর্যপূর্ণ, আসলে] পারফর্ম করে উপরের মতো ম্যাচ দেখায় (সামান্য দ্রুত, আসলে] যৌগিক শর্তাধীন বিবৃতি। সম্পূর্ণতার জন্য, ফানক <...> ভিত্তিক সংস্করণটি সি # শর্তসাপেক্ষ বিবৃতি হিসাবে 4 গুণ বেশি সময় নিয়েছে তবে এটি এখনও খুব দ্রুত এবং বেশিরভাগ ব্যবহারের ক্ষেত্রে এটির ক্ষেত্রে বড় বাধা হওয়ার সম্ভাবনা নেই।
আমি উপরের যে কোনও ধারণা / ইনপুট / সমালোচনা / ইত্যাদিকে স্বাগত জানাই (বা আরও সমৃদ্ধ সি # ভাষা সহায়তার সম্ভাবনার উপর ... এখানে আশা করি ;- পি)।
switch-case
বিবৃতি। আমাকে ভুল করবেন না, আমি মনে করি এটির জায়গা আছে এবং আমি সম্ভবত এটি প্রয়োগ করার উপায় খুঁজব।