শব্দটি একটি বিশেষ্য এবং ক্রিয়া উভয় ক্ষেত্রে কীভাবে কোনও চলকের নামকরণ করিবে


48

এর সাধারণ দিকনির্দেশনা নিয়ে আমি কর্নারের ক্ষেত্রে সমস্যার মুখোমুখি হয়েছি:

  • পরিবর্তনশীল জন্য বিশেষ্য
  • ক্রিয়া জন্য ক্রিয়া

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

আমার উদ্দেশ্য হ'ল আমি যখন মাসগুলি পরে কোডের বিভাগগুলিতে ফিরে আসি তখন প্রোগ্রামটি ভবিষ্যতের বিকাশকারীদের পাশাপাশি আমি নিজেও পঠিত থাকবে তা নিশ্চিত করা।

এর একটি উদাহরণ ক battery। এ batteryএর একটি রয়েছে chargeএবং আপনি charge()একটি ব্যাটারিও করতে পারেন ।

আমি মনে করি যে উভয় থাকা Battery.Chargeএবং Battery.Charge(value)ভবিষ্যতের বিকাশকারীদের জন্য বিভ্রান্তিকর হবে।

আমার বর্তমান সমাধানটি হ'ল এই দুটি ক্ষেত্রে (ভেরিয়েবল এবং ফাংশন) এর জন্য কেবল আলাদা শব্দ বেছে নেওয়া। এই পদ্ধতির সাথে আমার সমস্যা হ'ল Batteryঅবজেক্টের পরিবর্তনশীল এবং এর জন্য ফাংশনটি chargeজড়িত ডিজাইন আলোচনার সাথে একত্রিত হবে না Battery

আমার প্রশ্ন হ'ল নামকরণ কনভেনশনে এই দ্বন্দ্ব পরিচালনা করার জন্য যদি আরও কোনও / আরও ভাল উপায় থাকে?


বিষয়টিতে কিছু অতিরিক্ত পঠন। সত্যিই কেউই আমার প্রশ্নের নির্দিষ্টটিকে সম্বোধন করেনি।


3
চার্জিং ফাংশন অ্যাডচার্জটিকে সহজ এবং যথেষ্ট পরিষ্কার করুন
ফ্রিক

2
আপনি কি "কারেন্ট-" দিয়ে বিশেষ্য ভেরিয়েবল উপসর্গ করতে পারেন? তাহলে "কারেন্টচার্জ" বনাম "চার্জ ()"?
ব্রায়ান স্নো

6
বা কেবল চার্জলিভেলের বর্তমান চার্জটি পেতে
ফ্রিক

5
একটি শব্দ আপ করুন। ওয়ার্ডনেট কোনও enqueueশব্দ বলে মনে করে না তবে জাভাতে এটি একটি ক্রিয়াপদ। কীভাবে doCharge? এটি এখনও প্রতিসম পরীক্ষায় ব্যর্থ হবে কারণ আপনার অন্যান্য পদ্ধতিতে এই উপসর্গটি থাকবে না
খের পরিবর্তনশীল

5
"বর্তমান" = এখন, বা "বর্তমান" = চার্জের প্রবাহ। একমাত্র আসল সমাধান হ'ল ইংলিশকে আরও বুদ্ধিমান ভাষার সাথে প্রতিস্থাপন করা!
DarenW

উত্তর:


38

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

আমার ব্যক্তিগত পছন্দটি কেবলমাত্র সেই ক্রিয়াকলাপগুলির জন্য ক্রিয়াগুলি ব্যবহার করা যা রাষ্ট্র পরিবর্তন করে। আমি নন-মিউটেশন ফাংশনগুলির জন্য বিশেষ্য ব্যবহার করি। আমি মনে করি এটি আপনার দৃষ্টিভঙ্গির উপর নির্ভর করে। মেশিন পর্যায়ে, নন-মিউটেশন ফাংশনগুলি কিছু করে তবে মডেল স্তরে, তারা তা করে না।


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

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

20

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

battery.Charge(50) বনাম batteryCharger.Charge(battery, 50)

আমার কাছে, দ্বিতীয় ফর্মটি অনেক বেশি বোধগম্য এবং আপনার সমস্ত "চার্জিং" কোডটি আপনার সমস্ত ব্যাটারি ক্লাসে ছড়িয়ে দেওয়ার পরিবর্তে এক জায়গায় রাখে।


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

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

আপনি সম্ভবত জাভা প্রোগ্রামার? এটি স্পষ্টভাবে নিজেকে পুনরাবৃত্তি করবেন না লঙ্ঘন। আসলে, আপনি প্যারামিটার "50" ব্যতীত সমস্ত কিছুর পুনরাবৃত্তি করছেন। আমি চেষ্টা করলে DRY লঙ্ঘনের আরও খারাপ উদাহরণ নিয়ে আসতে পারিনি।
boxed

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

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

9

ডাবল অর্থগুলি এড়িয়ে চলুন

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

গেটারস এবং সিটারগুলি ব্যবহার করুন

বেশিরভাগ অবজেক্টের জন্য স্ট্যান্ডার্ড নামকরণ হ'ল বৈশিষ্ট্যগুলির জন্য getters / সেটিংস পদ্ধতি।

Battery.Charge            // would be a property
Battery.setCharge(value)  // would set the property
Battery.getCharge()       // would get the property

সম্পত্তি হ'ল রাজ্য বিশেষ্য নয়

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

তারা একটি বিশেষ্য হিসাবে যে মূল্য রাখে তা আপনি বর্ণনা করতে পারেন তবে আমি নিশ্চিত নই যে এটি সব ক্ষেত্রেই সত্য।

ওওপি পরিভাষায় বস্তুর বৈশিষ্ট্যগুলি সেই বস্তুর অবস্থা বর্ণনা করে। আপনার ক্ষেত্রে এটি Batteryএকটি অবজেক্ট এবং এটি Chargeএকটি রাষ্ট্র। সুতরাং এটি বস্তুর সম্পত্তি হবে, তবে এটি কীভাবে এটি ব্যবহার করা হবে তার প্রসঙ্গে নির্ভর করে।

আপনার যদি Chargeব্যাটারিটি সক্ষম হওয়ার প্রয়োজন হয় এবং এটির বর্তমান কী তাও জানতে Chargeপারেন তবে আপনার সমস্যা আছে।

প্রসঙ্গ প্রয়োগের জন্য সুযোগ ব্যবহার করুন Using

প্রসঙ্গটি হ'ল আপনি কোন পদ্ধতি বা সম্পত্তি বোঝাতে চান এমন কোনও শব্দের অর্থ কী তা পরিষ্কার করে দেবে। ব্যাপ্তি বাইরের থেকে কোনও সম্পত্তি / পদ্ধতির অ্যাক্সেসযোগ্যতা সেট করে।

Batter._charge            // a hidden private property
Battery.setCharge(value)  // would set the private property
Battery.getCharge()       // would get the private property
Battery.Charge()          // would perform the Charge action

পদ্ধতিগুলি ক্রিয়াপদ হয়

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

শব্দটি Chargeক্রিয়াপদ, তবে এটি একটি বিশেষ্যও। যখন কোনও ক্রিয়াটির পদ্ধতিতে কল করতে ব্যবহৃত হয় তখন এটি স্পষ্ট হয়ে যায় যে ক্রিয়াটি ব্যবহৃত হচ্ছে Battery.Charge(....)

তবে, প্রসঙ্গটি অত্যন্ত গুরুত্বপূর্ণ। শব্দটি Charge()ক্রিয়াপদ হলেও এটি ততটা অর্থবহ নয় startCharging()

বৈধ পদ্ধতি জন্য Batteryঅন্তর্ভুক্ত হতে পারে Charging, Discharging, setCharge, getCharge, hasCharge, Dischargeএবং Charged

সাধারণ একটি শব্দের পদ্ধতিগুলি প্রায়শই তাদের ক্রিয়াগুলি স্পষ্টভাবে পরিষ্কারভাবে বর্ণনা করে না, তবে কিছু ক্ষেত্রে রয়েছে openএবং closeযেখানে সামান্য ব্যাখ্যা দেওয়া দরকার।

সুতরাং এই ধরণের বৈশিষ্ট্য / পদ্ধতিগুলির নাম কীভাবে দেওয়া যায় সে সম্পর্কে সত্যই সঠিক উত্তর নেই। কোনও বিভ্রান্তি নেই তা নিশ্চিত করার জন্য আপনাকে উপরের কৌশলগুলি বুদ্ধিমানেরভাবে ব্যবহার করতে হবে


2
রেকর্ডের জন্য, ক্লায়েন্ট হলেন তিনিই যেটি দ্ব্যর্থক পরিভাষা ব্যবহার করছেন। আমি সেই জগাখিচুড়ি তৈরি করিনি। :-) যেহেতু আমি ভেবেছিলাম যে আমিই কেবল এমন ব্যক্তি হতে পারি না যে আমি এইরকম পরিস্থিতিতে পড়ি। আপনার উত্তরে কিছু বৈধ পয়েন্ট রয়েছে। এই বিশেষ ক্ষেত্রে, আমরা সময়ের দানবকালে কাজ করছি না StartCharge()এবং EndCharge()তা বোঝায়। আসলে, সেই পরিভাষাটি ব্যাটারি সিস্টেম পরিচালনা করার ক্ষেত্রে উল্লেখযোগ্য ওভারহেড যুক্ত করবে add প্রতিটি বিরতিতে এটি হয় Charge()বা হয় Discharge()

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

6

তাদের ক্রিয়া বা বিশেষ্য তৈরি করবে এমন ক্রিয়াগুলি সহ তাদের প্রস্তুত করুন।

Battery.doCharge()

Battery.getCharge()

4

ক্রিয়া ক্ষেত্রে, আমি মনে করি Chargeঠিক আছে। বিশেষ্য ক্ষেত্রে, getCurrentChargeLevelআপনার জন্য কাজ করবে?


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

চার্জ কি ভোল্টেজ বা শতাংশ?
mhoran_psprep

1
@ গ্লেনএইচ 7: আহা, আমি দেখছি। আপনি সি # নির্দিষ্ট করেন নি এবং আমার মস্তিষ্ক জাভা মোডে রয়েছে। ভাল যাই হোক না কেন, আমি মনে করি যে বিশেষ্যটি বর্তমানে ব্যাটারিতে চার্জের পরিমাণকে উপস্থাপন করে, সম্ভবত কিছু লাইনের সাথে Battery.currentChargeLevelকাজ করে। আপনি ব্যবহার করার চেষ্টা করতে পারেন Battery.coloumbsবা Battery.ampereHoursএটি সম্ভবত সুস্পষ্ট নাও হতে পারে ...
হতাশ

1
@mhoran_psprep - না। ;-) Chargeহয় Energyযা Power(ভোল্ট * তথ্য পোস্ট == ওয়াটস) সময় দ্বারা গুন। সুতরাং এই ক্ষেত্রে, চার্জ একটি সংখ্যা। শুল্কের একটি রাজ্যও রয়েছে যা শতাংশ হতে পারে।

@ ফ্রাস্ট্রেটেড উইথফোর্ডস ডিজাইনার - হ্যাঁ, আমি সি # ছাড়লাম যেহেতু আমি ভেবেছিলাম যে ভাষা নির্বিশেষে বিস্তৃত কর্নার কেস প্রযোজ্য। Watt*timeঅবশ্যই নকশা কথোপকথনের সাথে সারিবদ্ধ হবে না, কিন্তু ChargeLevelহবে।

0

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

ডেল্টা (এমন ক্ষেত্রে যেখানে পরিবর্তন আছে তবে দ্বিধাদ্বন্দ্ব রয়েছে) এমন একটি সংশোধক যা আমি সর্বদা অন্যদের কাছে রাজ্যে পরিবর্তন হস্তান্তর করার জন্য ব্যবহার করি এবং এটি ক্রিয়াটি অর্ধ-সুস্পষ্ট থাকলেও)।


0

উদ্ধার করতে হাঙ্গেরিয়ান নোটেশন। আপনার থাকতে পারে intChargeএবং fcnCharge(value)এইভাবে বিভ্রান্তি এড়ানো এবং একটি পাগল দীর্ঘ নাম যুক্ত না করা যখন তিনটি অক্ষর ঠিক ঠিক কাজ করবে।

অথবা আপনি কেবল একই নামটি ব্যবহার করতে পারেন এবং আইডিইটিকে এটি পরিচালনা করতে দিন। দীর্ঘ বা ভিন্ন নাম তৈরি করা যাইহোক দীর্ঘমেয়াদে যেমন বিভ্রান্তি হতে পারে।


উত্তরের অনন্য দৃষ্টিভঙ্গির জন্য +1। আফসোস, হাঙ্গেরিয়ান স্বরলিপিটি আমাদের কোড শৈলীর নির্দেশিকা অনুসারে স্পষ্টভাবে ভারবোটেন ver এটি আপনার উত্তরের সম্ভাব্য যোগ্যতা পরিবর্তন করে না, কেবলমাত্র আমি এটিকে আমার আসল সমাধান হিসাবে ব্যবহার করতে পারি না।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.