বুলিয়ান পদ্ধতি নামকরণের পাঠযোগ্যতা


120

সরল প্রশ্ন, পাঠযোগ্যতার দিক থেকে আপনি কোন বুলিয়ান পদ্ধতির জন্য কোন পদ্ধতির নাম পছন্দ করেন:

public boolean isUserExist(...)

বা:

public boolean doesUserExist(...)

বা:

public boolean userExists(...)

21
প্রথম মত শোনাচ্ছেisBabbyFormed

ভাষার উপর নির্ভর করে। বিভিন্ন ভাষার আলাদা আলাদা কনভেনশন রয়েছে; জাভা এবং অবজেক্টিভ সি মাথায় আসে। বর্ডারলাইন সাবজেক্টিভও।
জেদ স্মিথ

সাবজেক্টিভ - যথেষ্ট ফর্সা
যুবাল আদম

2
খাঁটি সাপেক্ষিক getUserExistence, userIsNotExtinct, userHasExistentialStateইত্যাদি ...
dreamlax

সার্ত্রে গর্বিত হবেন
কর্নেল ম্যাসন

উত্তর:


112
public boolean userExists(...)

আমার পছন্দের হবে। এটি আপনার শর্তাধীন চেকগুলি প্রাকৃতিক ইংরাজির মতো করে তোলে:

if userExists ...

তবে আমি অনুমান করি যে এখানে কোনও কঠোর এবং দ্রুত নিয়ম নেই - কেবল সামঞ্জস্যপূর্ণ থাকুন


3
"আপনার {পদ্ধতি কলকে natural আরও অনেক প্রাকৃতিক ইংরাজির মতো করে তোলে" বোর্ড জুড়ে যুক্তিযুক্ত নামকরণের জন্য দুর্দান্ত পরীক্ষার মতো শোনাচ্ছে। বিষয়টি সম্পর্কে আমার চিন্তাভাবনা পরিষ্কার করে দিয়েছি - ধন্যবাদ!
করি

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

4
.. তবে কেন একটি বল ফেরত দেওয়ার পদ্ধতিগুলি বাইরে ব্যবহার করা হবে if? যদি তাদের পার্শ্ব-প্রতিক্রিয়া থাকে তবে এটি গন্ধ আরও বেশি। if IsUserExisting()এবং if DoesUserExist()ভয়ঙ্কর দেখায় এবং এড়ানো উচিত।
আরজেফালকোনার

@ আরজেফালকোনার মাঝে মাঝে আপনাকে সেই পদ্ধতিটির ফলাফল বিভিন্ন স্থানে ব্যবহার করতে হতে পারে, সুতরাং আপনি এটিকে পরিবর্তনশীল হিসাবে নির্ধারিত করবেন। যেহেতু পদ্ধতি বলা হয় userExists, আপনি ভেরিয়েবলের কোন নামটি ঘোষণা করবেন? userExistsপদ্ধতিগুলি নয়, ভেরিয়েবলের পক্ষে ভাল। @ অস্কার যেমন লিখেছেন - এটি বিবরণের মতো শোনাচ্ছে, কোনও প্রশ্ন নয়।
Jarosław Wlazło

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

40

আমি বলব userExists, কারণ আমার কলিং কোডটি 90% সময় মতো দেখাবে:

if userExists(...) {
  ...
}

এবং এটি ইংরেজিতে খুব আক্ষরিক অর্থে পড়ে।

if isUserExistএবং if doesUserExistঅপ্রয়োজনীয় মনে হয়।


18

পাঠযোগ্যতার তাড়া করার সময় স্বচ্ছতার ত্যাগের বিষয়ে সতর্ক থাকুন ।

যদিও if (user.ExistsInDatabase(db)) চেয়ে ভাল পড়া হয়েছে if (user.CheckExistsInDatabase(db)), তবে একটি বুনার প্যাটার্নযুক্ত শ্রেণীর ক্ষেত্রে বিবেচনা করুন, (বা যে শ্রেণীর উপর আপনি রাজ্য সেট করতে পারেন):

user.WithName("Mike").ExistsInDatabase(db).ExistsInDatabase(db2).Build();

এটা যদি পরিষ্কার হয় না ExistsInDatabase বিদ্যমান কিনা তা যাচাই করে বা এটি বিদ্যমান কিনা তা নির্ধারণ করছে কিনা তা । আপনি কোনও তুলনা মান লিখবেন না if (user.Age())বা if (user.Name())ছাড়বেন না , সুতরাং কেন if (user.Exists())ভাল ধারণা হ'ল কারণ সেই সম্পত্তি / ফাংশনটি বুলিয়ান ধরণের এবং আপনি প্রাকৃতিক ইংরেজের মতো আরও পড়ার জন্য ফাংশন / সম্পত্তিটির নাম পরিবর্তন করতে পারেন? বুলিয়ান ছাড়া অন্য ধরণের জন্য আমরা একই ধাঁচটি ব্যবহার করা কি খারাপ?

অন্যান্য ধরণের সাথে, এ if বিবৃতি একটি ফাংশনের রিটার্ন মানকে কোডের একটি মানের সাথে তুলনা করে, তাই কোডটি এমন কিছু দেখায়:

if (user.GetAge() >= 18) ...

যা "যদি ব্যবহারকারী ডট প্রাপ্ত বয়স ১৮ এর চেয়ে বড় বা তার সমান হয় ..." সত্য হয় - এটি "প্রাকৃতিক ইংরেজি" নয়, তবে আমি যুক্তি দিয়ে বলব যে object.verb প্রাকৃতিক ইংরাজির সাথে আর কখনও দেখা যায় না এবং এটি কেবল আধুনিক প্রোগ্রামিংয়ের একটি মৌলিক দিক (যেমন মূলধারার অনেকগুলি ভাষা)। প্রোগ্রামারদের উপরের স্টেটমেন্টটি বুঝতে সমস্যা হয় না, সুতরাং নিম্নলিখিতগুলি আরও খারাপ?

if (user.CheckExists() == true)

যা সাধারণত সংক্ষিপ্ত করা হয়

if (user.CheckExists())

মারাত্মক পদক্ষেপ অনুসরণ করা

if (user.Exists())

যদিও এটি বলা হয়ে থাকে যে "কোডটি লিখিতের চেয়ে বেশি 10 বার পড়া হয়", তবুও এটি অত্যন্ত গুরুত্বপূর্ণ যে ত্রুটিগুলি খুঁজে পাওয়া সহজ। ধরুন আপনার অস্তিত্ব () নামে একটি ফাংশন রয়েছে যা এর ফলে অবজেক্টটি বিদ্যমান এবং সাফল্যের ভিত্তিতে সত্য / মিথ্যা প্রত্যাবর্তন করে। আপনি সহজেই কোডটি দেখতে পেতেনif (user.Exists()) পেতেন এবং বাগটি স্পট না পেলেন - if (user.SetExists())উদাহরণস্বরূপ কোডটি পড়লে বাগটি আরও অনেক স্পষ্ট হবে ।

অতিরিক্ত হিসাবে, ব্যবহারকারীর এক্সজিস্টগুলি () সহজেই জটিল বা অদক্ষ কোড ধারণ করতে পারে, কোনও কিছু যাচাই করার জন্য একটি ডেটাবেজে রাউন্ড ট্রিপিং। user.CheckExists () এটি পরিষ্কার করে দেয় যে ফাংশনটি কিছু করে।

এখানে সমস্ত প্রতিক্রিয়াও দেখুন: নামকরণের কনভেনশন: এমন কোনও পদ্ধতির নাম কী যা একটি বুলিয়ান দেয়?

একটি চূড়ান্ত নোট হিসাবে - "জিজ্ঞাসা করবেন না জিজ্ঞাসা করুন" অনুসরণ করে, সত্য / মিথ্যা প্রত্যাখ্যান করে এমন অনেকগুলি ক্রিয়াকলাপ অদৃশ্য হয়ে যায় এবং তার অবস্থার জন্য কোনও বস্তু জিজ্ঞাসা করার পরিবর্তে, আপনি এটিকে কিছু করতে বলুন যা এটি বিভিন্নভাবে করতে পারে উপায় তার রাষ্ট্র ভিত্তিক।


2
> Suppose you had a function called Exists() which causes the object to existএটি ইতিমধ্যে একটি সমস্যা। যেমন একটি পদ্ধতি একটি ক্রিয়াপদ হওয়া উচিত, মত Create। খুব কমপক্ষে এটি হবে Existতবে ক্রিয়াপদের ব্যবহার খুব কম ব্যবহৃত হয়েছে বলেই "অস্তিত্ব" রয়েছে। It's not clear if ExistsInDatabase is checking whether it does exist, or setting the fact that it does exist.এটা খুব পরিষ্কার। আমি দৃ would়ভাবে বলব যে বেশিরভাগ বিকাশকারীরা যদি কেবল একটি বুলিয়ান ফেরত ব্যতীত অন্য কিছু করে তবে অবাক হবে।
আরজেফালকোনার

@ আরজেফালকোনার Most developersসেখানে আপনার বাক্যটির মূল চাবিকাঠি। আমি বলতে চাই যে কিছু উপস্থিত থাকলে চেক ছাড়া অন্য কিছু করে all developersথাকলে অবাক হবেন CheckExists()। এটি Exists()একটি ভয়ানক নাম নয়, কেবল CheckExists()এটিই একটি ভাল নাম এবং এই প্রশ্নটি একটি সাধারণ নীতি হিসাবে জিজ্ঞাসা করছে, নামকরণের সেরা প্যাটার্নটি কী? উত্তরটি হ'ল এটি অন্য ফাংশনের মতো চিকিত্সা করা, নামটি একটি ক্রিয়া দিয়ে শুরু করা এবং এটি কোনও বুলিয়ান ফেরত দেওয়ার কারণে একটি ভিন্ন প্যাটার্ন ব্যবহার করবেন না।
মাইকেল পার্কার

হ্যাঁ, প্রশ্নটি বুলিয়ান পদ্ধতিগুলির জন্য নামকরণের সেরা প্যাটার্ন সম্পর্কে। বুলের পদ্ধতিগুলি অনন্য এবং তাদের নিজস্ব সাধারণ নাম রয়েছে - প্রিডিকেট। আপনার অন্যান্য ফাংশনের মতো তাদের ব্যবহার করা উচিত নয়। বুলিয়ান পদ্ধতির নামের সাথে প্রশ্নের পাশাপাশি একটি ক্রিয়া রাখা অপ্রয়োজনীয়। এবং এটি কোড পঠনযোগ্যতার উপর নেতিবাচক প্রভাব ফেলে। কোনও ক্রিয়াবিহীন প্রশ্ন আকারে বুলিয়ান পদ্ধতির নামকরণকে শিল্পের সেরা অনুশীলন হিসাবে গ্রহণ করা হয়। উদাহরণ: docs.microsoft.com/en-us/dotnet/api/system.io.file.exists developer.android.com/reference/java/io/File#exists ()
Almir

@ আলমির ফাইল.এক্সিস্টগুলি একটি অত্যন্ত পুরানো কল (কমপক্ষে ডট নেট ১.১) এবং এটি আধুনিক পাঠযোগ্যতার মানগুলির একটি ভাল উদাহরণ নয়। কিভাবে মাইক্রোসফট সম্মত আরো আধুনিক উদাহরণের জন্য আধুনিক ডট নেট কোর এপিআই তাকান: github.com/dotnet/sdk , কিছু র্যান্ডম উদাহরণ সংযোগ আছে লিংক লিংক
মাইকেল পার্কার

15

পাঠযোগ্যতার জন্য লক্ষ্যটি সর্বদা কোডটি প্রাকৃতিক ভাষার সর্বাধিক নিকটতম হওয়া উচিত write সুতরাং এই ক্ষেত্রে, userExistsসেরা পছন্দ বলে মনে হচ্ছে। উদাহরণস্বরূপ, "অন্য" উপসর্গটি ব্যবহার অন্যথায় সঠিক হতে পারে isProcessingComplete


1
আপনার দ্বিতীয় উদাহরণের জন্য, ProcessingIsCompleteপ্রাকৃতিক ভাষার কাছাকাছি? উদাহরণস্বরূপ: যদি (প্রক্রিয়াজাতকরণ
ইয়াং

9

আমি ইউজারএক্সজিস্টদের সাথে যাব () কারণ 1) এটি প্রাকৃতিক ভাষায় বোধ করে এবং 2) এটি আমার দেখা APIs এর সম্মেলনগুলি অনুসরণ করে।

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

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


5

এমন কিছু বিষয় বিবেচনা করার আছে যা আমি মনে করি এখানে বেশ কয়েকটি অন্যান্য উত্তর মিস করেছে

  1. এটি নির্ভর করে যদি এটি কোনও সি ++ শ্রেণির পদ্ধতি বা কোনও সি ফাংশন। এটি যদি কোনও পদ্ধতি হয় তবে সম্ভবত এটি বলা হবে if (user.exists()) { ... }এবং if (user.isExisting()) { ... }
    নাও if (user_exists(&user))। কোডিং স্ট্যান্ডার্ডের পিছনে এই কারণটি হ'ল রাষ্ট্রবিরোধী পদ্ধতিগুলি একটি ক্রিয়া দিয়ে শুরু করা উচিত যেহেতু তারা যখন বাক্যটির সামনে পড়বে তখন কোনও বাক্যটির মতো পড়বে।

  2. দুর্ভাগ্যক্রমে প্রচুর পুরানো সি ফাংশন সাফল্যের জন্য 0 এবং ব্যর্থতার জন্য শূন্য নয়, সুতরাং যদি আপনি সমস্ত বুল ফাংশন অনুসরণ না করে বা সর্বদা এর মতো সত্যের সাথে তুলনা না করেন তবে স্টাইলটি নির্ধারণ করা কঠিন হতে পারে if (true == user_exists(&user))


5

এই প্রশ্নের আমার সাধারণ নিয়মটি হ'ল:

যদি বুলিয়ান পদ্ধতিতে ইতিমধ্যে একটি ক্রিয়া থাকে, একটি যুক্ত করবেন না। অন্যথায়, এটি বিবেচনা করুন। কিছু উদাহরণ:

$user->exists()
$user->loggedIn()
$user->isGuest() // "is" added

2

খাঁটি সাপেক্ষিক

আমি পছন্দ করি userExists(...)কারণ এরপরে এই জাতীয় বিবৃতি আরও ভালভাবে পড়ুন:

if ( userExists( ... ) )

অথবা

while ( userExists( ... ) )

1

এই বিশেষ ক্ষেত্রে, প্রথম উদাহরণটি এমন ভয়াবহ ইংরেজী যা এটি আমাকে কুঁচকে দেয়।

আমি সম্ভবত তিন নম্বরে যাব কারণ এটি বিবৃতিতে পড়ার সময় এটি কেমন শোনাচ্ছে। "যদি ব্যবহারকারী বিদ্যমান থাকে" "যদি ব্যবহারকারী উপস্থিত থাকে" এর চেয়ে আরও ভাল শোনায়।

এটি ধরে নেওয়া হচ্ছে এটি অবশ্যই ব্যবহৃত হবে যদি বিবৃতি পরীক্ষা অবশ্যই করা হয় ...



0

পদ্ধতির নামগুলি পাঠযোগ্যতার জন্য পরিবেশন করে, আপনার সম্পূর্ণ কোডের মধ্যে কেবলমাত্র সেইগুলিই সবচেয়ে ভাল হবে যা বেশিরভাগ ক্ষেত্রে এটি শর্তগুলির সাথে শুরু হয় এইভাবে সাবজেক্ট প্রাকৃতিক বাক্য কাঠামো অনুসরণ করে।


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