ডিফল্ট ক্ষেত্রের সূচনা উপর নির্ভর করে - খারাপ প্রোগ্রামিং শৈলী? [বন্ধ]


20

আমাকে অফিসিয়াল ওরাকল ডকুমেন্টেশনের লিঙ্ক দেওয়া হয়েছিল: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

যেখানে বলা হয়েছে:

ডিফল্ট মান

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

আমি এই অংশটি জোর দিতে চাই:

যেমন ডিফল্ট মানগুলির উপর নির্ভর করা সাধারণত খারাপ প্রোগ্রামিং স্টাইল হিসাবে বিবেচিত হয়।

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


5
হাহ। আমি জানতাম না যে উক্ত বিবৃতিটি সেখানে ছিল। আমি আসলে তাদের উপর নির্ভর করা ভাল অনুশীলন বিবেচনা। private int count = 0;এমন কোড যা কিছুই করে না, এবং কোড যা কিছুই করে না তা হুড়োহুড়ি। এটি জাভা.লাং থেকে ক্লাস আমদানি করা, বা একটি ক্লাস ঘোষণার মতো extends Object
ভিজিআর

2
... বা public abstractইন্টারফেসে একটি পদ্ধতি আছে।
মাম্পিট্জ

1
পাবলিক বিমূর্তিতে কী দোষ?
জন কেটস 19:15

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

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

উত্তর:


6

উদ্ধৃত পাঠ্যটি হ'ল:

"তবে এই জাতীয় ডিফল্ট মানগুলির উপর নির্ভর করা সাধারণত খারাপ প্রোগ্রামিং স্টাইল হিসাবে বিবেচিত হয়।"

ছদ্মবেশী: "এটি সাধারণত বিবেচিত হয়" প্রায়শই বলার একটি উপায় যা লেখক বিবৃতি উপস্থাপনের জন্য কোনও প্রামাণিক উত্স খুঁজে পাওয়ার চেষ্টা করেন নি।

এই ক্ষেত্রে দৃ as়তা স্পষ্টভাবে প্রশ্নবিদ্ধ। প্রমাণ: নমুনাযুক্ত জাভা স্টাইল গাইডের মধ্যে ৫ টির মধ্যে আপনার ডিফল্ট মানগুলির উপর নির্ভর করা উচিত কিনা সে সম্পর্কে কিছুই বলবেন না:

(দ্রষ্টব্য, স্যাম্পলিংয়ের জন্য আমার পদ্ধতিটি ছিল "জাভা শৈলী গাইড" এর জন্য প্রথম 5 টি স্বতন্ত্র গুগল অনুসন্ধানের হিটগুলি দেখার জন্য Then )


ঠিক আছে. সুতরাং এটি সত্যিই জাভা কোডের পাঠযোগ্যতার সহায়তা করে?

এটি বিতর্কযোগ্য।

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

অন্যদিকে, আমরা সাধারণত নবজাতক জাভা প্রোগ্রামারদের উত্পাদন কোড-বেসগুলি বজায় রাখার আশা করি না। অভিজ্ঞ জাভা প্রোগ্রামারের জন্য একটি অপ্রয়োজনীয় সূচনা পাঠযোগ্যতার উন্নতি করে না। এটি (সর্বোত্তম) শব্দ

আমার মতে, ক্ষেত্রের অপ্রয়োজনীয় সূচনা দ্বারা প্রাপ্ত একমাত্র জিনিসটি আপনার কোডের ভবিষ্যতের পাঠকের কাছে সিগন্যাল করা যা আপনি প্রাথমিক মানটি নিয়ে ভাবেন । (@ ঘোস্টগেট এটি প্রকাশ করার সাথে সাথে, ডিফল্ট সূচনাটি অভিপ্রায় যোগাযোগ করে না))

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


নির্ভরযোগ্যতা সম্পর্কে কি?

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

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

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


অভিনয় সম্পর্কে কি?

এটি কোন পার্থক্য করা উচিত। জেআইটি সংকলককে রিডান্ট্যান্ট ইনিশিয়েশন এবং ডিফল্ট ইনিশিয়ালিয়াসকে একই হিসাবে বিবেচনা করতে সক্ষম হওয়া উচিত।


19

সরল: ডিফল্ট মানগুলির উপর নির্ভর করা উদ্দেশ্য উদ্দেশ্য করে না।

আপনি কি সত্যিই সেই ক্ষেত্রটি 0 দিয়ে শুরু করতে চেয়েছিলেন, বা কোনও মান নির্ধারণ করতে ভুলে গেছেন ?!

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

শেষ অবধি, ডিফল্টগুলি ব্যবহার করে বোঝানো হয় যে আপনার অ চূড়ান্ত ক্ষেত্র নেই। যা আপনি যেখানে সম্ভব এড়ানো।

একমাত্র পাল্টা যুক্তি হ'ল: যে জিনিসগুলি আপনার নেই সেগুলি কেন লিখবেন? তবে আমি মনে করি তালিকাভুক্ত অসুবিধাগুলি শিংগা যা এইভাবে একটি ক্ষেত্রকে 0 স্পষ্টভাবে নির্ধারণ করা এটি সংকলকটিতে রেখে দেওয়ার চেয়ে ভাল।


3
যেমন পুনরায়: অভিপ্রায় জানাতে হবে না - যদি "মানি দ্য রক্ষণাবেক্ষণকারী" আপনার কোডটি দেখছে এবং নির্দিষ্ট ডেটা টাইপের জন্য ডিফল্ট কী তা জানে না What তিনি এটি 0 টি ধরে নিচ্ছেন যখন এটি সত্যই নূলে থাকে এবং এটি পুরো সমস্যাটি একটি === চেক (বা মান এবং ধরণের সমতুল্য সমানতা যাচাই যা জাভাতে সমান ()?) থাকে on ঘন্টা অনুসন্ধান (একটি অনভিজ্ঞ প্রোগ্রামার জন্য) এত সহজ কিছু ফলাফল হতে পারে। পিএস শয়তানের উকিলকে খেলার চেষ্টা করছে। আমি বলি যে সমস্ত দিন ডিফল্টগুলি ব্যবহার করুন (যদিও আমি কখনও করি না) এবং আপনার কোড বজায় রাখার জন্য বুদ্ধিমান ব্যক্তিদের (বা কমপক্ষে বিশদ দিকে কম মনোযোগ দেওয়া) পান।
টিকোপার

@ ট্রুপার যখন ম্যানি রক্ষণাবেক্ষণকারী জাভা সম্পর্কে খুব কম জানেন না, তখন তার রিয়েল ওয়ার্ল্ড জাভা কোড স্পর্শ করার কোনও ব্যবসা নেই। তবে আমি অন্তর্নিহিত ধারণার সাথে একমত এটি newbies জন্য জিনিস কঠিন করে তোলে।
ঘোস্টগেট মনিকা সি কে সালাম জানায়

12

পৃথিবীতে কেন এটি একটি খারাপ প্রোগ্রামিং অনুশীলন

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

... এটি যদি জাভা এসই লাইব্রেরি উত্স কোডেও ব্যাপকভাবে ব্যবহৃত হয় ??

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


2
এটি সম্ভবত সঠিক, যদিও আমি এটির সাথে একমত নই।
ভিজিআর

3
@ ভিজিআর আমি যতই দাবিদার সাথে একমত হতে চাই যে ডিফল্ট মানগুলির উপর নির্ভর করা উপ-অনুকূল, আমি এই কারণে নিরপেক্ষ উপায়ে এটিকে বাক্যবুদ্ধি করতে সতর্ক হয়েছি। কোডের মানটি বিষয়গত, এবং আমি ভালভাবে জানি এটি কোনওভাবেই সর্বজনীনভাবে রাখা দৃষ্টিভঙ্গি নয়।
মাইকেল বেরি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.