তোমার প্রশ্ন.
তবে, তবে - আমার নির্দোষ থেকে, আমাকে চিৎকার করতে দিন - কখনও কখনও কোনও মান অর্থপূর্ণভাবে অনুপস্থিত হতে পারে!
আপনার সাথে সেখানে পুরোপুরি যাইহোক, কিছু সাবধানতা রয়েছে যা আমি এক সেকেন্ডের মধ্যে প্রবেশ করব। কিন্তু প্রথম:
নালগুলি মন্দ এবং যখনই সম্ভব এড়ানো উচিত।
আমি মনে করি এটি একটি সুচিন্তিত তবে অত্যধিক জেনারেলাইজড বিবৃতি।
নাল দুষ্ট নয়। এগুলি কোনও অ্যান্টিপ্যাটার্ন নয়। এগুলি এমন কোনও জিনিস নয় যা সর্বদাই এড়ানো উচিত। তবে নালগুলি ত্রুটির প্রবণতা রয়েছে (নাল পরীক্ষা করতে ব্যর্থ হওয়া থেকে)।
তবে আমি বুঝতে পারি না যে নালটি পরীক্ষা করতে ব্যর্থ হওয়া কোনওভাবেই প্রমাণ যে নাল ব্যবহার করা সহজাতভাবে ভুল।
যদি নালটি মন্দ হয় তবে অ্যারে সূচি এবং সি ++ পয়েন্টারগুলিও তাই। তারা না. এগুলির সাহায্যে তারা নিজেকে পায়ে আটকানো সহজ তবে এগুলি কোনও মূল্যে এড়ানো হবে বলে মনে করা হয় না।
এই উত্তরের বাকী অংশের জন্য, আমি "নালগুলি দুষ্ট হয়" এর অভিপ্রায়টিকে আরও ন্যূনতম " নালগুলি দায়িত্বপূর্ণভাবে পরিচালনা করা উচিত " এর সাথে খাপ খাইয়ে নিতে চলেছি ।
আপনার সমাধান।
যদিও আমি বিশ্বব্যাপী নিয়ম হিসাবে নাল ব্যবহার সম্পর্কে আপনার মতামতের সাথে একমত; এই বিশেষ ক্ষেত্রে আপনার নাল ব্যবহারের সাথে আমি একমত নই।
নীচের মতামতের সংক্ষিপ্তসার হিসাবে: আপনি উত্তরাধিকার এবং পলিমারফিজমের উদ্দেশ্যকে ভুল বুঝছেন। নাল ব্যবহার করার পক্ষে আপনার যুক্তির বৈধতা রয়েছে, অন্য উপায় কেন খারাপ তা সম্পর্কে আপনার আরও "প্রমাণ" উত্তরাধিকারের অপব্যবহারের উপর নির্মিত, নাল সমস্যার সাথে আপনার পয়েন্টগুলি কিছুটা অপ্রাসঙ্গিক উপস্থাপন করে।
বেশিরভাগ আপডেটের স্বাভাবিকভাবেই কোনও প্লেয়ার তাদের সাথে যুক্ত থাকে - সর্বোপরি, কোন প্লেয়ারটি এই টার্নটি সরানো হয়েছে তা জানা দরকার। তবে কিছু আপডেটের সাথে কোনও খেলোয়াড় অর্থপূর্ণভাবে যুক্ত হতে পারে না।
যদি এই আপডেটগুলি অর্থপূর্ণভাবে আলাদা হয় (যা সেগুলি হয়) তবে আপনার দুটি পৃথক আপডেটের প্রয়োজন need
উদাহরণস্বরূপ বার্তাগুলি বিবেচনা করুন। আপনার ত্রুটির বার্তা এবং আইএম চ্যাট বার্তা রয়েছে। তবে তাদের মধ্যে খুব অনুরূপ ডেটা থাকতে পারে (একটি স্ট্রিং বার্তা এবং প্রেরক), তারা একইভাবে আচরণ করে না। এগুলি পৃথক শ্রেণি হিসাবে পৃথকভাবে ব্যবহার করা উচিত।
আপনি এখন যা করছেন তা প্লেয়ার সম্পত্তির নাল-নেসের ভিত্তিতে দুটি ধরণের আপডেটের মধ্যে কার্যকরভাবে পার্থক্য করা। এটি কোনও ত্রুটি কোডের অস্তিত্বের ভিত্তিতে একটি আইএম বার্তা এবং একটি ত্রুটি বার্তার মধ্যে সিদ্ধান্ত নেওয়ার সমতুল্য। এটি কাজ করে, তবে এটি সর্বোত্তম পদ্ধতির নয়।
- জেএস কোডটি এখন প্লেয়ার ব্যতীত কোনও সংজ্ঞায়িত সম্পত্তি হিসাবে কোনও বস্তু গ্রহণ করবে, যা একেবারেই একই কারণ এটি উভয় ক্ষেত্রেই মূল্য উপস্থিত বা অনুপস্থিত কিনা তা যাচাই করা দরকার;
আপনার যুক্তি বহুবর্ষের ভুলের উপর নির্ভর করে। আপনি যদি একটি পদ্ধতি যা ফেরৎ যদি GameUpdate
বস্তু, সাধারণভাবে কি কখনো মধ্যে পার্থক্য করতে পরোয়া করা উচিত নয় GameUpdate
, PlayerGameUpdate
অথবা NewlyDevelopedGameUpdate
।
একটি বেস শ্রেণীর একটি সম্পূর্ণ কার্যকরী চুক্তি থাকা দরকার, অর্থাত্ এর বৈশিষ্ট্যগুলি বেস শ্রেণীর উপর সংজ্ঞায়িত করা হয় এবং উত্পন্ন শ্রেণীর উপর নয় (বলা হচ্ছে, এই বেস বৈশিষ্ট্যগুলির মান অবশ্যই উত্পন্ন ক্লাসগুলিতে ওভাররাইড করা যেতে পারে)।
এটি আপনার আর্গুমেন্ট মোট রেন্ডার করে। ভাল অনুশীলনে আপনার কখনই যত্ন করা উচিত নয় যে আপনার GameUpdate
অবজেক্টটির কোনও খেলোয়াড় রয়েছে বা না। আপনি যদি কোনও এর Player
সম্পত্তি অ্যাক্সেস করার চেষ্টা GameUpdate
করছেন তবে আপনি অযৌক্তিক কিছু করছেন।
যেমন সি # টি টাইপ ভাষায় এমনকি না অনুমতি দেয় আপনি চেষ্টা এবং অ্যাক্সেস করতে Player
একটি সম্পত্তির GameUpdate
কারণ GameUpdate
কেবল সম্পত্তি নেই। জাভাস্ক্রিপ্ট এর পদ্ধতির তুলনায় যথেষ্ট বেশি শিথিল (এবং এটি পূর্বনির্মাণের প্রয়োজন হয় না) সুতরাং এটি আপনাকে সংশোধন করতে বিরক্ত করে না এবং পরিবর্তে রানটাইম এ এটি ফুরিয়ে যায়।
- গেমআপডেট ক্লাসে যদি আরেকটি অবিস্মরণীয় ক্ষেত্র যুক্ত করা থাকে তবে এই ডেসিংটি চালিয়ে যেতে আমি একাধিক উত্তরাধিকার ব্যবহার করতে সক্ষম হতে পারি - তবে এমআই তার নিজের পক্ষে খারাপ (আরও অভিজ্ঞ প্রোগ্রামারদের মতে) এবং আরও গুরুত্বপূর্ণ, সি # হয় না এটা আছে তাই আমি এটি ব্যবহার করতে পারবেন না।
অযোগ্য বৈশিষ্ট্য সংযোজনের ভিত্তিতে আপনার ক্লাস তৈরি করা উচিত নয়। গেম আপডেটের কার্যত অনন্য প্রকারের ভিত্তিতে আপনার ক্লাস তৈরি করা উচিত ।
সাধারণভাবে নাল দিয়ে সমস্যাগুলি কীভাবে এড়ানো যায়?
আমি মনে করি যে আপনি কীভাবে কোনও মূল্যবোধের অনুপস্থিতি অর্থপূর্ণভাবে প্রকাশ করতে পারেন সে সম্পর্কে বিস্তারিতভাবে প্রাসঙ্গিক বলে মনে করি। এটি কোনও নির্দিষ্ট ক্রমে সমাধানের (বা খারাপ পদ্ধতির) সংগ্রহ।
1. যাইহোক নাল ব্যবহার করুন।
এটি সহজতম পদ্ধতির। তবে, আপনি নিজেকে এক টন নাল চেকের জন্য সাইন আপ করছেন এবং (যখন এটি করতে ব্যর্থ হন) নাল রেফারেন্স ব্যতিক্রমগুলি নিবারণের জন্য।
২. একটি নন-নাল অর্থহীন মান ব্যবহার করুন
একটি সাধারণ উদাহরণ এখানে indexOf()
:
"abcde".indexOf("b"); // 1
"abcde".indexOf("f"); // -1
পরিবর্তে null
, আপনি পেতে -1
। প্রযুক্তিগত স্তরে, এটি একটি বৈধ পূর্ণসংখ্যার মান। তবে সূচকগুলি ধনাত্মক পূর্ণসংখ্যার হিসাবে প্রত্যাশিত বলে একটি নেতিবাচক মান হ'ল অযৌক্তিক উত্তর।
যৌক্তিকভাবে, এটি কেবলমাত্র সেই ক্ষেত্রে ব্যবহৃত হতে পারে যেখানে রিটার্নের ধরণটি যথাযথরূপে প্রত্যাবর্তনের চেয়ে আরও বেশি সম্ভাব্য মানগুলির মঞ্জুরি দেয় (indexOf = ইতিবাচক পূর্ণসংখ্যা; int = নেতিবাচক এবং ধনাত্মক পূর্ণসংখ্যার)
রেফারেন্সের ধরণের জন্য, আপনি এখনও এই নীতিটি প্রয়োগ করতে পারেন। উদাহরণস্বরূপ, আপনার যদি একটি পূর্ণসংখ্যা আইডি সহ কোনও সত্তা থাকে তবে আপনি নকলের বিপরীতে ডামি অবজেক্টটি তার আইডি সেট করে -1 এ ফিরে আসতে পারেন।
আপনাকে কেবল একটি "ডামি অবস্থা" সংজ্ঞায়িত করতে হবে যার মাধ্যমে আপনি কোনও জিনিসটি বাস্তবে ব্যবহারযোগ্য বা না ব্যবহারযোগ্য তা পরিমাপ করতে পারবেন।
মনে রাখবেন যে আপনি যদি স্ট্রিংয়ের মানটি নিয়ন্ত্রণ না করেন তবে আপনার পূর্বনির্ধারিত স্ট্রিং মানগুলির উপর নির্ভর করতে হবে না। আপনি কোনও শূন্য বস্তুটি ফিরিয়ে দিতে চাইলে আপনি কোনও ব্যবহারকারীর নাম "নাল" এ সেট করার কথা বিবেচনা করতে পারেন, তবে ক্রিস্টোফার নুল আপনার পরিষেবার জন্য সাইন আপ করলে আপনি সমস্যার মুখোমুখি হবেন ।
৩. পরিবর্তে একটি ব্যতিক্রম নিক্ষেপ করুন।
না কিছু না. যৌক্তিক প্রবাহের জন্য ব্যতিক্রমগুলি পরিচালনা করা উচিত নয়।
বলা হচ্ছে, এমন কিছু মামলা রয়েছে যেখানে আপনি (নালারফেরেন্স) ব্যতিক্রমটি গোপন করতে চান না, বরং একটি উপযুক্ত ব্যতিক্রম দেখান। উদাহরণ স্বরূপ:
var existingPerson = personRepository.GetById(123);
PersonNotFoundException
যখন আইডি 123 সহ কোনও ব্যক্তি নেই তখন এটি (বা অনুরূপ) ফেলে দিতে পারে ।
কিছুটা স্পষ্টতই, এটি কেবলমাত্র সেই ক্ষেত্রে গ্রহণযোগ্য যেখানে কোনও আইটেম খুঁজে না পাওয়া তার আরও কোনও প্রক্রিয়াজাতকরণ অসম্ভব করে তোলে। যদি কোনও আইটেম খুঁজে না পাওয়া সম্ভব হয় এবং অ্যাপ্লিকেশনটি চালিয়ে যেতে পারে তবে আপনার ব্যতিক্রম কখনও করা উচিত নয় । আমি এটাকে যথেষ্ট চাপ দিতে পারি না।