'Var' কীওয়ার্ডটি ব্যবহার করে বনামের পরিবর্তে ভেরিয়েবল ডেটা ধরণের সংজ্ঞা দেওয়া হয়েছে? [বন্ধ]


35

সি # তে, আমি কি প্রতিটি পরিবর্তনশীল ঘোষণার জন্য সর্ব-উদ্দেশ্য ভ্যার কীওয়ার্ডটি ব্যবহার করতে উত্সাহিত করছি? যদি হ্যাঁ, নীচের বিবৃতিতে দশমিকের জন্য এম এর মতো পরিবর্তনশীল ঘোষণার মধ্যে আক্ষরিক মানগুলির জন্য আমি কি বিশেষ বর্ণগুলি উল্লেখ করতে পারি:

var myDecimal = 14.5M;

যদি এটি কোনও পার্থক্য করে, আমি সি # দিয়ে কিছু ওয়েব বিকাশ করার চেষ্টা করছি।


7
এসও (যেখানে এটি আইএমএইচওর অন্তর্গত) এ এক ডজন ডুপস রয়েছে।

1
সি ++ 0 এক্স পুনর্নির্ধারণের সাথে একই প্রশ্নগুলি সি ++ এ আসছে auto
ডেভিড থর্নলি

5
সি # সংকলক দলের এরিক লিপার্ট সম্প্রতি এই সম্পর্কে ব্লগ করেছেন: ব্লগস.এমএসডিএন
টিম গুডম্যান

এই প্রশ্নের ছয় বিলিয়ন ডুপস আছে।
ডেড এমজি

@ ডেড এমজি যা ছয় বিলিয়ন এবং এক করে।
ওয়াসিমানস

উত্তর:


53

ভের ব্যবহার নিয়ে বহু বিতর্ক হয়েছে। আমার সাধারণ নিয়ম নীচে দেওয়া হয়।

  • যখন টাইপটি স্পষ্ট হয় যেমন অ্যাসাইনমেন্টের ডান হাতটি যখন কনস্ট্রাক্টর থাকে তখন var ব্যবহার করুন।
  • যখন টাইপটি লিখতে জটিল হয়, যেমন একটি লিনকিউ কোয়েরি (প্রথম স্থানে বর্ণের কারণ) ব্যবহার করুন।
  • দ্বিপাক্ষিক প্রকারের জন্য (আপনার দশমিক একটি উদাহরণ হিসাবে) যেখানে আপনি নিশ্চিত করতে চান যে আপনার ভেরিয়েবলটি সঠিকভাবে টাইপ করা হয়েছে, সেখানে বানানটি বানান।
  • বেনামে ধরণের বর্ণ ব্যবহার করতে হয়।
  • অন্যান্য সমস্ত ক্ষেত্রে প্রকারটি বানান করে।

মূলত, লক্ষ্যটি কোডটি পড়া আরও সহজ করে তোলা। অ্যাসাইনমেন্ট সুস্পষ্ট হওয়ায় আপনি যদি ভেরিটি যথেষ্ট বলে মনে করেন তবে var ব্যবহার করুন। আপনার যখন প্রয়োজন মনে হয় তখন পুরো টাইপের নামটি পাঠকের জন্য ইঙ্গিত হিসাবে ব্যবহার করুন।


9
আমি foreachবিবৃতিগুলিতে 'ভার' ব্যবহার করি যেখানে আমি কেবল কোনও সংগ্রহের গণনার বিষয়ে যত্নশীল, প্রতিটি আইটেমের ধরণের বিষয়ে অগত্যা নয়।
অ্যাডাম শিখুন

1
এবং জেসি যেমন বেনামে প্রকারের দিকে ইঙ্গিত করেছেন;)
মাইকেল ব্রাউন

4
@ আন্নাল্লায় মাঝে মাঝে আপনার যত্ন নিতে হবে। ফোরচ (ডেটাটেবলের ক্ষেত্রে ভার সারি ows Rows) এই ক্ষেত্রে var হ'ল একটি প্রত্যাশা হিসাবে ডেটারো নয় এমন একটি বস্তু।
থানোস পাপাথানাসিউ

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

আমি যখন আমার ভেরিয়েবলের ধরণের বিষয়ে নিশ্চিত হতে চাই (সাধারণত যখন মানটি উদাহরণস্বরূপ দ্বিগুণ হয় তা নিশ্চিত করতে চাই) বাদে আমি সাধারণত
ভের

14

কখন ব্যবহার করতে হবে varতা হল একটি প্রোগ্রামিং "পবিত্র যুদ্ধ"। এটির প্রয়োজন ঠিক সেখানে একটি জায়গা রয়েছে: যখন কোনও অপারেশনের ফলাফল একটি বেনামী প্রকার তৈরি করে, যেমন:

var result = new { Name = "John", Age = 35 };

অন্য যে কোনও জায়গায়, এটি ব্যবহারের জন্য আপনার কোডিং স্ট্যান্ডার্ডটি optionচ্ছিক এবং সত্যই এটি অন্য পরিস্থিতিতে না in

এবং হ্যাঁ, সংকলকটি ডানদিকে কী রয়েছে তা জানতে সংক্ষিপ্তটির জন্য আপনার বিশেষ অক্ষরগুলির প্রয়োজন হবে। আপনার উদাহরণে, ছাড়া M, ডিফল্ট doubleপরিবর্তে হয় decimal


1
অজ্ঞাতনামা সব সম্পর্কে ভুলে গেছেন!
মাইকেল ব্রাউন 18

আমার শেষ চাকরিতে আমাকে বলা হয়েছিল যে আমি "ভার" শব্দটি ব্যবহার করা চালিয়ে গেলে আমাকে বরখাস্ত করা হবে ...
হাঞ্জোলো

এটি চরম, তবে আপনার সংস্থার উদ্যোগ। যদিও আপনার "শেষ" কাজটি খুশি! :)
জেসি সি স্লিকার

7

এমএসডিএন থেকে :

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

আমি সত্যিই প্রকৃতপক্ষে টাইপিং পছন্দ করি না। পৃষ্ঠে এটি কোডকে আরও পঠনযোগ্য করে তোলে তবে রাস্তায় প্রচুর সমস্যা দেখা দিতে পারে। যদি কোনও ডিভ একটি পরিবর্তনশীল ইনিশিয়ালাইজার পরিবর্তন করে তবে তা থেকে বলুন

var myFloat=100f;

থেকে

var myFloat=100;

অথবা

var myFloat=100.0;

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

অন্তর্নিহিত টাইপিংও সর্বত্র কাজ করে না (একই এমএসডিএন লিঙ্ক থেকে)

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

শ্রেণীর ক্ষেত্রের ক্ষেত্রে ক্ষেত্রগুলিতে var ব্যবহার করা যাবে না।

ভের ব্যবহার করে ঘোষিত চলকগুলি আরম্ভের অভিব্যক্তিটিতে ব্যবহার করা যায় না। অন্য কথায়, এই অভিব্যক্তিটি বৈধ: int i = (i = 20); তবে এই অভিব্যক্তিটি একটি সংকলন-সময় ত্রুটি তৈরি করে: var i = (i = 20);

একাধিক সূক্ষ্মভাবে টাইপযুক্ত ভেরিয়েবল একই বিবৃতিতে আরম্ভ করা যাবে না।

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

আপনার কোডকে সামঞ্জস্য রাখা (এক্ষেত্রে, সর্বত্র স্পষ্টত টাইপিং ব্যবহার করে) খুব খুব ভাল জিনিস। আমার মতে, varঅলস এবং কোন সত্য উপকার সরবরাহ করে না, এবং ইতিমধ্যে জটিল প্রক্রিয়াতে ব্যর্থতার আরেকটি সম্ভাব্য বিন্দুর পরিচয় দেয়।

2017 আপডেট

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


@ 3 ডিভে আপনার মন কী বদলেছে তা ভাবছেন। আমি এখনও আপনার মূল বিষয়টির সাথে 100% একমত: "ভার অলস এবং সত্যিকারের কোনও উপকার সরবরাহ করে না, এবং ইতিমধ্যে জটিল প্রক্রিয়াতে ব্যর্থতার আর একটি সম্ভাব্য বিন্দুর পরিচয় দেয়"।
ড্যান

@ ড্যান এটি পাঠযোগ্যতার জন্য সত্যই নেমে এসেছিল। একজন সক্ষম বিকাশকারী খুব শীঘ্রই নির্ধারণ করতে পারে যে কোনও ইস্যু ছাড়াই কোনও ঘোষণার সূচনার দিকে কী রয়েছে। ঠিক this.সর্বত্র ব্যবহার না করা বা একটিটির System.Blah.SomeTypeপরিবর্তে বলার মতো using, যা আমি এখনও অবিশ্বাস্যরূপে বিরক্তিকর বলে মনে করি, আরও সংক্ষিপ্ত কোডটি হ'ল - আমার পক্ষে কমপক্ষে - দৃশ্যত পার্স করা সহজ। এখনও অনেক পরিস্থিতিতে আছে যেখানে সুস্পষ্ট টাইপিং সঠিক পছন্দ। তবে, আজকের দিনে আমি কোনও ক্লিন কোডের বাইরে ক্লিন কোড আনার চেষ্টা করার চেয়ে ভাষা আইনজীবীর চেয়ে কম।
ডিভে

@ ড্যান (অবশ্যই, আমি সেই লোকটিও। সি পি পি using namespace std;ফাইলগুলিতে ব্যবহার করি ((শিরোনাম নয়, আমি
পছন্দযুক্ত

3

সি # রেফারেন্সটি এই নির্মাণের ভাল বনাম খারাপ ব্যবহার চিত্রিত করতে নিম্নলিখিতটি দেখায়:

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

 // Example #1: var is optional because 
    // the select clause specifies a string 
    string[] words = { "apple", "strawberry", "grape", "peach", "banana" };
    var wordQuery = from word in words
                    where word[0] == 'g'
                    select word;

    // Because each element in the sequence is a string,  
    // not an anonymous type, var is optional here also. 
    foreach (string s in wordQuery)
    {
        Console.WriteLine(s);
    }

    // Example #2: var is required because 
    // the select clause specifies an anonymous type 
    var custQuery = from cust in customers
                    where cust.City == "Phoenix" 
                    select new { cust.Name, cust.Phone };

    // var must be used because each item  
    // in the sequence is an anonymous type 
    foreach (var item in custQuery)
    {
        Console.WriteLine("Name={0}, Phone={1}", item.Name, item.Phone);
    }

0

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


0

আমার জন্য আমি নিম্নলিখিত কেসগুলির জন্য ভের ব্যবহার করি না:

  • যখন আমি আমার ভেরিয়েবলের ধরণের বিষয়ে নিশ্চিত হতে চাই (উদাহরণস্বরূপ নিশ্চিত হওয়া যে ব্যবহার করা টাইপটি দ্বিগুণ এবং দশমিক নয়, এবং এটি আমার উপর বিশ্বাস রাখার একটি বড় বিষয়!)
  • পলিমারফিক কোড পছন্দ করুন Fruit foo = new Apple();। এই ক্ষেত্রে, আমার মতে ভেরটি হ'ল অভিভাবক শ্রেণিটি এড়ানো এবং ব্যবহারের সম্ভাব্য বাগগুলির সীমাবদ্ধতার (আরও ভাল, বহুবর্ষীয় ধারণাটির কোনও চেক নেই!) আরও ভাল বোঝার সুযোগ দিয়ে (এখানে ফল) ব্যবহার করা ভাল is

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

আপনাকে আপনার ব্যক্তিগত মতামত তৈরি করতে হবে :)

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