ধ্রুবকটি ব্যবহার করার জন্য এটি কি সঠিক পরিস্থিতি?


42

সুতরাং আমার অধ্যাপক যে প্রকল্পে আমি কাজ করছি তার বিষয়ে কিছু প্রতিক্রিয়া ফিরিয়ে দিচ্ছিলাম। তিনি এই কোডটির জন্য কয়েকটি চিহ্ন ডক করেছেন:

if (comboVendor.SelectedIndex == 0) {
  createVendor cv = new createVendor();
  cv.ShowDialog();
  loadVendors();
}

এটি একটি কম্বোবক্সে "সূচক পরিবর্তিত" হ্যান্ডলারে রয়েছে। যখন ব্যবহারকারী কোনও নতুন বিক্রেতা তৈরি করতে চান তখন এটি ব্যবহার করা হয়, আমার শীর্ষ বিকল্প (সূচি 0, যা কখনই পরিবর্তন হয় না) "একটি নতুন বিক্রেতার তৈরি করুন" ডায়ালগটি খুলবে। সুতরাং আমার কম্বো বাক্সের সামগ্রীটি দেখতে দেখতে শেষ হবে:

Create New Vendor...
Existing Vendor
Existing Vendor 2
Existing Vendor 3

প্রথম সমস্যাটি তার প্রথম সমস্যা:

if (comboVendor.SelectedIndex == 0)

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

বিষয়টি হ'ল আমি বুঝতে পারি না কেন আমি কেন সেই পরিস্থিতিতে সেই কোডটিকে স্থির করতে চাই। সেই সূচকটি কখনই বদলাবে না বা এটি এমন কিছু নয় যা আপনাকে টুইট করতে হবে। মনে হয় একক 0 টি মেমরিতে রাখার স্মৃতি নষ্ট হয়ে যা খুব নির্দিষ্ট পরিস্থিতির জন্য ব্যবহৃত হয় এবং কখনই পরিবর্তন হয় না।


32
সে কৌতূহলবশত হচ্ছে। ম্যাজিক নম্বরগুলি সাধারণত এড়ানো ভাল thing আমি মনে করি -1, 0 এবং 1 এই নিয়মের ব্যতিক্রম হিসাবে বিবেচিত হতে পারে। এছাড়াও, এর মতো ধ্রুবকটি আক্ষরিক 0 এর চেয়ে বেশি জায়গা নেয় না
ডেভ মুনি

23
@ ডেভমুনি: আপনি কি নিশ্চিত যে আপনি এখানে হাঁটু-ঝাঁকুনির প্রতিক্রিয়া করছেন না? এটি সত্য যে " -1ইন str.indexOf(substr) != -1" strরয়েছে substrএমন জিনিসগুলি যথাযথভাবে ন্যায়সঙ্গত। তবে এখানে, 0 এর অর্থটি না হয় সুস্পষ্ট (নতুন বিক্রেতার তৈরির সাথে কী সম্পর্ক?) বা সত্যিকারের ধ্রুবক (যদি কোনও নতুন বিক্রেতার তৈরির উপায় পরিবর্তিত হয় তবে কী হবে)।

62
নিয়মগুলি ভেঙে ফেলার আগে আপনাকে নিয়মগুলি শিখতে হবে
রায়থাল

12
আমার এই পদ্ধতিটি আমার উপর অপ্রত্যাশিতভাবে ব্যর্থ হয়েছিল। তালিকাটি বর্ণমালা অনুসারে বাছাই করা হয়েছিল। আমি ব্যবহার করেছি - - নতুন তৈরি করুন - - যাতে ড্যাশগুলি প্রথম এবং হার্ড কোডিং সূচক 0 কে ক্রিয়েটনিউ পদ্ধতিতে সাজান would তারপরে কেউ একটি আইটেম যুক্ত করেছে একটি একক উদ্ধৃতি 'আমার আইটেম' দিয়ে যা ড্যাশ দেওয়ার আগে সাজানো। আমার হার্ড কোডিং এর ফলে পরবর্তী সময় তালিকাটি লোড হওয়ার পরে প্রোগ্রামটি ক্র্যাশ হয়ে গেছে। গ্রাহকের ডেটা পুনরুদ্ধার করতে আমাকে নিজেই তালিকার ডেটা ফাইলটি সংশোধন করতে হয়েছিল।
হ্যান্ড-ই-ফুড

14
আপনি int.Zeroতাকে খুশি করতে পরিবর্তে ব্যবহার করতে পারেন :)
পল স্টোভেল

উত্তর:


90

সি # তে এটি করার আসল সঠিক উপায় হ'ল কম্বো আইটেমগুলির ক্রমের উপর নির্ভর না করা

public partial class MyForm : Form
{
    private readonly object VENDOR_NEW = new object();

    public MyForm()
    {
        InitializeComponents();
        comboVendor.Items.Insert(0, VENDOR_NEW);
    }

    private void comboVendor_Format(object sender, ListControlConvertEventArgs e)
    {
        e.Value = (e.ListItem == VENDOR_NEW ? "Create New Vendor" : e.ListItem);
    }

    private void comboVendor_SelectedIndexChanged(object sender, EventArgs e)
    {
        if(comboVendor.SelectedItem == VENDOR_NEW)
        {
            //Special logic for selecting "create new vendor"
        }
        else
        {
            //Usual logic
        }
    }
}

22
ঠিক আছে, এটি যদি সি # হয় তবে আপনার ধ্রুবকগুলির জন্য ALL_CAPS ব্যবহার করা উচিত নয়। ধ্রুবক PascalCased করা হবে না - stackoverflow.com/questions/242534/...
Groky

4
@ গ্রোকি: এ বিষয়টি কেন? তিনি কীভাবে তার অবিচ্ছিন্নদের নাম রাখেন সে সম্পর্কে কে চিন্তা করে? এটি যদি 100% ধ্রুব থাকে তবে তিনি যদি ধ্রুবকগুলির জন্য ধারাবাহিকভাবে ALL_CAPS ব্যবহার করেন।
মার্কো ফিসেট

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

2
এটি এখনও ভুল। এটি একটি পূর্ণসংখ্যা আক্ষরিক (শূন্য) থেকে স্ট্রিং আক্ষরিক (নতুন বিক্রেতার তৈরি করুন) এ পরিবর্তন করে। সর্বোপরি সমস্যাটি এখন 'যদি সূচী পরিবর্তন হয় তবে' পরিবর্তে 'কী লেবেল পরিবর্তন হয়' what
ফ্রেইহাইট

7
@ ফ্রেইহাইট: ভুল। এখানে স্ট্রিং ধ্রুবকটি কেবল প্রদর্শনের জন্য; এটি প্রোগ্রামের যুক্তিকে যা কিছু প্রভাবিত করে না। প্রোগ্রাম-স্টেট সংরক্ষণের জন্য যাদু-মান / স্ট্রিং ব্যবহারের বিপরীতে, এই স্ট্রিংটি পরিবর্তন করা (বা তালিকা থেকে জিনিসগুলি যুক্ত / অপসারণ) কখনই কোনও কিছু ভাঙ্গতে পারে না।
ব্লুরাজা - ড্যানি পিফ্লুঘুফুট

83

কম্বো বাক্সে ক্রম পরিবর্তন হতে পারে। যদি আপনি "নতুন বিক্রেতার তৈরি করুন ..." এর আগে আপনি "বিশেষ বিক্রেতার তৈরি করুন ..." এর মতো অন্য বিকল্প যুক্ত করেন তবে কী হবে?

ধ্রুবকটি ব্যবহারের সুবিধাটি হ'ল যদি এমন অনেক পদ্ধতি রয়েছে যা কম্বো বাক্সের ক্রমের উপর নির্ভর করে, আপনাকে কেবল ধ্রুবকটি পরিবর্তন করতে হবে এবং যদি এটি পরিবর্তন হয় তবে সমস্ত পদ্ধতিও পরিবর্তন করতে হবে না।

একটি ধ্রুবক ব্যবহার আক্ষরিকের চেয়ে বেশি পঠনযোগ্য।

if (comboVendor.SelectedIndex == NewVendorIndex)

বেশিরভাগ সংকলিত ভাষা সংকলনের সময় ধ্রুবককে প্রতিস্থাপন করবে, সুতরাং কার্য সম্পাদনের কোনও জরিমানা নেই।


5
আমি পরিবর্তিত করতে পারে এমন একটি সূচকের উপর নির্ভর করার পরিবর্তে মান বৈশিষ্ট্যের একটি বর্ণনামূলক কোড ব্যবহার করব (তালিকার নীচে তৈরি বিকল্পটি সরানো, ধ্রুবক পদ্ধতিটি একেবারে ভেঙে ফেলবে)। তারপরে ঠিক সেই কোডটি সন্ধান করুন।
ক্যাফগীক

1
@ চ্যাড আমি সম্মতি দিচ্ছি যে গুইতে অর্ডার দ্বারা নিয়ন্ত্রণগুলি সনাক্ত করা খুব ভঙ্গুর। যদি ভাষাটি দেখা যায় যে গুই উপাদানটিতে একটি মান যুক্ত করা সমর্থন করে, আমি এটি ব্যবহার করব।
মাইকেল ক্রসেল 1'11

3
@ সমাধান কারণ এটি কনভেনশন।
Ikke

3
@ ইক্কে এটি অবশ্যই কনভেনশন নয়। stackoverflow.com/questions/242534/…
সমাধান

1
যদি আমরা সি # এর কথা বলি তবে নিউভেন্ডরআইডেক্স হ'ল কনভেনশন। এটি নেট। শৈলীর বাকী অংশের সাথে সামঞ্জস্যপূর্ণ।
মার্চ

36

আপনি যে পরিস্থিতিটি বর্ণনা করেছেন এটি একটি রায় কল, ব্যক্তিগতভাবে আমি যদি এটি কেবল একবার ব্যবহার করা হয় এবং ইতিমধ্যে পাঠযোগ্য হয় তবে আমি এটি ব্যবহার করব না।

যদিও আসল উত্তরটি হ'ল তিনি আপনাকে পাঠ দেওয়ার জন্য এটিকে বেছে নিয়েছিলেন।

ভুলে যাবেন না যে তিনি একজন অধ্যাপক, তাঁর কাজ হ'ল আপনাকে কোডিং এবং সেরা অনুশীলন শেখানো।

আমি বলতে চাই তিনি আসলে খুব ভাল কাজ করছেন।

অবশ্যই তিনি কিছুটা নিখুঁত হয়ে আসতে পারেন তবে আমি নিশ্চিত আপনি যাদু সংখ্যা ব্যবহার করার আগে আবার চিন্তা করবেন।

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

আপনার অধ্যাপকের কাছে হ্যাটস


ইঙ্গিত করার জন্য +1, এই ক্ষেত্রে, উপায়গুলি শেষ ফলাফলকে ন্যায়সঙ্গত করে
অলিভার-ক্লের

@ থানোস- " ভুলে যাবেন না যে তিনি একজন অধ্যাপক, তাঁর কাজ হ'ল আপনাকে কোডিং এবং সেরা অনুশীলন শেখানো to " আমার অধ্যাপকের ক্ষেত্রে এটি কখনও হয়নি। আমি বলব তার কাজটি আপনাকে পাঠদান করা যা বিভাগটি কোর্সটি তৈরি হওয়ার পরে গুরুত্বপূর্ণ মনে করে।
রামহাউন্ড

13

[...] আমার শীর্ষ বিকল্প (সূচক 0, যা কখনই পরিবর্তন হয় না) "একটি নতুন বিক্রেতার তৈরি করুন" কথোপকথনটি খুলবে।

এই সত্যটি যে আপনাকে ব্যাখ্যা করতে হয়েছিল তা প্রমাণ করে যে আপনার কেন ধ্রুবক ব্যবহার করা উচিত। আপনি যদি ধ্রুবকটির মতো পরিচয় করিয়ে দেন তবে NEW_VENDOR_DIALOGআপনার কোডটি আরও স্ব-ব্যাখ্যামূলক হবে। এছাড়াও, সংকলকরা ধ্রুবকগুলিকে অপ্টিমাইজ করে, সুতরাং কার্য সম্পাদনের কোনও পরিবর্তন হবে না।

প্রোগ্রামারদের জন্য প্রোগ্রাম লিখুন, সংকলক নয়। আপনি যদি বিশেষত মাইক্রো-অপ্টিমাইজ করার চেষ্টা না করেন তবে এটি আপনার মতো বলে মনে হয় না।


2
এমনকি পারফরম্যান্স উল্লেখ করার জন্য। অপ্টিমাইজড না হলেও কোনও কম্পিউটার ব্যবহারকারীর বিজ্ঞপ্তির আগে বিলিয়ন কোটি ক্রিয়াকলাপ করতে পারে।
বরিস ইয়াঙ্কভ

3
@ বরিস ওপিকে সম্পদের অপচয় সম্পর্কে উদ্বিগ্ন বলে মনে হয়েছিল, যার কারণেই আমি এটি উল্লেখ করেছি। আমার উত্তরটি কী কারণে কম সঠিক হবে তা আমি দেখছি না।
কেবি

12

তিনি দাবি করেন যে 0 টি অবশ্যই একটি ধ্রুবক হওয়া উচিত এবং এর কারণেই তিনি আমাকে চিহ্ন দিয়েছিলেন।

আমি রাজি হই এখানে শূন্যের ব্যবহার হ'ল "যাদু"। কল্পনা করুন যে আপনি এই কোডটি প্রথমবারের মতো পড়ছেন। শূন্য কেন বিশেষ তা আপনি জানেন না এবং শূন্য কেন বিশেষ তা সম্পর্কে আক্ষরিক আপনাকে কিছুই বলেন না। পরিবর্তে যদি আপনি বলে থাকেন if(comboVendor.SelectedIndex == CreateNewVendorIndex)তবে কোডটির অর্থ কী তা প্রথম-বারের পাঠকের পক্ষে অত্যন্ত স্পষ্ট হয়ে যায়।

তার দাবি, আমার কোডে আমার আর আক্ষরিক ব্যবহার করা উচিত নয়।

এটি চরম অবস্থান; বাস্তবের অবস্থানটি বলতে হবে যে আক্ষরিক ব্যবহার একটি লাল পতাকা যা নির্দেশ করে যে কোডটি যতটা পরিষ্কার হতে পারে তেমন পরিষ্কার হতে পারে না। কখনও কখনও এটি উপযুক্ত।

বিষয়টি হ'ল আমি বুঝতে পারি না কেন আমি কেন সেই পরিস্থিতিতে সেই কোডটিকে স্থির করতে চাই। সেই সূচকটি কখনই বদলাবে না

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

বা এটি এমন কিছু নয় যা আপনাকে টুইট করতে হবে।

সত্যি? আপনি এমন কোনও পরিস্থিতি দেখতে পাচ্ছেন না যাতে কেউ কম্বো বাক্সে জিনিসগুলির ক্রম পরিবর্তন করতে চায়?

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

মনে হয় একক 0 টি মেমরিতে রাখার স্মৃতি নষ্ট হয়ে যা খুব নির্দিষ্ট পরিস্থিতির জন্য ব্যবহৃত হয় এবং কখনই পরিবর্তন হয় না।

এখন আমরা বিষয়টি নিয়ে আসি।

এটি সম্ভবত আপনার প্রশ্নের সবচেয়ে গুরুত্বপূর্ণ রেখা কারণ এটি ইঙ্গিত দেয় যে আপনার কাছে (1) স্মৃতি এবং (2) অপ্টিমাইজেশন সম্পর্কে গভীরভাবে ত্রুটিপূর্ণ বোঝাপড়া রয়েছে। আপনি শেখার জন্য স্কুলে রয়েছেন এবং মৌলিক বিষয়গুলির সঠিক বোঝার জন্য এখন দুর্দান্ত সময় হবে। আপনি কেন বিশদটি ব্যাখ্যা করতে পারেন যে আপনি কেন "বিশ্বাস করে যে একক শূন্যকে স্মৃতিতে রেখে দেওয়া স্মৃতির অপচয়"? প্রথমত, আপনি কেন বিশ্বাস করেন যে ব্যবহারকারীর-ঠিকানাযোগ্য স্টোরেজটির কমপক্ষে দুই বিলিয়ন বাইট সহ একটি প্রক্রিয়াতে চার বাইট মেমরির ব্যবহারটি অনুকূল করা প্রাসঙ্গিক? দ্বিতীয়ত, আপনি কী উত্সটি অবিকল এখানে কল্পনা করছেন ? "স্মৃতি" গ্রাস করার অর্থ কী?

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


6

সে সঠিক. তুমি ঠিক বলছো. আপনি ভুল.

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

বলা হচ্ছে, আপনি ঠিক বলেছেন। এই নির্দিষ্ট ক্ষেত্রে, আমি সত্যিই মনে করি না যে একটি ধ্রুবককে সাজানো হয়েছে। আপনি তালিকার প্রথম আইটেমটি সন্ধান করছেন যা সর্বদা শূন্য থাকে। এটি কখনই 23 হবে না Or বা -পি। আপনি বিশেষত শূন্য খুঁজছেন। কোডটি ধ্রুবক তৈরি করে আপনার আপত্তিজনক হওয়া দরকার বলে আমি আসলেই ভাবি না।

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


1
তৃতীয় অনুচ্ছেদের জন্য না হলে আমি প্রায় এই উত্তরটি দিয়েছিলাম, দাবি করে যে আক্ষরিক 0 ব্যবহার করা যথেষ্ট স্পষ্ট এবং কোনও ধ্রুবককে ওয়্যারেন্টস দেওয়া হয় না। আরও ভাল সমাধান হ'ল কম্বো বাক্স আইটেমটি সূচকের উপর নির্ভর না করে পরিবর্তে বাছাই করা আইটেমটির মূল্য উপর নির্ভর করে । ম্যাজিক কনস্ট্যান্টগুলি ম্যাজিক কনস্ট্যান্টগুলি এমনকি যদি তারা 0 বা 3.14 বা হোয়াট নন - এটিকে কোডটি আরও পাঠযোগ্য makes
রোল্যান্ড টেপ

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

আমি সম্মত হব না ... কেবল কোডটি দেখার থেকে, 0 এর তাত্পর্যটি কী তা অবিলম্বে স্পষ্ট হয় না - এটি সত্যই হতে পারে যে তিনি সর্বদা তালিকার প্রথম আইটেমটি সন্ধান করছেন এবং এটি এটি তবে এটি তখনই অনেক ক্লিনার পড়তে হবে, যদি তুলনাটি 'কম্বোভেেন্ডার' হয়ে থাকে e সেলেক্ট ইন্ডেক্স == ফার্স্ট ইন্ডেক্স 'পরিবর্তে?
রোল্যান্ড টেপ

2

0অর্থটি পরিষ্কার করার জন্য আমি ধ্রুবকটির সাথে প্রতিস্থাপন করতাম , যেমন NewVendorIndex। আপনার অর্ডার পরিবর্তন হবে কিনা আপনি কখনই জানেন না।


1

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

কর্পোরেট বিশ্বের জন্য ভাল প্রশিক্ষণ? বেশ সম্ভবত।


2
"আক্ষরিকটি একাধিকবার ব্যবহৃত হবে" অংশটির জন্য আমি সম্মত নই। 0 (এবং হতে পারে -1, 1) দিয়ে এটি প্রায়শই স্পষ্ট হয়, বেশিরভাগ ক্ষেত্রে কোনও জিনিসটির নাম দেওয়া ভাল যা কোডটি পড়ার পক্ষে আরও পরিষ্কার।
জোহানেস

1

সত্যি কথা বলতে, আপনার কোডটি সর্বোত্তম অনুশীলন বলে আমি মনে করি না, তবে তাঁর পরামর্শটি স্পষ্টতই কিছুটা কৌতুকপূর্ণ।

। নেট কম্বোবক্সের আরও সাধারণ অনুশীলন হ'ল "নির্বাচন করুন .." আইটেমটিকে একটি খালি মূল্য দেওয়া, যখন আসল আইটেমগুলির অর্থপূর্ণ মান থাকে এবং তারপরে এটি করুন:

if (string.IsNullOrEmpty(comboVendor.SelectedValue))

বরং

if (comboVendor.SelectedIndex == 0)

3
আপনার উদাহরণে, নাল কেবল অন্য আক্ষরিক। এই পাঠের কেন্দ্রস্থল হ'ল আক্ষরিক বিষয়গুলি এড়ানো উচিত।
ওভারস্ল্যাকড

@ ওভারস্ল্যাকড - আমার উদাহরণে কোনও শালীন নেই।
কারসন 63000

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

কারসন 000৩০০০০ - আমি আপনার ইসনুলআরএম্পটির ব্যবহারের কথা উল্লেখ করছি। আপনি অন্যের জন্য একটি "যাদু মান" অদলবদল করছেন। @ রামহাউন্ড - কিছু ক্ষেত্রে নাল একটি গ্রহণযোগ্য আক্ষরিক, কোনও প্রশ্নই আসে না, তবে আমি বিশ্বাস করি না এটি একটি ভাল উদাহরণ (যাদুটির মান হিসাবে নাল বা ফাঁকা ব্যবহার করে)।
ওভারস্ল্যাকড

"সামান্য কৌতূহল" এর জন্য -1। আপনি যখন ঠিক বলেছেন যে মানটি ব্যবহার করা আরও প্রচলিত এবং বুঝতে সহজ হবে, যদি নির্বাচিত
তালিকাটি

1

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

তার বক্তব্য যদিও ভাল। ধ্রুবকগুলির সুবিধাগুলি সম্পর্কে আপনাকে সচেতন করার এটি তাঁর উপায় হতে পারে :

1-এগুলি আপনার কোডটি কিছুটা দুর্ঘটনাক্রমে হস্তক্ষেপ থেকে রক্ষা করে

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

3-ধ্রুবকগুলি প্রকার সংরক্ষণ করে, তাই শূন্য বলতে আপনাকে 0F এর মতো কিছু ব্যবহার করতে হবে না।

4-পড়ার স্বাচ্ছন্দ্যের জন্য, সিওবিওএল শূন্য মানটির জন্য একটি সংরক্ষিত শব্দ হিসাবে জিরো ব্যবহার করে (তবে আপনাকে শাব্দিক শূন্যটি ব্যবহার করতে দেয়) - সুতরাং, একটি মান দেওয়া কখনও কখনও সহায়ক হয়, উদাহরণস্বরূপ: (উত্স: এমএস-কনস্ট্যান্টস)

class CalendarCalc
{
    const int months = 12;
    const int weeks = 52; //This is not the best way to initialize weeks see comment
    const int days = 365;

    const double daysPerWeek = (double) days / (double) weeks;
    const double daysPerMonth = (double) days / (double) months;
}

বা আপনার ক্ষেত্রে হিসাবে (@ মিশেল ক্র্যাসেল উত্তরে দেখানো হয়েছে)


2
প্রতি সপ্তাহে কয়েক দিনের জন্য কি এটি একটি অদ্ভুত সংজ্ঞা হতে চলেছে না? সপ্তাহে 7 দিন 7.4287143 নয়
উইনস্টন ইওয়ার্ট

@ উইনস্টনওয়ার্ট, আপনার মন্তব্যের জন্য ধন্যবাদ 365/52 = 7.01923076923077 = 7 + (1/52)। এখন, যদি আপনি ভগ্নাংশটি অপসারণ করেন এবং 7 * 52 গণনা করেন তবে আপনি 364 দিন পান যা এক বছরে দিনের সঠিক সংখ্যা নয়। ভগ্নাংশ থাকা হারানোর চেয়ে আরও সঠিক (যেহেতু আপনি কেবলমাত্র সংখ্যাটি প্রদর্শন করতে চান তবে 7 ফলাফল দেখানোর জন্য আপনি ফলাফলটি ফর্ম্যাট করতে পারেন)। যাইহোক, ধ্রুবক সম্পর্কে এটি এমএসের কাছ থেকে কেবল একটি উদাহরণ ছিল, তবে আপনার বিষয়টি আকর্ষণীয়।
NoChance

1
অবশ্যই এটির একটি উদাহরণ, তবে আমি আপনার বিবৃতিতে আপত্তি জানাই যে ভগ্নাংশটি অন্তর্ভুক্ত করার জন্য এটি আরও সঠিক। একটি সপ্তাহ 7 দিন হিসাবে সংজ্ঞায়িত করা হয়। আপনার সংজ্ঞা দেওয়া হয়েছে 26 সপ্তাহ 182.5 দিন যা কেবল সঠিক নয়। সত্যিই, সমস্যাটি আপনার int weeks = 52, প্রতি বছর 52 সপ্তাহ হয় না। এক বছরে 52.142857142857146 সপ্তাহ রয়েছে এবং আপনার ভগ্নাংশটি রাখা উচিত এমন সংখ্যাটি রয়েছে। অবশ্যই, একমাত্র জিনিস যা মাসের সংখ্যাটির পুরো সেটটিতে স্থির থাকে।
উইনস্টন ইওয়ার্ট

0

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


আপনি যদি দুবার ঘন ঘন বিবেচনা করেন এবং আপনার কখনও কোডটি সংশোধন করার প্রয়োজন হয় না। দুটি ক্ষেত্রে একটির পরিবর্তন করে বাগ তৈরি করা সত্যই সহজ।
বিলথোর

0

প্রকৃতপক্ষে, উল্লিখিত হিসাবে, যদি এটির অবস্থান পরিবর্তন হয়? আপনি যা করতে / করতে পারেন তা হ'ল সূচকের উপর নির্ভর করার পরিবর্তে একটি কোড ব্যবহার করা।

সুতরাং, আপনি যখন আপনার নির্বাচিত তালিকা তৈরি করেন এটি HTML এর মতো শেষ হয়

<select>
    <option value='CREATE'>Create New Vendor...</option>
    <option value='1'>Existing Vendor</option>
    <option value='2'>Existing Vendor 2</option>
    <option value='3'>Existing Vendor 3</option>
</select>

তারপর পরিবর্তে চেক এর selectedIndex === 0, চেক যে মান CREATECODEযা একটি ধ্রুবক হবে এবং উভয় এই পরীক্ষার জন্য ব্যবহার করা হয়েছে, এবং নির্বাচন করুন তালিকা তৈরি করে।


3
সম্ভবত একটি ভাল পদ্ধতির, তবে তিনি সি # ব্যবহার করছেন বলে দেখতে এইচটিএমএল সবচেয়ে আশাবাদী উদাহরণ কোড নয়।
উইনস্টন ইওয়ার্ট

0

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

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


0

অন্যরা যেমন বলেছে, প্রদত্ত ক্রমের সাথে সঙ্গতিপূর্ণ কম্বো বাক্স আইটেমটি সনাক্ত করতে আপনার সূচী সংখ্যা ছাড়া অন্য কিছু পদ্ধতি ব্যবহার করা উচিত; অথবা, আপনি কিছু প্রোগ্রামেটিক যুক্তি দিয়ে সূচকটি খুঁজে পেতে পারেন এবং এটি একটি ভেরিয়েবলের মধ্যে সঞ্চয় করতে পারেন।

আমি যে কারণটি লিখছি তা হ'ল "মেমরির ব্যবহার" সম্পর্কে আপনার মন্তব্যকে সম্বোধন করা। সি # তে, বেশিরভাগ ভাষার মতো, ধ্রুবকগুলি সংকলক দ্বারা "ভাঁজ" করা হয়। উদাহরণস্বরূপ, নিম্নলিখিত প্রোগ্রামটি সংকলন করুন এবং আইএল পরীক্ষা করুন। আপনি দেখতে পাবেন যে এই সমস্ত নম্বর এমনকি এটি আইএল হিসাবে তৈরি করে না, কম্পিউটারের স্মৃতিটি ছেড়ে দিন:

public class Program
{
    public static int Main()
    {
        const int a = 1000;
        const int b = a + a;
        const int c = b + 42;
        const int d = 7928345;
        return (a + b + c + d) / (-a - b - c - d);
    }
}

ফলাফল আইএল:

.method public hidebysig static 
    int32 Main () cil managed 
{
    .maxstack 1
    .locals init (
        [0] int32 CS$1$0000
    )

    IL_0000: nop
    IL_0001: ldc.i4.m1  // the constant value -1 to be returned.
    IL_0002: stloc.0
    IL_0003: br.s IL_0005

    IL_0005: ldloc.0
    IL_0006: ret
}

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

একটি সম্পর্কিত পয়েন্ট: ধ্রুব ফোল্ডিং স্ট্রিং লিটারালগুলিতে প্রযোজ্য। অনেকে বিশ্বাস করেন যে এই জাতীয় কলটি অত্যধিক অযথা, অকার্যকর স্ট্রিং কনটেনটেশনের কারণ ঘটায়:

public class Program
{
    public static int Main()
    {
        const string a = "a";
        const string b = a + a;
        const string c = "C";
        const string d = "Dee";
        return (a + b + c + d).Length;
    }
}

তবে আইএলটি দেখুন:

IL_0000: nop
IL_0001: ldstr "aaaCDee"
IL_0006: callvirt instance int32 [mscorlib]System.String::get_Length()
IL_000b: stloc.0
IL_000c: br.s IL_000e
IL_000e: ldloc.0
IL_000f: ret

নীচের লাইন: ধ্রুবক অভিব্যক্তিগুলিতে অপারেটরগুলি ধ্রুবক অভিব্যক্তির ফলাফল দেয় এবং সংকলক সমস্ত গণনা করে; এটি রান-টাইম পারফরম্যান্সকে প্রভাবিত করে না।

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