ভিবি কি সত্যিই সংবেদনশীল ক্ষেত্রে?


122

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

তবে এখানে আমার প্রশ্ন: ভিজুয়াল বেসিক ঘটনাটি সংবেদনশীল কোথায়? আমি যখন টাইপ করি ...

Dim ss As String
Dim SS As String

... ভিজ্যুয়াল স্টুডিও ২০০৮ বা ভিজ্যুয়াল স্টুডিও 2010 আইডিই-তে, দ্বিতীয়টির " বর্তমান ব্লকে লোকাল ভেরিয়েবল SSইতিমধ্যে ঘোষণা করা হয়েছে " এর একটি সতর্কতা রয়েছে । ভিবিএ ভিবিইতে, এটি তাত্ক্ষণিকভাবে একটি ত্রুটি লাথি দেয় না, বরং কেবল কেসটিকে স্বয়ংক্রিয়ভাবে সংশোধন করে।

ভিজুয়াল বেসিক কেস সংবেদনশীল নয় এমন যুক্তি দিয়ে আমি কি এখানে কিছু মিস করছি? (এছাড়াও, যদি আপনি জানেন বা উত্তর দিতে আগ্রহী হন তবে কেন এটি খারাপ জিনিস হবে?)

আমি কেন এই প্রশ্ন জিজ্ঞাসা করছি?

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

  1. কোড সম্পাদকের প্রতিটি একক উদাহরণ কেস সংবেদনশীল হয়ে উঠেছে (অর্থাত্ কেসটি সংশোধন হয়ে যায়) আমি চাই কিনা তা ভিজুয়াল বেসিক কেসটি সংবেদনশীল exactly
  2. ভিবি.এনইটি কেস কোনওভাবে আমি কোড দিয়ে কী করতে পারি তা সীমাবদ্ধ করে রাখলে আমার পক্ষে সি # তে যাওয়ার বিষয়টি বিবেচনা করা কি যথেষ্ট বাধ্য?

5
+1 আমি আগে ঠিক এই একই জিনিস সম্পর্কে ভেবেছি।
নেকেডব্রঞ্চ

7
Ummm ... না নিশ্চিত করুন যে আপনি কি case- বুঝতে মধ্যে সংবেদনশীল উপায়। কারণ ভিবি সত্য ক্ষেত্রে অসংবেদী হয়, এস এস ও এস এস হয় একই নামের যেহেতু সি তারা হবে না।
এড এস

1
@ed: আমি ব্যবহার করতে পারবেন না উভয় SSএবং ssভিবি, যেটা আমি ব্যবহার প্রথমে সম্পাদক ব্যবহার অন্যতম হবে।
টড মেইন

1
ওতাকু, আমি অবশ্যই এই প্রশ্নটি ভিবি কে কেস-সংবেদনশীল এবং কীভাবে এটি বাস্তবায়িত করা হয়েছে তার ঠিক কী বোঝাতে চাইছে সেদিকেই এই প্রশ্নটি কেন্দ্রীভূত রাখার পরামর্শ দিচ্ছি। ভাষার পক্ষে কেস-সংবেদনশীল হওয়া আরও ভাল কিনা এই প্রশ্নটি দুঃখজনকভাবে শিখা যুদ্ধ শুরু করতে পারে। আপনি যদি সত্যিই কৌতূহলী হন তবে এটি অন্য একটি প্রশ্নে জিজ্ঞাসা করুন। (আমি আপনাকে পরামর্শ দিচ্ছি না, তবে আপনাকে অবশ্যই এটিকে বিষয়গত ট্যাগ করতে হবে এবং সম্প্রদায়ের উইকি তৈরি করতে হবে)
মার্কজে

16
আপনি এই উল্টোদিকে ভাবছেন (বা ছিলেন)। এটি স্পষ্টতই কারণ সংকলকটি কেস-সংবেদনশীল যা ত্রুটিটি 'ভেরিয়েবল এসএস ইতিমধ্যে ঘোষিত' পড়েছে। যদি এটি কেস-সংবেদনশীল হয় তবে আপনি 'ss ভেরিয়েবলটি ব্যবহৃত হয়নি' বা কোনও ত্রুটি এবং কোনও ত্রুটি পাবেন না যদি আপনি বিকল্পভাবে এক এবং অন্যটি ব্যবহার করেন।
অ্যাড্রিয়ানো ভারোলি পিয়াজা

উত্তর:


108

ভিবিএ এবং ভিবি.এনইটের মধ্যে পার্থক্য কেবলমাত্র কারণ ভিবি.এনইটি পটভূমিতে ধারাবাহিকভাবে সংকলন করে। আপনি ভিবিএ সংকলন করার সময় একটি ত্রুটি পাবেন।

জোনাথন যেমন বলেছেন , প্রোগ্রামিং করার সময় আপনি ভিবি.এনইটি কে স্ট্রিং-তুলনা, এক্সএমএল এবং অন্যান্য কয়েকটি পরিস্থিতি বাদ দিয়ে কেস-সংবেদনশীল হিসাবে ভাবতে পারেন ...

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

VB.NET সংকলক এবং সম্পাদক আপনাকে এটিকে উপেক্ষা করতে দেয় - কারণ তারা আপনার কোডে কেসটি সংশোধন করে

আপনি যদি গতিশীল বৈশিষ্ট্য বা দেরি-বাঁধাইয়ের (অপশন স্ট্রাইক অফ) চারপাশে খেলেন তবে আপনি প্রমাণ করতে পারবেন যে অন্তর্নিহিত রানটাইমটি কেস-সংবেদনশীল। এটি দেখার আরও একটি উপায় হ'ল সি # এর মতো কেস-সংবেদনশীল ভাষা একই রানটাইম ব্যবহার করে তাই রানটাইম স্পষ্টতই কেস-সংবেদনশীলতা সমর্থন করে supports

সম্পাদনা করুন আপনি যদি আইডিইটিকে সমীকরণের বাইরে নিতে চান তবে আপনি সর্বদা কমান্ড-লাইন থেকে সংকলন করতে পারেন । আপনার কোড সম্পাদনা নোটপ্যাড তাই এটি হয়েছে ssএবং SSএবং দেখুন সেখানে কি কম্পাইলার আছে।

নেট ফ্রেমওয়ার্ক ডিজাইনের গাইডলাইন পৃষ্ঠা 45 এ জেফরি রিখরারের সম্পাদনা উদ্ধৃতি ।

পরিষ্কারভাবে বলতে গেলে, সিএলআর আসলে কেস-সংবেদনশীল। ভিজ্যুয়াল বেসিকের মতো কিছু প্রোগ্রামিং ল্যাঙ্গুয়েজ ক্ষেত্রে সংবেদনশীল নয়। যখন ভিজ্যুয়াল বেসিক সংকলক সি # এর মতো কেস-সংবেদনশীল ভাষায় সংজ্ঞায়িত কোনও প্রকারের কাছে একটি মেথড কল সমাধান করার চেষ্টা করছে, তখন সংকলক (সিএলআর নয়) পদ্ধতির নামের আসল কেসটি বের করে এবং এটিকে মেটাডেটা এমবেড করে। সিএলআর এ সম্পর্কে কিছুই জানে না। এখন আপনি যদি কোনও পদ্ধতির সাথে আবদ্ধ হওয়ার জন্য প্রতিবিম্বটি ব্যবহার করে থাকেন তবে প্রতিবিম্ব API গুলি কেস-সংবেদনশীল লুকআপ করার ক্ষমতা সরবরাহ করে। সিএলআর কেস-সংবেদনশীলতার প্রস্তাব দেয়।


আমি এখনও অবধি শুনেছি সেরা উত্তর। এই বিন্দুটি প্রমাণ করার জন্য কি কোনও উপায়ে ভিবি.নেট সংকলক এবং সম্পাদক আপনাকে এড়িয়ে যেতে দেয় ? কারও কাছে কীভাবে অটো-সঠিক বন্ধ করে দেওয়া যায়? অথবা একটি SLN যে কম্পাইল করার একটি উপায় না বনাম IDE তে MSBuild লেখা যে দুটিই ব্যবহার করে ssএবং SSএবং এটি কম্পাইল হবে এবং কাজের আশানুরূপ?
টড মেইন

5
প্রতারণা করে আপনি স্বতঃ-সংশোধন করতে পারেন। কোনও ভিবি ফাইলটিতে ডান ক্লিক করুন এবং "ওপেন উইথ" নির্বাচন করুন। তারপরে "এক্সএমএল (পাঠ্য) সম্পাদক" এর মতো কিছু চয়ন করুন। আপনি অটো-সঠিকের মতো সমস্ত ভিবি-নির্দিষ্ট কার্যকারিতা হারাবেন।
জোনাথন অ্যালেন

+1 দুর্দান্ত উত্তর, এবং ভাল প্রশ্ন পাশাপাশি ওটাকু (আমার ধারণা আপনি ইতিমধ্যে জানতেন তবে একটি ভাল সংজ্ঞাটি বের করতে চেয়েছিলেন আরে?)
বেনামে টাইপ করুন

ভিবি.এনইটি সংকলক / আইডিই 100% কেস-সংবেদনশীল নয়। উদাহরণস্বরূপ Dim pdfWriter As PDFWriterসম্পূর্ণ বৈধ। VB.NET আপনাকে ক্লাসের নাম এবং ভেরিয়েবল নামগুলির মধ্যে পার্থক্য করতে দেয় যা একটি দুর্দান্ত স্পর্শ, কারণ এটি সম্পূর্ণরূপে কেস-সংবেদনশীল ভাষায় প্রচলিত।
উপাদান_15939

আন্তঃব্যবহারযোগ্যতার জন্য ভিবি উপায় সঠিক। উদাহরণ: স্ট্রিং এবং ইমেল হিসাবে ইমেইল () এর ইনোটাইফ্রোপার্টিচেন্জড ইভেন্ট সহ সম্পত্তি হিসাবে ইমেল সহ সি # তে একটি ডিএলএল তৈরি করুন। সি # জরিমানা সংকলন করবে এবং ডিএলএল উত্পন্ন হবে। ভিবি বা অন্য কোনও অনুরূপ ভাষায় এই ডিএলএলটি উল্লেখ করার চেষ্টা করুন। এটি বলবে যে লাইব্রেরিতে ভেরিয়েবল ইমেল / ইমেলের মধ্যে বিরোধ রয়েছে। কোড বিশ্লেষণ সরঞ্জামগুলি এটি সি # সংকলনে ভিবি সংকলক নয় বরং ইস্যু হিসাবে চিহ্নিত করেছে।
ভেঙ্কট

22

এখানে সমস্যার একটি অংশ হ'ল আইডিইর অভিজ্ঞতা থেকে আপনার ভাষা ভাগ করতে হবে।

ভাষা হিসাবে, VB.NET অবশ্যই শনাক্তকারীদের ক্ষেত্রে সংবেদনশীল একটি মামলা is কল করা DateTime.Parseএবং datetime.parseঠিক একই কোডে আবদ্ধ হবে। এবং সি # এর মতো ভাষার মতো নয়, কেবলমাত্র ক্ষেত্রে পৃথক পৃথক পদ্ধতি বা ধরণের সংজ্ঞা দেওয়া সম্ভব নয়।

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

এই আচরণটি যদিও নিখুঁতভাবে ব্যবহারকারী মান যুক্ত হিসাবে সম্পন্ন হয়। এটি মূল ভাষার অংশ নয়।


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

1
আমি মনে করি না জারেডের অর্থ এটি কেবল আইডিই। আমার মনে হয় তিনি বলেছিলেন যে এই সংকলকটি কেস-সংবেদনশীল, তাই এটি ssএকইরকম মনে করে SS, তবে আইডিই পড়তে সহায়তা হিসাবে আপনি যেমন টাইপ করেন ঠিক ততটাই সংশোধন SSকরে ss। আইডিই মামলাটি সংশোধন না করলেও সংকলকটি এখনও দুটি শনাক্তকারীকে অভিন্ন হিসাবে দেখতে পাবে।
MarkJ

2
"নামটির ক্ষেত্রে কেবল ভিন্নতার দ্বারা একাধিক নাম বিভিন্ন জিনিসকে উপস্থাপন করা কেন ভাল হবে তা আমি এখনও বুঝতে ব্যর্থ" <- ভিবিএ / ভিবি 6 / ভিবি.এনইটি থেকে সি # তে যাওয়ার আগে আমি একইভাবে অনুভব করেছি I , আমি ভেবেছিলাম যে নামগুলি কেবলমাত্র কেস দ্বারা পৃথক করা একেবারে বিপজ্জনক বলে মনে হয়। বাস্তবে, যদিও এটি বেশ কার্যকর হিসাবে প্রমাণিত হয়, এবং আশ্চর্যরকমভাবে, ত্রুটি মোটেই প্রবণ নয়।
মাইক রোজেনব্লুম

2
@ মাইক আমি এই বিষয়টির সাথে অনেকটাই একমত নই। আমি কখনও মিশ্র কেসড নাম দেখিনি যা বিভ্রান্তির কারণ ছাড়া কিছুই করে।
জারেডপাড়

2
সত্যি? আমি অকার্যকর সেট কালার (রঙের রঙ) এর মতো কিছু বোঝাতে চাইছি {this.color = color}; আমি বুঝতে পারছি এই হতে পারে চেহারা বিপজ্জনক, কিন্তু এটা সহজে কাজ করে, কম্পাইলার আপনি ভুল করি না, এবং IntelliSense পর আপনি সঠিক সদস্যদের দেয় "রঙ।" বনাম "রঙ।" জিনিস যে বিরক্তির আমাকে এখানে যে "এই" হয় ব্যবহার না এটা FxCop এবং / অথবা StyleCop দ্বারা জারি হচ্ছে (আমি যা ভুলবেন), কিন্তু আমি একটি সেটিং আইডিই সবসময় এই যখন অ্যাক্সেস বর্গ জোরদার আছে থাকত - প্রয়োজনীয় সদস্যরা সম্ভাব্যতার পরিবর্তে সুযোগটি দুর্ঘটনাক্রমে ছায়া গোছাতে দেয়।
মাইক রোজেনব্লুম

16

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


3
এক্সএমএল ল্যাটারালস এবং স্ট্রিংয়ের তুলনাগুলির ক্ষেত্রে কেস বিবেচনা করে সেখানে ভাল পয়েন্ট। কিন্তু যখন আমরা বলি এটি বেশিরভাগ ক্ষেত্রে সংবেদনশীল হয় তবে আমরা ঠিক কী বিষয়ে কথা বলছি? আউটলুক ভিবিএ-তে সরানো, যেমন একটি উদাহরণ হিসাবে, যদি আমি টাইপ করি Dim mi as mailitemএবং subject = mi.subject, অবজেক্টের নামগুলি স্বয়ংক্রিয়ভাবে সংশোধিত হয়ে যায় MailItemএবং mi.Subject। সংকলক যত্ন করে (কারণ এটি সর্বদা এটি স্বয়ংক্রিয়ভাবে সংশোধন করবে ) বা এটি কি সুন্দর কোড বা ...?
টড মেইন

1
সংকলক পাত্তা দেয় না। আপনি নোটপ্যাডে কোনও ফাইল সম্পাদনা করে এবং কমান্ড-লাইন সংকলকটি ব্যবহার করে এটি পরীক্ষা করতে পারেন।
জোনাথন অ্যালেন

9

হ্যাঁ, ভিবি.এনইটি সংকলক শনাক্তকারীদের ক্ষেত্রে সংবেদনশীলতার সাথে আচরণ করে। এবং হ্যাঁ, এটি যখন অন্য ভাষায় লেখা বা COM উপাদান ব্যবহার করে এমন সমাবেশগুলি গ্রাস করে তখন সমস্যা দেখা দিতে পারে। প্রাক্তন কেসটি কমন ল্যাঙ্গুয়েজ স্পেসিফিকেশন দ্বারা আচ্ছাদিত । সম্পর্কিত নিয়মটি হ'ল:

দুটি শনাক্তকারীকে স্বতন্ত্র বলে বিবেচনা করার জন্য, তাদের ক্ষেত্রে কেবল তাদের ক্ষেত্রে আলাদা হওয়া উচিত।

সিওএম কেসটি টাইপ লাইব্রেরি বিল্ডার দ্বারা বরং কুরুচিপূর্ণভাবে যত্ন নেওয়া হয়েছে, এটি একই নামযুক্ত শনাক্তকারীদের কেসিংটিকে অভিন্ন হতে বাধ্য করে। এমনকি যখন সেই শনাক্তকারীদের আলাদা আলাদা ভূমিকা থাকে। অন্য কথায়, "সূচক" নামের একটি পদ্ধতি প্যারামিটার একটি পদ্ধতি নাম "সূচক "টিকে" সূচক "এ পুনরায় পাঠাতে বাধ্য করবে। এটি বরং মাথার প্রচুর স্ক্র্যাচিং তৈরি করেছে, যেমন আপনি কল্পনাও করতে পারেন :)


6

ভিবি কেস সংরক্ষণ করছে (আইডিইতে) তবে কেস সংবেদনশীল । এটি একরকম উইন্ডোজ ফাইল সিস্টেমের মতো। হ্যালো টেক্সট এবং হ্যালো টেক্সট একই ফাইলের নাম হিসাবে বিবেচিত।

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

আমি বেশ কয়েকটি উদাহরণ দেখেছি যেখানে ঘোষণার সাথে মিলের জন্য কেসটি স্বয়ংক্রিয়ভাবে পরিবর্তিত হয়নি এবং বিবৃতি ঠিক একইভাবে কাজ করে। আপনি কোড লিখতে যে কোনও পাঠ্য সম্পাদকও ব্যবহার করতে পারেন যা বিভিন্ন ক্ষেত্রে ঠিক সূক্ষ্ম সংকলন করবে।

একটি পার্শ্ব-নোট:

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

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


4
প্রোগ্রামারদের বস্তু এবং শ্রেণীর মধ্যে পার্থক্য করার প্রয়োজন বাদে এবং traditionতিহ্যগতভাবে এটি করার জন্য কোনও পরিবর্তন ব্যবহার করেছেন (প্রয়োজন নেই, কেবল একটি সম্মেলন)। যাতে object.method()এবং Object.Method()অবিলম্বে অবজেক্ট এবং শ্রেণি রেফারেন্স এবং পদ্ধতি হিসাবে স্বীকৃত হয় (যদি আপনি সেই কোডিং কনভেনশন মেনে চলে)। ইংরেজির মতোই, আপনিও উচ্চারণের অক্ষরের সাথে যথাযথ বিশেষ্য এবং বাক্যগুলির সূচনা আলাদা করেন। সুতরাং পড়ার সময় বা প্রোগ্রামিংয়ের সময় আমি সংবেদনশীলতার সাথে মামলাটি ভাবি না, অন্যথায় আমি কিছু অর্থ মিস করব।
জেসন এস

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

আইডিই সেই ক্ষেত্রে মামলা সংরক্ষণ করে কেন? (দুঃখিত)। আমি মনে করি IDE কেস সংরক্ষণ করে কারণ এমএস ডিজাইনাররা মনে করেন মস্তিষ্কে কেসটির কিছু অর্থ রয়েছে, যা এটি করে। তবে বাস্তবে ভিবি আইডিই বিবেচনা করে formএবং Formএকই, যা আমার কাছে যাইহোক, বিভ্রান্তিকর। যদি (আবার দুঃখিত), এর tempএবং Tempআপনি সহজেই নামান্তর করতে C # refactoring সরঞ্জাম ব্যবহার করতে পারে Tempথেকে bobTempবা যাই হোক না কেন। যাইহোক, আমি কিছু ভিবি রক্ষণ করছি এবং কেউ চলে গিয়েছে Dim form As Form। এখন যখন আমি নতুন নামকরণ করি তখন এটি শ্রেণি এবং অবজেক্ট উভয়ই রেফারেন্সের নামকরণ করে। Bleah!
জেসন এস

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

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

5

এটি আপনি যে সম্পাদক ব্যবহার করছেন এটির একটি অংশ, তারা অন্যরকম আচরণ করতে পারে তবে সত্যটি ভিজ্যুয়াল বেসিক আসলে কেস-সংবেদনশীল ভাষা। সুতরাং, ssএবং SSএকই।

আরও তথ্যের জন্য দয়া করে ভিবি.এনইটি বেসিকস টিউটোরিয়ালটি দেখুন:


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

@ ওটাকু: দয়া করে আমার উত্তরটি আবার দেখুন আমি এখনই লিঙ্কটি সরবরাহ করেছি। ধন্যবাদ
সরফরাজ

আমি ভিবির সাথে বেশ পরিচিত, আপনাকে ধন্যবাদ :) আপনি নিশ্চিত যে আমি সেই পৃষ্ঠায় আমাকে কী দেখতে চাই তা নিশ্চিত নই।
টড মেইন

3

আমি নিশ্চিত না আমি তোমাকে বুঝতে পেরেছি? ভিবি কেস সংবেদনশীল, সুতরাং এসএস এবং এসএস একই ভেরিয়েবল, তাই সংকলকটি সঠিকভাবে অভিযোগ করে যে আপনি ভেরিয়েবলটি পুনরায় ঘোষণা করেছেন।

আমি ভেরিয়েবলগুলি কেস সংবেদনশীল নয়, তবে ফাংশনটির নাম।


তবে আমি যদি ব্যবহার করি ssএবং তারপরে টাইপ করি তবে SSএটি স্বয়ংক্রিয় সংশোধন হয়ে ssযায়, যা আমার বিশ্বাস করে যে সংকলকটি প্রকৃতপক্ষে কেস সম্পর্কে যত্নশীল নয় care
টড মেইন

5
@ ওটাকু: এটি আইডিই কেস পরিবর্তনকারী নয়, কেস পরিবর্তন করছে।
জন স্যান্ডার্স

2
ভিবি এখনও কেস সম্পর্কে সত্যই চিন্তা করে না। আইডিই কোডটি পরিষ্কার করার চেষ্টা করছে যাতে চলকগুলি একইরকম থাকে।
গিটারথ্রওয়ার

1

হ্যাঁ, ভিবি কেস সংবেদনশীল। এটি মাঝেমধ্যে এটি ব্যবহার করে না এমনগুলিকে কিছুটা লুপের জন্য ফেলে দেয়।


1

সনাক্তকারীকে বিভিন্ন বড় হাতের / ছোট হাতের "বানান" সহ কোড তৈরি করতে একজনকে ভিবি.এনইটি-তে এত কঠিন চেষ্টা করতে হবে না। "পুনঃনামকরণ" ফাংশনটি ব্যবহার না করেই ফাইলটিতে কোনও পরিচয়কারীর কেসিং পরিবর্তন করা হলে নামটি অন্যান্য ফাইলে আপডেট হওয়ার কারণ হবে না, যদিও নাম যুক্ত কোনও লাইন সম্পাদনা করলে এটি বর্তমান সংজ্ঞা মেনে চলবে।

এইভাবে, কেউ নির্ধারণ করতে পারে যে ভিবি.এনইটি বেশিরভাগ ক্ষেত্রে সংবেদনশীল, তবে এটি সিএলআর-তে সনাক্তকারীদের ক্ষেত্রে উপলব্ধ করে যা তথ্যটি কেস-সংবেদনশীল উপায়ে ব্যবহার করতে পারে।


1

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

আমি স্মরণ করি those বইগুলির মধ্যে প্রায় সবগুলিই শীর্ষস্থানীয় মূলধন, নিম্ন কেস ইত্যাদির জন্য প্রস্তাবিত প্যাটার্ন অন্তর্ভুক্ত করে As যেমনটি আমরা সবাই জানি, এর বেশিরভাগই ফেলে দেওয়া হয়েছে বা আমি বলি, অনুশীলনে উপেক্ষা করা উচিত, উচ্চতর প্রযোজনা ঘরগুলির জন্য সংরক্ষণ করা, এবং CASE সমাধানগুলি বা তাদের জন্য যারা উচ্চ দক্ষতার স্তরে পৌঁছেছে for আমি মনে করি প্রত্যেকে এই শিখনের বক্ররেখা অনুভব করে।

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


1

আমি আপনার দ্বিতীয় প্রশ্নের উত্তর দেওয়ার চেষ্টা করব।

"ভিবি.এনইটি কেস কোনওভাবে আমি কোড দিয়ে কী করতে পারি তা সীমাবদ্ধ করে দিলে আমার পক্ষে # # তে যাওয়ার বিষয়টি বিবেচনা করা কি যথেষ্ট বাধ্য?"

সি # ব্যবহার করে একটি ডাব্লুসিএফ ওয়েব সার্ভিস তৈরি করুন। একটি ডেটা চুক্তি (1 শ্রেণি) তৈরি করুন। "স্ট্রিং ইমেল" সম্পত্তি সহ একটি। অন্য সম্পত্তি হিসাবে "স্ট্রিং ইমেল" সহ অন্য একটি। আপনার ব্যক্তিগত ইমেল বা অফিস ইমেল হিসাবে বুঝতে পছন্দ। অথবা এটি দুটি ভিন্ন ডেটা চুক্তিতে হতে পারে।

সি # এর জন্য এটি ঠিক আছে। ওয়েব পরিষেবা জরিমানা তৈরি করা হয়। এসি # প্রোগ্রাম সহজেই একটি ডাব্লুএসডিএল তৈরি করতে পারে এবং সবকিছু ঠিক আছে।

এখন ভিবি (যে কোনও সংস্করণ) দিয়ে ডাব্লুএসডিএল তৈরি করার চেষ্টা করুন। এটি বলবে "ইমেল" ইতিমধ্যে ঘোষণা করা হয়েছে এবং ডাব্লুএসডিএল জেনারেশন ব্যর্থ হয়েছে।

প্রত্যেকের মতো আমিও ধরে নিয়েছি এটি ভিবি ভাষায় একটি অসুবিধা। কিন্তু !!!

FxCOP ব্যবহার করুন এবং আসল সি # কোড বিশ্লেষণ করুন। এফএক্সসিওপি বলছে ইমেল / ইমেল ব্যবহার করা একটি সমস্যা। সংবেদনশীলতার ক্ষেত্রে বিভিন্ন নাম সাপোর্ট করার পরামর্শ দেয়। এছাড়াও তারিখ হিসাবে নোট করুন। নেট ফ্রেমওয়ার্কে 106 টি প্রোগ্রামিং ল্যাঙ্গুয়েজ রয়েছে এবং অনেকগুলি ভাষা চালু রয়েছে case আমরা সবাই মেঘের দিকে এগিয়ে যাচ্ছি এবং আমাদের পরিষেবাগুলি সমস্ত প্রোগ্রামিং প্ল্যাটফর্ম / ভাষাগুলির দ্বারা অ্যাক্সেসযোগ্য হওয়া চাই।

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

http://en.wikedia.org/wiki/Compistance_of_C_Sharp_and_Visual_Basic_.NET http://www.vbrad.com/article.aspx?id=65


মেঘটি ইউআরআই ব্যবহার করে যা কেস সংবেদনশীল (বিশেষত প্রক্সি এবং ক্যাশে সার্ভারের ক্ষেত্রে)।
বিনকি

1

প্রতীক লুকানো (উদাহরণস্বরূপ স্থানীয় আড়াল ক্ষেত্র) সংবেদনশীলও নয়।

এখানে একটি উদাহরণ :

Public Class C
    Public Name As String

    Public Function M(name As String) As Boolean
        Return String.Equals(name, Name) ' case differs
    End Function
End Class

ভিবি.এনইটি সংকলকের আউটপুট নিম্নলিখিত সি # এর সাথে বিযুক্ত (এবং তাই সমতুল্য):

public class C
{
    public string Name;

    public bool M(string name)
    {
        return string.Equals(name, name); // both lowercase
    }
}

string.Equalsমাঠে দু'বার পাস হয়েছে। স্থানীয় কোনও বিষয় নির্বিশেষে লুকিয়ে রয়েছে। ভাষা ক্ষেত্রে সংবেদনশীল।

এই ক্ষেত্রের মতো কোনও সদস্যকে স্পষ্টভাবে রেফারেন্স করতে আপনাকে অবশ্যই সদস্যটিকে অবজ্ঞা করতে হবে Me:

Return String.Equals(name, Me.Name) ' differentiate field from local

0

আমি আপনার সুস্পষ্ট ২ য় প্রশ্নের শেষে কেউ কাউকে মন্তব্য করতে দেখিনি: "2: ভিবি.এনইটি কেস কোনওভাবে কোড দিয়ে কী করতে পারে তা সীমাবদ্ধ রাখলে আমার পক্ষে # # তে যাওয়ার বিষয়টি বিবেচনা করা কি যথেষ্ট বাধ্য?"

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

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

যখন সি # প্রথম প্রকাশিত হয়েছিল, তখন ভিবিতে এর এক্সএমএল মন্তব্য নেই যা আপনি পদ্ধতিগুলির আগে রাখতে পারেন, যা আমি সি # তে পছন্দ করি। আমি VB.NET এ এটিকে ঘৃণা করি। তবে আমি কয়েক বছর ধরে দেখেছি যে অনেকগুলি বৈশিষ্ট্য যা একটি ভাষায় নেই অন্য ভাষায় যুক্ত হয়। (এমএস বিকাশকারীদের একই দল সি # এবং ভিবি উভয়ই বিকাশ করে, তাই এটি উপলব্ধি করে যে বৈশিষ্ট্যগুলি একেবারে অনুরূপ হওয়া উচিত))

তবে আপনি জিজ্ঞাসা করেছেন যে সি # এর কী কী ভিবি নেই। এখানে কিছু আমি তাৎক্ষণিকভাবে ভাবতে পারি:

1: সি # আরও সংক্ষিপ্ত এবং টাইপিং কম লাগে .. অনেক উপায়ে! এমনকি বিপরীতে দাবি করা হলেও বোকামি কথা বলতে দেখেছি, যে ভিবি টাইপিং সংরক্ষণ করে। তবে দয়া করে সেই লোকদের কথা শুনুন যারা আপনাকে বলে যে তারা উভয় ভাষা ব্যবহার করে এবং এর দ্বারা খুব কমই ব্যবহৃত হয়। আমি উভয় সি # ব্যবহার করি এবংভিবি, সি ঘরে বাসায় কারণ আমি এটি পছন্দ করি (এবং যখন আমি সি # এর সাথে কাজ করি তখন) এবং আমার সাম্প্রতিক কাজের অনুরোধ যে আমি ভিবি ব্যবহার করি এবং সি # নয়। সুতরাং আমি এখন প্রায় নিয়মিত ভিবি ব্যবহার করতে চলেছি (এখন প্রায় 10 মাসের জন্য) তবে আমার ব্যক্তিগত সাক্ষ্যতে আমি সি # কে বেশি পছন্দ করি এবং প্রকৃত টাইপিংয়ের ক্ষেত্রে ভিবি যথেষ্ট বেশি টাইপিং করছে। যে উদাহরণটি আমি পড়েছি যেখানে কেউ সত্যই ভিবি আরও সংক্ষিপ্ত বলে বলার চেষ্টা করেছিল, তার সাথে একটি 'দীর্ঘ ... সাথে উদাহরণ' দিচ্ছিল, সুতরাং ভিবিতে, আপনি কেবল '.property' ব্যবহার করতে পারেন। এটি দাবি করে বোকামি যে ভিবি কম টাইপিং প্রয়োজন। কয়েকটি জিনিস রয়েছে (এবং কেবলমাত্র এই উদাহরণ নয়) যেখানে ভিবি সংক্ষিপ্ত হয়, তবে সি # আরও সংক্ষিপ্ত হলে বাস্তবিক অনুশীলনে আরও অনেকবার থাকে।

তবে আমি বিশ্বাস করি সবচেয়ে বড় কারণ সি # আরও সংক্ষিপ্ত, এটি ভিবি'র ক্রিয়াপদ "IF / THEN" বিবৃতি। যদি বিবৃতি সাধারণ হয়। সি # তে টাইপ করার মতো কোনও 'তো' শব্দ নেই! :) এছাড়াও সমস্ত 'শেষ ...' বিবৃতি টাইপ করে যা সি # তে সাধারণত একটি বন্ধনী বন্ধনী '}' হয়। আমি দেখেছি যে কিছু লোক VB.NET- এ আরও বেশি শব্দাবলম্বন করে বলে দাবি করে এটি ভিবি'র পক্ষে একটি সুবিধা, কারণ বেশ কয়েকটি বন্ধ ব্লক স্টেটমেন্ট / চিহ্নগুলি বাসা বাঁধতে পারে এবং একে অপরের পাশে অবিলম্বে শেষ হয়ে যেতে পারে, তবে আমি বেশ একমত নই। কোনও ব্যক্তি প্রায় সবসময় অন্য প্রোগ্রামারের তুলনায় সি # বা ভিবি উভয় ক্ষেত্রেই একটি প্রোগ্রাম আরও ভাল লিখতে পারেন কারণ পরবর্তী কোড রিভিশনটি আরও ভাল ডিজাইন করা যেতে পারে। এটি 'সি # তে বিভ্রান্তিমূলক অসংখ্য বন্ধনীগুলির ক্ষেত্রে প্রযোজ্য' প্লাস যদি নেস্টেড ব্লকগুলি একই রকম হয় তবে বেশ কয়েকটি নেস্টেড আইএফ এর মতো হয়ে থাকে তবে সিবি # তে যেমন ভিবি একই সমস্যা ভোগ করে। এটি ভিবিতে কোনও লাভ নয়। এই পরিস্থিতিটি স্পষ্টতই কেন আমি মন্তব্য করতে চাই কেন আমার সমাপনী প্রতীক বা সমাপনী বিবৃতি উভয় ভাষায় যায়। হ্যাঁ, এটি করণটি আরও কার্যকর, তবে উভয় ভাষায়ই আপনার কাছে পরিষ্কার হওয়ার বিকল্প রয়েছে যা রায় ভিত্তিক, পরিস্থিতিগত নির্দিষ্ট ক্ষেত্রে গুরুত্বপূর্ণ। আমি মনে করি কোডের স্পষ্টতা বেশ গুরুত্বপূর্ণ।

2: ভিবিতে মাল্টি-লাইন মন্তব্য নেই। আমি যখন ভিবির সাথে কাজ করেছি তখন আমার আপত্তি নেই। তারপরে আমি কয়েকটি সি-স্টাইলের ভাষায় গিয়েছিলাম। এখন আমি বেশিরভাগ কাজে VB.NET ব্যবহার করে ফিরে এসেছি এবং আমি সেগুলি মিস করছি। এটি কেবল এমন কিছু যা আপনাকে সুবিধাজনক মনে হয় এবং তারপরে হারাতে হয়। :(

3: ভিবি'র 'অ্যান্ডালসো' এবং 'ওরেলস' বরং সমস্ত টাইপ করতে বিরক্ত করছে যখন সি # এ কেবল'&& 'এবং' || 'হয়। আবার, কম টাইপিং। ভিবি এবং সি # উভয় ক্ষেত্রেই আমার কোডটিতে এটি বিরল নয়। কার্যকারিতার জন্য যদি কিছু হয় না তবে 'ওআর' বনাম 'অরেলস' কম্পিউটারের জন্য 'ওরিলস' দ্রুত ছাড়া কিছু যায় আসে না, সুতরাং যদি কোনও প্রোগ্রামার কেবল 'বা' এবং 'এবং' ভিবিতে ব্যবহার করে, তবে এটি এর জন্য কম অনুকূল কোড তৈরি করে কোড স্পষ্টতা পছন্দ করে এমন কেউ। 'অর' এর থেকে স্কিম করা 'বা' আরও সহজ।

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

৫: আমি যেটি সত্যিই মিস করছি তা সি # তে কোডের একটি নতুন ব্লক তৈরি করছে, কোনও পদ্ধতিতে আমার অনেক কিছু ঘটতে পারে এবং আমি কোডের একটি খুব ছোট ব্লকে একটি ভেরিয়েবল ঘোষণা করতে চাই তবে সেই ব্লকের বাইরে যে ভেরিয়েবলটি ঘোষিত না করে তা করতে চাই না want পুরো পদ্ধতি। সি # তে আমরা '{' দিয়ে একটি নতুন ব্লক তৈরি করতে পারি এবং এটি '}' দিয়ে শেষ করতে পারি। ভিবিতে এর মতো কোনও বৈশিষ্ট্য নেই তবে এটি নিকটতম মিলটি একটি শর্তহীন 'যদি সত্য হয় তবে' এবং 'শেষ হলে' ব্লক। (2 অক্ষর সি # বনাম 18 অক্ষর VB.NET সমতুল্য নোট করুন ... আরও ভিবিতে টাইপ করুন))

6: স্ব বৃদ্ধি এবং হ্রাস অপারেটরদের: ++ এবং - হিসাবে myVariable++বা ++myVariableবা সমমানের হ্রাস সংস্করণ। এটা খুব কাজে আসে ... কখনও কখনও। আমি আসল কোডের একটি উদাহরণ দিচ্ছি যখন আমি সি # টি খুব মিস করি:

// C#:
while (txt.Length > x)
{
    thisChar = txt[x];
    if (charsAllowedWithoutLimit.Contains(thisChar)) { ++x; }
    else if (allowLettersWithoutLimit && char.IsLetter(thisChar)) { ++x; }
    else if ((x2 = charsAllowedWithLimit.IndexOf(thisChar)) >= 0)
    {
        ++x; if (++usedCountA[x2] > charAllowedLimit[x2]) { break; }
    }
    else { break; }
}

' VB.NET:
While (txt.Length > x)
    thisChar = txt(x)
    If (charsAllowedWithoutLimit.Contains(thisChar)) Then
        x += 1
    ElseIf (allowLettersWithoutLimit AndAlso Char.IsLetter(thisChar)) Then
        x += 1
    Else
        x2 = charsAllowedWithLimit.IndexOf(thisChar)
        If (x2 >= 0) Then
            x += 1
            usedCountA(x2) += 1S
            If usedCountA(x2) > charAllowedLimit(x2) Then Exit While
        Else
            Exit While
        End If
    End If
End While

এবং কেবল একটি খুব ভাল উদাহরণ দেওয়ার জন্য যেখানে সি # বিধি দেয়, এটি ব্যক্তিগতভাবে আমি সম্প্রতি লিখেছি এমন আরও কোড:

// C#
public static bool IsNotWithin(this Byte   v, Byte   v1, Byte   v2) { return (v1 > v && v < v2) || (v2 < v && v > v1); }
public static bool IsNotWithin(this SByte  v, SByte  v1, SByte  v2) { return (v1 > v && v < v2) || (v2 < v && v > v1); }
public static bool IsNotWithin(this Int16  v, Int16  v1, Int16  v2) { return (v1 > v && v < v2) || (v2 < v && v > v1); }
public static bool IsNotWithin(this Int32  v, Int32  v1, Int32  v2) { return (v1 > v && v < v2) || (v2 < v && v > v1); }
public static bool IsNotWithin(this Int64  v, Int64  v1, Int64  v2) { return (v1 > v && v < v2) || (v2 < v && v > v1); }
public static bool IsNotWithin(this UInt16 v, UInt16 v1, UInt16 v2) { return (v1 > v && v < v2) || (v2 < v && v > v1); }
public static bool IsNotWithin(this UInt32 v, UInt32 v1, UInt32 v2) { return (v1 > v && v < v2) || (v2 < v && v > v1); }
public static bool IsNotWithin(this UInt64 v, UInt64 v1, UInt64 v2) { return (v1 > v && v < v2) || (v2 < v && v > v1); }
public static bool IsNotWithin(this Decimal v, Decimal v1, Decimal v2) { return (v1 > v && v < v2) || (v2 < v && v > v1); }

public static bool IsWithin(this Byte   v, Byte   v1, Byte   v2) { return (v1 <= v && v <= v2) || (v2 <= v && v <= v1); }
public static bool IsWithin(this SByte  v, SByte  v1, SByte  v2) { return (v1 <= v && v <= v2) || (v2 <= v && v <= v1); }
public static bool IsWithin(this Int16  v, Int16  v1, Int16  v2) { return (v1 <= v && v <= v2) || (v2 <= v && v <= v1); }
public static bool IsWithin(this Int32  v, Int32  v1, Int32  v2) { return (v1 <= v && v <= v2) || (v2 <= v && v <= v1); }
public static bool IsWithin(this Int64  v, Int64  v1, Int64  v2) { return (v1 <= v && v <= v2) || (v2 <= v && v <= v1); }
public static bool IsWithin(this UInt16 v, UInt16 v1, UInt16 v2) { return (v1 <= v && v <= v2) || (v2 <= v && v <= v1); }
public static bool IsWithin(this UInt32 v, UInt32 v1, UInt32 v2) { return (v1 <= v && v <= v2) || (v2 <= v && v <= v1); }
public static bool IsWithin(this UInt64 v, UInt64 v1, UInt64 v2) { return (v1 <= v && v <= v2) || (v2 <= v && v <= v1); }
public static bool IsWithin(this Decimal v, Decimal v1, Decimal v2) { return (v1 <= v && v <= v2) || (v2 <= v && v <= v1); }

' And the VB equivalent is a mess! Here goes:
<Extension()>
Public Function IsNotWithin(v As Byte, value1 As Byte, value2 As Byte) As Boolean
    Return (value1 > v AndAlso v < value2) OrElse (value2 < v AndAlso v > value1)
End Function

<Extension()>
Public Function IsNotWithin(v As SByte, value1 As SByte, value2 As SByte) As Boolean
    Return (value1 > v AndAlso v < value2) OrElse (value2 < v AndAlso v > value1)
End Function

<Extension()>
Public Function IsNotWithin(v As Int16, value1 As Int16, value2 As Int16) As Boolean
    Return (value1 > v AndAlso v < value2) OrElse (value2 < v AndAlso v > value1)
End Function

' the % suffix means 'As Integer' in VB.
<Extension()>
Public Function IsNotWithin(v%, value1%, value2%) As Boolean
    Return (value1 > v AndAlso v < value2) OrElse (value2 < v AndAlso v > value1)
End Function

' the & suffix means 'As Long' in VB.
<Extension()>
Public Function IsNotWithin(v&, value1&, value2&) As Boolean
    Return (value1 > v AndAlso v < value2) OrElse (value2 < v AndAlso v > value1)
End Function

<Extension()>
Public Function IsNotWithin(v As UInt16, value1 As UInt16, value2 As UInt16) As Boolean
    Return (value1 > v AndAlso v < value2) OrElse (value2 < v AndAlso v > value1)
End Function

<Extension()>
Public Function IsNotWithin(v As UInt32, value1 As UInt32, value2 As UInt32) As Boolean
    Return (value1 > v AndAlso v < value2) OrElse (value2 < v AndAlso v > value1)
End Function

<Extension()>
Public Function IsNotWithin(v As UInt64, value1 As UInt64, value2 As UInt64) As Boolean
    Return (value1 > v AndAlso v < value2) OrElse (value2 < v AndAlso v > value1)
End Function

' the @ suffix means 'As Decimal' in VB.
<Extension()>
Public Function IsNotWithin(v@, value1@, value2@) As Boolean
    Return (value1 > v AndAlso v < value2) OrElse (value2 < v AndAlso v > value1)
End Function

<Extension()>
Public Function IsWithin(v As Byte, value1 As Byte, value2 As Byte) As Boolean
    Return (value1 <= v AndAlso v <= value2) OrElse (value2 <= v AndAlso v <= value1)
End Function

<Extension()>
Public Function IsWithin(v As SByte, value1 As SByte, value2 As SByte) As Boolean
    Return (value1 <= v AndAlso v <= value2) OrElse (value2 <= v AndAlso v <= value1)
End Function

<Extension()>
Public Function IsWithin(v As Int16, value1 As Int16, value2 As Int16) As Boolean
    Return (value1 <= v AndAlso v <= value2) OrElse (value2 <= v AndAlso v <= value1)
End Function

' the % suffix means 'As Integer' in VB.
<Extension()>
Public Function IsWithin(v%, value1%, value2%) As Boolean
    Return (value1 <= v AndAlso v <= value2) OrElse (value2 <= v AndAlso v <= value1)
End Function

' the & suffix means 'As Long' in VB.
<Extension()>
Public Function IsWithin(v&, value1&, value2&) As Boolean
    Return (value1 <= v AndAlso v <= value2) OrElse (value2 <= v AndAlso v <= value1)
End Function

<Extension()>
Public Function IsWithin(v As UInt16, value1 As UInt16, value2 As UInt16) As Boolean
    Return (value1 <= v AndAlso v <= value2) OrElse (value2 <= v AndAlso v <= value1)
End Function

<Extension()>
Public Function IsWithin(v As UInt32, value1 As UInt32, value2 As UInt32) As Boolean
    Return (value1 <= v AndAlso v <= value2) OrElse (value2 <= v AndAlso v <= value1)
End Function

<Extension()>
Public Function IsWithin(v As UInt64, value1 As UInt64, value2 As UInt64) As Boolean
    Return (value1 <= v AndAlso v <= value2) OrElse (value2 <= v AndAlso v <= value1)
End Function

' the @ suffix means 'As Decimal' in VB.
<Extension()>
Public Function IsWithin(v@, value1@, value2@) As Boolean
    Return (value1 <= v AndAlso v <= value2) OrElse (value2 <= v AndAlso v <= value1)
End Function

সম্ভবত এটি সিউর আরও সংক্ষিপ্ততর প্রমাণ। তবে সমস্ত প্রোগ্রামার সংক্ষিপ্ততার মতো নয়। কেউ কেউ "যদি <বি তারপর ..." পড়তে পছন্দ করেন কারণ এটি তাদের মানুষের ভাষার চেয়ে বেশি স্বাভাবিক। এবং এটি ঠিক আছে। পছন্দগুলি ঠিক আছে। আমার জন্য, হাত প্রচেষ্টা একটি বিষয়কে আমি মূল্যবান বলে মনে করি এবং আমি মনে করি যে কেউ তাদের পছন্দসই চিহ্নগুলিতে চিন্তা করতে অভ্যস্ত হতে পারে, কারণ "যদি" এবং "তবে" একটি বর্ণমালার প্রতীক, এবং সি # এর "যদি (শর্ত) বিবৃতি;" বাক্য গঠনটিও প্রতীক। একটি অপরটির চেয়ে নন-প্রোগ্রামার সিনট্যাক্সের খুব কাছাকাছি is আমি সংক্ষিপ্ত এক পছন্দ।

আমি আরও মনে করি যে স্ট্রিং বিরক্তিকর নয় বরং ভেরিবির অক্ষরে অক্ষরের পরিবর্তে 'সি' ব্যবহার করা উচিত। আমি আরও অনেক কিছু দিয়ে সি # এর সংক্ষিপ্ততা পছন্দ করি। যখন কোনও পদ্ধতিতে অক্ষরটির আক্ষরিক প্রয়োজন হয়, আপনার একটি অক্ষরের দৈর্ঘ্য সহ স্ট্রিং নয় এমন অক্ষর সরবরাহ করা প্রয়োজন, তাই কখনও কখনও আপনি ":"cসি # তে থাকা অবস্থায় ভিবিতে বাধ্য হতে বাধ্য হন ':'। আমি মনে করি এটি নিট-বাছাই করছে।

পরিষ্কার করা, আমি সেখানে আমি পদ্ধতি কল পরে খালি প্রথম বন্ধনী করা, হচ্ছে না মত ভিবি করতে চান সুবিধা আছে বলবে Dim nameUpper$ = name.ToUpperInvariantযেখানে C # এর খালি প্রথম বন্ধনী প্রয়োজন: string nameUpper = name.ToUpperInvariant()। বা দ্বিগুণ যে এটিও ছাঁটাইয়ের মতো: Dim nameUpper$ = name.Trim.ToUpperInvariantবনাম string nameUpper = name.Trim().ToUpperInvariant()। আমি কীভাবে সবেমাত্র ব্যবহার করেছি তার ভিবি সংক্ষিপ্ত ব্যবহার পছন্দ করি like$ উপরে এটি 'এস্ট্র স্ট্রিং' ম্লান করার জন্য করেছি যেখানে সি # এর শর্টকাট নেই। স্ট্রিং, ইন্টিজার, লং, ডেসিমাল, সিঙ্গল এবং ডাবল টাইপের জন্য ভিবিতে সেই শর্টকাট রয়েছে তবে অসুবিধাটি হ'ল এটি কম স্পষ্ট, সুতরাং আমি এটি সাবধানতার সাথে ব্যবহার করি। তবে তবুও, আমি সংক্ষিপ্ত কোড পছন্দ করি।

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

PS যেহেতু আমি আমার জীবনের বেশিরভাগ প্রোগ্রামের পরিকল্পনা করি, তাই আমি এমনকি সবচেয়ে দক্ষ কীবোর্ডটি ব্যবহার করে টাইপ করতে শিখেছি: ডিভোরাক কীবোর্ড, যা কিওয়ার্টি কীবোর্ডের চেয়ে ইংরেজি টাইপ করতে প্রায় 1/3 প্রচেষ্টা লাগে। এটা দেখ. হতে পারে আপনি খুব স্যুইচ করতে চান। ;) এটি আমার টাইপিংকে 67% সহজ করে দিয়েছে! :) আমি কাউকে বাক্সের বাইরে চিন্তা করতে এবং আপনার কাজের আরও দক্ষতার মূল্যায়ন করতে উত্সাহিত করি। ডিভোরাক সরলীকৃত কীবোর্ড লেআউট এবং সি # আমার জন্য এটি করেছে done :)

পিএসএস আমি কিওয়ার্টি কীবোর্ড লেআউটের বিপরীতে ডিভোরাক এবং সি # মেট্রিকের সাথে এমিরিয়াল পরিমাপের সাথে তুলনা করব। ডিভোরাক, মেট্রিক এবং সি # কেবল 'পরিষ্কার'। BUT VB আসলে খুব বেশি পিছিয়ে নেই। তবে এটি 'ও' বনাম 'অরেলস', এবং 'আইআইএফ ()' এর মতো পুরানো ভিবি 6 কোড এবং প্রাক। নেট কোডের সাথে পশ্চাদপটে সামঞ্জস্য হওয়ার প্রয়োজন থেকে ভুগছে।

আমি একটি সাবধানতা দিয়ে শেষ। দয়া করে আরও বিচক্ষণ হোন যে লোকেরা সত্যই জানেন না যে তারা কী সম্পর্কে কথা বলছেন। ভিবি এবং সি # উভয়ের বিপরীতে সমস্ত কনস এর অর্ধেক নয়যে কোনও সমস্যা নেই এবং লোকেরা এখনও ভাষাতে এখনও কী অসুবিধাগুলি বিদ্যমান তা সম্পর্কে তাদের অজানা সম্পর্কে পোস্ট করে। আমি সবচেয়ে ভাল উদাহরণটি যা ভাবতে পারি তা হ'ল ভিবিতে ট্রিপল অ্যাডোস্ট্রোফ বা সি # তে ট্রিপল স্ল্যাশ মন্তব্য প্রতীক ব্যবহারের পদ্ধতির জন্য এক্সএমএল মন্তব্যগুলি। তবে দয়া করে নিজের জন্য বিবেচনা করুন যে কোনও ব্যক্তি অজ্ঞতা থেকে বা অভিজ্ঞতা থেকে কথা বলছেন কিনা। ব্যক্তিগত সাক্ষ্যদানের অর্থ তারা তাদের বাস্তব অভিজ্ঞতা থেকে জানে। এবং কারওর মধ্যে এটির প্রচুর অভিজ্ঞতা থাকার পরে, আপনার কানটি বন্ধ করে দিন। সি # এবং ভিবি উভয় ক্ষেত্রেই আমার 10 বছরেরও বেশি অভিজ্ঞতা রয়েছে। এবং এটি এটিকে ফোটায়: উভয়ই ভাল ভাষা। এবং সর্বাধিক পার্থক্যগুলি, আপনি পড়ার কোডের 5 মিনিটের মধ্যে অবিলম্বে দেখতে পাবেন। তবে হ্যাঁ, অন্যান্য বৈশিষ্ট্যগুলি প্রতিবন্ধকতা খুঁজে পেতে কয়েক বছর সময় নিতে পারে। এবং একটি প্রতিবন্ধী যা আমি সচেতন (সি # তে), আমি করতে পারি ' এমনকি এমন বাস্তব জীবনের পরিস্থিতি সম্পর্কেও ভাবুন না যেখানে এটি কার্যকর হবে। সুতরাং সম্ভবত এটি সব পরে একটি প্রতিবন্ধক না।

শুভ কোডিং!


আমি সমস্ত বিবরণের প্রশংসা করি, তবে আপনার উদাহরণটি কেন সি # কোনওভাবে "আরও ভাল" তা দেখানোর জন্য কেস সংবেদনশীলতা / সংবেদনশীলতা (যতদূর আমি বলতে পারি) ব্যবহার করে না।
টড মেইন

আমি দ্বিতীয় উদাহরণটির প্রত্যক্ষ উদাহরণ দিয়ে উত্তর দেওয়ার চেষ্টা করেছি।
ভেঙ্কট

@ টডমাইন, সঠিক এবং আমার উদাহরণ কেন সি # আরও ভাল তা দেখাতে কেস সংবেদনশীলতা ব্যবহার করে না কারণ কেস সংবেদনশীলতা কেন এটি আরও ভাল করে তোলে তা প্রশ্ন করে না । পাশাপাশি আমি বিশ্বাস করি যে এই বৈশিষ্ট্যটি নিজের পক্ষে কথা বলে। এবং আমি বিশ্বাস করি যে যুক্তিটি মৌলিক enuf যে বেশিরভাগ লোকেরা নিজেরাই তা অনুধাবন করতে পারে। তবে যদি কেউ জিজ্ঞাসা করে, আমি যুক্তি দিয়ে তাদের পদক্ষেপে সহায়তা করতে পেরে খুশি। তবে এটি, আমার বন্ধু, আমার মতে, এটি একটি আলাদা প্রশ্ন। ;)
শন কোভাক

আসলে, এটি মূল পোস্টে জিজ্ঞাসিত দুটি প্রশ্নের মধ্যে একটি ছিল। এটি স্ব-স্পষ্ট নয়, এজন্যই আমি জিজ্ঞাসা করেছি। তবে প্রশ্নের সমাধান না করার বিষয়ে কোনও উদ্বেগ নেই।
টড মেইন

@ টডমাইন, আমি আপনার বক্তব্যটি দেখতে পাচ্ছি। সত্যিই খুব সুস্পষ্ট পয়েন্ট। :) এই আমার চোখ খোলার জন্য ধন্যবাদ। :)
শন কোভাক

0

ভিবি.এনইটি কেস-সংবেদনশীল।

উদাহরণ:

1।

Dim a As Integer
Dim A as Integer

2।

Sub b()
    'Some statement(s) here
End Sub
Sub B()
    'Some statement(s) here
End Sub

3।

Function c() As Integer
    'Some statement(s) here
End Function
Function C() As Integer
    'Some statement(s) here
End Function

এই সমস্ত কোড একটি COMPILE-TIME ERROR নিক্ষেপ করবে ।

1 ম উদাহরণের জন্য, ত্রুটিটি দেখানো হবে, "স্থানীয় ব্লক 'এ' ইতিমধ্যে বর্তমান ব্লকে ঘোষণা করা হয়েছে"।

২ য় এবং তৃতীয় উদাহরণের জন্য, ত্রুটি দেখানো হবে "" পাবলিক সাব বি () 'তে অভিন্ন স্বাক্ষর সহ একাধিক সংজ্ঞা রয়েছে। " এবং "'পাবলিক ফাংশন সি () ইন্টিজার হিসাবে যথাক্রমে স্বাক্ষরযুক্ত একাধিক সংজ্ঞা রয়েছে" "

এই ত্রুটিগুলি থেকে, লক্ষ্য করুন যে ত্রুটিগুলি ভেরিয়েবল এবং পদ্ধতি / ফাংশনগুলির জন্য বিভিন্ন অবস্থানে ফেলে দেওয়া হয়। ভেরিয়েবলের জন্য, ত্রুটি 2 য় ঘোষণার সময় নিক্ষিপ্ত হয় যখন পদ্ধতি / ক্রিয়াকলাপগুলির জন্য এটি 1 ম ডিক্লোরেশন / অভিন্ন কোডের সংজ্ঞাতে নিক্ষেপ করা হয়।

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

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