সি # তে গতিশীল প্রকারের ব্যবহারের ত্রুটিগুলি


14

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

আমি মনে করি কীওয়ার্ডের দ্বারা সরবরাহিত নমনীয়তাটি ইচ্ছায় ডেটা ধরণের পরিবর্তন করতে সক্ষম হওয়াই একটি দুর্দান্ত সুবিধা

প্রশ্ন হচ্ছে,

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


3
সি # 3 এ, আমি সর্বদা objectবা সরাসরি টাইপের ক্যাসেটের ব্যবহারকে কোড-গন্ধ হিসাবে বিবেচনা করি। প্রায় প্রতিটি ক্ষেত্রেই এর অর্থ হ'ল আমি বা আমার টিমের একজন সেই কার্যকারিতার জন্য উপযুক্ত ইন্টারফেসটি তৈরি করেনি। আমি অনুমান করছি যে যদি আমি সি # 4 ব্যবহার করছেন সেটি এখন আমি প্রায় কাছাকাছি ব্যবহার সম্পর্কে একই ভাবে বোধ করবে dynamicখুব। আপনি যদি সবকিছুকে গতিময় করে তোলেন তবে আমি এর জন্য কেসটি দেখতে পেলাম তবে সেই ক্ষেত্রে আপনি প্রথমে একটি গতিশীল টাইপ করা ভাষা বেছে নিতে পারেন। * 8 ')
মার্ক বুথ

দৃষ্টিকোণ জন্য @ মার্কবুত +1। তবে কি এটি নিরাপদে বলা যায় যে সি # ব্যবহার করে মূল বাস্তবায়নটি এখনও 4.0 তে গতিশীল ধরণের প্রবর্তন সত্ত্বেও দৃ strongly়ভাবে টাইপ করা যাচ্ছে
কার্তিক শ্রীনীভাসন

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

@EdJames - একটি মহান ব্যবহারের মতো শোনায় dynamic, প্লাস আমি IronPython সম্পর্কে জানতাম আমি যখন নেট সঙ্গে উন্নয়নশীল ছিল - এটা কিছু জিনিস আমরা কি করতে চেষ্টা করছিলেন দলে পরিণত করতে পারেন অনেক সহজ।
মার্ক বুথ

উত্তর:


16

প্রধান অসুবিধাটি হ'ল আপনি সি # এর মূল বৈশিষ্ট্যগুলির একটি (প্রয়োজনীয় সুবিধার জন্য নয়) ফেলে দিন - এটি স্ট্যাটিকালি টাইপ করা (এবং বেশিরভাগ অংশের জন্য নিরাপদ)।

ডায়নামিক টাইপিংয়ের সমস্যাটি হ'ল এটি প্রায়শই বাগগুলি লুকিয়ে রাখে যা সংকলনের সময় প্রকাশিত হবে। এই জাতীয় বাগটি কেবল তখন রান-টাইমে প্রকাশ পায় যা অবশ্যই এটি সনাক্ত করা আরও কঠিন করে তোলে।

সি # তে ডায়নামিক টাইপিংয়ের আইএমওর খুব কম কারণ রয়েছে, প্রধানটি হ'ল ডায়নামিকালি টাইপ করা ভাষাগুলির সাথে সহযোগিতা (এটি ডায়ামিককে প্রথম স্থানে প্রবর্তন করার কারণে আফ্রিক)।

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


আয়রন পাইথনের জন্য +1। এর অর্থ এটি দীর্ঘকাল ধরে রক্ষণাবেক্ষণের সমস্যার দিকে নিয়ে যেতে পারে।
কার্তিক শ্রীনিবাসন

6
dynamicআপনাকে যে বড় জিনিসটি দেয় তা হ'ল কোনও ধরণের প্রতিবিম্ব হ্যাক ছাড়াই কোনও বস্তুকে তার আসল প্রকারে আপ-কাস্ট করার ক্ষমতা। উদাহরণস্বরূপ যদি Base foo = new Derived();এবং সেখানে দুটি ওভারলোডেড পদ্ধতি ছিল Moo(Base x)এবং Moo(Derived x)তারপরে Moo(foo)কল Moo(Base x), তবে Moo((dynamic)foo)কলগুলি Moo(Derived x)। এটি উদাহরণস্বরূপ দর্শনার্থী প্যাটার্নটির একটি খুব মার্জিত বাস্তবায়নের দিকে পরিচালিত করে: কোড.লগস.com / blog / 2010 / 03 /… এবং সাধারণভাবে এটি একটি খুব শক্তিশালী কৌশল।

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

@ দ্য মাউথোফোকা একটি অপেক্ষাকৃত নতুন ডিজাইনের প্যাটার্ন (দর্শনার্থী প্যাটার্ন) লক্ষ করুন। ধন্যবাদ।
কার্তিক শ্রীনিবাসন

1
হ্যাঁ, এটি দুর্দান্ত। আমি গত সপ্তাহে স্বাধীনভাবে এটি নিয়ে এসেছি, সুতরাং এটি দেখে ভাল লাগল যে এটি একটি স্বীকৃত ধারণা যা সি # অস্ত্রাগারে গৃহীত হয়েছে।

9

আপনি কী ধরনের ত্রুটিগুলি সন্ধান করছেন তা আমি নিশ্চিত নই, তবে আপনি যদি এমন বৈশিষ্ট্যগুলি সম্পর্কে জানতে চান যা স্থির টাইপিংয়ের সাথে কাজ করে তবে এর সাথে না, তবে dynamicকয়েকটি আছে:

  1. এক্সটেনশন পদ্ধতিগুলি কাজ করে না। এটি সম্ভবত সবচেয়ে বড়। আপনার কাছে থাকলে dynamic collectionআপনি কোডের মতো ব্যবহার করতে পারবেন না collection.Distinct()। এর কারণ উপলভ্য এক্সটেনশন পদ্ধতিগুলি নেমস্পেসের উপর নির্ভর করে usingএবং ডিএলআর তাদের জানার উপায় নেই has

    একটি ওয়ার্কঅ্যারাউন্ড হিসেবে, আপনি পারেন পদ্ধতি ডাকা যাবে যেমন যদি এটা ছিল স্বাভাবিক স্ট্যাটিক পদ্ধতি: Enumerable.Distinct(collection)। অথবা আপনি সংগ্রহের ধরণটিকে এমন কিছুতে পরিবর্তন করতে পারেন IEnumerable<dynamic>

  2. foreachপ্রয়োজন IEnumerable। সাধারণ সি # foreachতে প্যাটার্ন-ভিত্তিক। এটির জন্য এটি কোনও নির্দিষ্ট ইন্টারফেসের প্রয়োজন হয় না, কেবল একটি GetEnumerator()পদ্ধতি যা উপযুক্ত অবজেক্টটি ফিরিয়ে দেয়। আপনি যদি এটি ব্যবহার foreachকরেন dynamicতবে বাস্তবায়ন IEnumerableপ্রয়োজন। তবে যেহেতু এই আচরণের কারণটি হ'ল সি # 1.0 এর জেনারিক ছিল না, এই "ঘাটতি" বেশ অপ্রাসঙ্গিক।


এক্সটেনশন পদ্ধতির জন্য +1। এটি অন্যান্য লিনকিউ ক্যোয়ারী অপারেটরদের যেমন গ্রুপবি () এর ক্ষেত্রেও প্রযোজ্য?
কার্তিক শ্রীনিবাসন

2
@ কার্তিক: হ্যাঁ তা করে। আমি মনে করি এক্সটেনশন পদ্ধতিগুলি সময় সিনট্যাকটিক চিনি সংকলন করে, তাই এগুলি যে সমাধান হয় না তা এই সত্য।

@ দ্য মাউথোফোকা +1 - স্পষ্টির জন্য ধন্যবাদ।
কার্তিক শ্রীনিবাসন

1
আমি এক্সটেনশন পদ্ধতিগুলির সাথে একমত, যেমন কীভাবে গতিশীল চলমান সময়ে এক্সটেনশন পদ্ধতিগুলি সনাক্ত করতে পারে না তবে আপনি যে গতিশীল সংগ্রহটি বর্ণনা করেছেন তা আমি অনুসরণ করতে পারি না।
কার্তিক শ্রীনিবাসন

7

নেট এ ডায়নামিক ধরণের (পরিবর্তনশীল নয় ডায়নামিক হিসাবে ঘোষিত) সমস্যাটি হ'ল স্থির ধরণের ক্ষেত্রে তাদের কার্যকারিতা প্রচুর নেই।

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

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


6

যেহেতু dynamicএটি কেবল একটি চিহ্নিত objectএটির মূল্য ধরণের বাক্স।

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

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


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