"প্লাস" এবং "বিয়োগ" উপযুক্ত পদ্ধতির নাম?


21

জাভা SE 8 তারিখ, উপস্থাপক জন্য একটি নতুন প্রক্রিয়া দিয়ে আসে LocalDate, LocalTimeএবং LocalDateTimeক্লাস সময় instants প্রতিনিধিত্ব করতে। যেমন instants নিপূণভাবে, পদ্ধতি একটি সেট দেওয়া হয়: LocalDate.plusDays(...), LocalDate.minusDays(...)ইত্যাদি।

আমি সর্বদা ভেবেছিলাম যে ভাল অনুশীলন ক্রিয়াপদের নামগুলি তাদের উদ্দেশ্য বর্ণনা করার পরে পদ্ধতিগুলির নামকরণ করে, যেমন পদ্ধতিগুলি প্রকৃতপক্ষে অপারেশনগুলি কার্যকর করতে হবে, যা একটি ক্রিয়া সম্পাদন করবে something শুধু উল্লেখ করতে যদি আপনি চান শ্রেণীর বিবেচনা StringBuilder, উদাহরণস্বরূপ, পদ্ধতি 'নাম append, insert, delete...

এই কেন আমাকে এটা ঠিক লাগছে না একটি পদ্ধতি নামকরণ হয় plusDaysপরিবর্তে sumDays, minusDaysপরিবর্তে subtractDays। এটা আমাকে খুব বিরক্তিকর মনে হচ্ছে? আপনি কি মনে করেন?

আমি একমাত্র কারণ ভাবতে পারি যে তারিখগুলি হ'ল অপরিবর্তনীয় বস্তু, সুতরাং কল করে plusDaysআপনি আসল বস্তুতে দিন যোগ করছেন না তবে নতুন বৈশিষ্ট্য সহ একটি নতুন তৈরি করছেন, তবে এটি খুব সূক্ষ্ম।


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

2
প্রোগ্রামিং "ইংরেজি" নয়। উদাহরণস্বরূপ, sqrtকেবলমাত্র একটি শব্দ যা প্রোগ্রামাররা চিনতে এবং জানতে পারে বলে আশা করা হচ্ছে। ইংলিশ শব্দটি "বর্গমূল" by তবে ইংরেজিতে যা প্রাকৃতিক তা অনুসারে জিনিসগুলির নামকরণ করা ভাল নয়। "অবৈধ" শব্দটি ধরুন, উদাহরণস্বরূপ, পুরোপুরি সূক্ষ্ম ইংরেজি শব্দ। তবে, কেউ যদি তাদের পদ্ধতির নাম রাখেন, বলুন isIllicitআমি মনে করি প্রতিবার আমি যখন এই পদ্ধতির কলটি দেখছি তখন আমার চোখের ছোঁড়া ছিঁড়ে ফেলতে চাই। এটি কেবল ভয়ঙ্কর দেখায় এবং ধারণাটি প্রকাশ করার আরও ভাল উপায় থাকতে হবে।
ব্র্যান্ডিন

18
sumএই প্রসঙ্গে ভুল মনে হচ্ছে। আমি AddDays। নেট এর পছন্দ ।
কোডসইনচওস

3
@ লুইজি কর্টিজ সাধারণ ইংরেজি শব্দ ক্রম মেলানোর জন্য পদ্ধতির নামগুলি বেছে নেওয়া হয়। Math.addExact(1, 2)কারণ আপনি "1 এবং 2 যোগ করুন" বলছেন। tomorrow.plusDays(2)কারণ আপনি "আগামীকাল 2 দিন" বলছেন। যদি কোনওরকম addExactসদস্য Integerহত তবে তা হত 1.plusExact(2)
তাভিয়ান বার্নস

8
ব্যক্তিগতভাবে, আমি ভবিষ্যতে plusDaysনতুন তারিখের x সংখ্যক দিনের addDaysপ্রত্যাশা প্রত্যাশা করব , যেখানে আমি আসল অবজেক্টটি পরিবর্তনের আশা করতে পারি। যদিও এটি কেবল আমি, আমি জাভার সাথে এতটা পরিচিত নই।
আজেদী 32

উত্তর:


52

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

ঠিক এ কারণেই। কল্পনা করুন আপনার নির্ধারিত উদ্দেশ্যে খেজুরের রেঞ্জের কারসাজির জন্য এক ধরণের এপিআই ছিলেন। এটি আপনাকে বিবৃতি দেওয়ার মতো পদ্ধতিগুলি উন্মোচিত করতে পারে:

var workdaySchedule = initialSchedule.withoutWeekends();

এটি ইংরেজী বিবৃতিতে খুব একইভাবে পড়ে: "কাজের দিনের সময়সূচী হ'ল সাপ্তাহিক ছুটি ছাড়াই প্রাথমিক সময়সূচী"। এটি প্রাথমিক সূচি পরিবর্তন করার ইঙ্গিত দেয় না , এটি কাজের সূচিটি আলাদা, নতুন জিনিস বলে বোঝায়।

এখন পরিবর্তে এটির নামটি কল্পনা করুন:

var workdaySchedule = initialSchedule.removeWeekends();

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


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

আপনার ক্ষেত্রে, আপনার ঠিক একই জিনিস রয়েছে। যদি আমি দেখেছিলাম :, tomorrow.plusDaysআমি কল্পনাও করতাম না যে tomorrowতা রূপান্তরিত হচ্ছে tomorrow.addDays, আমি মনে করি এটি হতে পারে। এটি কিছুটা সূক্ষ্ম- তবে অগত্যা খারাপ পথে নয় arily এ সম্পর্কে খুব কঠোর চিন্তা না করেই এই নামকরণটি স্বাভাবিকভাবেই আপনার চিন্তাকে সঠিক লাইন বরাবর সেট করে দেয় আপনি পরিবর্তন করছেন কিনা not এই অনুজ্ঞাসূচক এবং declaritive শৈলী মধ্যে এই পার্থক্য করতে পরিস্কার: "জুড়ুন" (এবং "সরান") হয় ক্রিয়া , যেহেতু "প্লাস" (এবং "ছাড়া") দ্বারা পদান্বয়ী অব্যয়


13
গতকাল addDaysবনামের সাথে আমার আসলেই সমস্যা ছিল plusDays! .NET সালে DateTimeবর্গ পদ্ধতি বলা addDays, addMonthsএবং addYears। আমি একটি আপেক্ষিক তারিখ (1 বছর, 2 মাস, 3 দিন আগে) পার্স করার পদ্ধতি তৈরি করেছি এবং তারা বর্তমান DateTimeঅবজেক্টটি সংশোধন করছে ভেবে উপরোক্ত পদ্ধতিগুলি কল করেছে । ডাটাবেসের প্রতিটি তারিখ 8 ই জুন, 2015 পর্যন্ত শেষ হয়েছিল। "এটি মজার।" আমি ভেবেছিলাম। আমি যখন মনে রেখেছিলাম যে অবজেক্টটি addDaysসংশোধন করে না DateTime, এটি একটি নতুন ফিরিয়ে দেয় । সুতরাং এই প্রশ্নের চারদিকে +1।
গ্রেগ বার্গার্ড্ট

1
@ গ্রেগবার্গার্ট একটি নেট নেটওয়ার্ক হিসাবে, আমার ঠিক বিপরীত প্রত্যাশা আছে। আমার অনুমান কেবল এর অর্থ এই যে "প্লাস" এবং "অ্যাড" বিনিময়যোগ্য, সরাসরি ম্যাপিংগুলিতে নয় +এবং+=
এজেন্ট_এল

2
@ এজেন্ট_এল এটি আকর্ষণীয় .NET কনভেনশনগুলি একপাশে রেখে "যুক্ত করুন" এবং "প্লাস" ইংরেজিতে বিনিময়যোগ্য নয়।
বেন অ্যারনসন

1
এছাড়াও, তারিখ এবং সময়গুলির জন্য, ডি + 1, এইচ + 12 এবং এর সাথে নির্দিষ্ট উত্সের সাথে সম্পর্কিত সময় সম্পর্কিত রেফারেন্স (এছাড়াও, স্পেস ফ্লাইট টি -10, টি -9, ইত্যাদি) এর জন্য কথা বলা এক ধরণের সাধারণ বিষয়। সাধারণত, এটি ডি-প্লাস -1, এইচ-প্লাস -12, টি-বিয়োগ -10 হিসাবে পড়ে। সম্ভবত মার্কিন কেন্দ্রিক, তবে এটি আমার কাছে এটিই হাজির।
ক্রিশ্চিয়ান এইচ

4
আপনি জোন স্কীটের এই পুরানো স্ট্যাকওভারফ্লো প্রশ্নটি আকর্ষণীয় দেখতে পাচ্ছেন: অপরিবর্তনীয় সংগ্রহের জন্য নন-মিউটেশন "অ্যাড" পদ্ধতির সেরা নাম কী?
মাইকসিম

2

.NET- এ নামকরণটি ভিন্ন তবে ফলাফলটি ঠিক একই। পরিবর্তে:

tomorrow = LocalDateTime.plusDays(1);

এখানে:

tomorrow = DateTime.Now.AddDays(1);

এর অর্থ শুধুমাত্র "প্লাস" এবং "অ্যাড" বোঝার মধ্যে পার্থক্যগুলি ব্যক্তিগত মতামত হিসাবে শেষ হয়েছিল। উত্সাহিত হোন, আপনি একা নন, কমপক্ষে আপনি এমন ভাষা চয়ন করতে পারেন যা আপনাকে আরও ভাল আবেদন করে:)


-1

এটি সম্ভবত .Methodসমস্ত পদ্ধতির জন্য জাভা সম্পর্কিত একটি নিদর্শন যা উভয় যা বস্তুটি সংশোধন করে এবং যা না করে।

এমন একটি ভাষা কল্পনা করুন যার মধ্যে একটি object=>methodবাক্য গঠন রয়েছে, যা methodকাজ করার জন্য অবজেক্টের একটি অনুলিপি দেয়। এখন যেমন একটি ভাষায়, startDate=>plusDays(5)স্পষ্টত দ্ব্যর্থহীন। এটি আসল তারিখটি নেয় এবং একটি নতুন তারিখ তৈরি করে যা 5 দিন পরে।

কোনও সম্পর্কযুক্ত নোটে, sumDaysএখানে কোনও অর্থ নেই। LocalDateএকটি সময় পয়েন্ট , সময় সময় নয় । আপনি যেকোনো সংখ্যক সময়সীমা যোগ করতে পারেন (এবং ফলাফলটি অন্য সময়কাল) এবং আপনি একটি সময় পয়েন্ট এবং একটি সময়কাল (ফলাফল অন্য সময় পয়েন্ট) যোগ করতে পারেন, তবে আপনি সময় পয়েন্ট যোগ করতে পারবেন না।

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