মূলত একটি অন্তর্নির্মিত ফাংশনটির নামকরণ করে এমন কোনও ফাংশন করা কি অনাকাঙ্ক্ষিত?


40

আমি নির্দিষ্ট প্রসঙ্গে ন্যূনতম এবং সর্বাধিক ক্রিয়াকলাপগুলিতে বিভ্রান্ত হয়ে পড়ি।

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

//how many autographed CD's can I give out?
int howManyAutographs(int CDs, int Cases, int Pens)
{
    //if no pens, then I cannot sign any autographs
    if (Pens == 0)
        return 0;

    //I cannot give away a CD without a case or a case without a CD
    return min(CDs, Cases);
}

সহজ। তবে অন্য প্রসঙ্গে আমি বিভ্রান্ত হয়ে পড়ি। আমি যদি সর্বাধিক বা ন্যূনতম সেট করার চেষ্টা করি তবে আমি এটি পিছনের দিকে পাব।

//return the sum, with a maximum of 255
int cappedSumWRONG(int x, int y)
{
    return max(x + y, 255); //nope, this is wrong
}

//return the sum, with a maximum of 255
int cappedSumCORRECT(int x, int y)
{
    return min(x + y, 255); //much better, but counter-intuitive to my mind
}

নিম্নলিখিত হিসাবে আমার নিজের কাজগুলি করা কি অনাকাঙ্ক্ষিত?

//return x, with a maximum of max
int maximize(int x, int max)
{
    return min(x, max);
}

//return x, with a minimum of min
int minimize(int x, int min)
{
    return max(x, min)
}

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


72
যদি ন্যূনতম এবং সর্বাধিক আপনার পাঠযোগ্যতার ক্ষতি করে, তবে নিয়মিত "যদি" এর জন্য অদলবদল বিবেচনা করুন। কখনও কখনও আরও ভাল পাঠযোগ্যতার জন্য আরও কিছুটা কোড লেখা ভাল।
টি। সার - মনিকা

23
একটি সংক্ষিপ্ত পোস্টের সাহায্যে আপনি "ক্লিন কোডিং" এর সম্পূর্ণ ধারণাটি নষ্ট করেছেন। আমি আপনাকে স্যালুট জানাই স্যার!
ইয়ান

21
সম্ভবত আপনি সি ++ 11 std::clampফাংশন বা অনুরূপ কিছু বিবেচনা করতে পারেন ।
রওয়ং

15
সম্ভবত আরও ভাল নাম up_to(জন্য min) এবং at_least(জন্য max) হবে? আমি মনে করি তারা minimizeইত্যাদি অর্থের চেয়ে ভাল বোঝায় যদিও তারা কেন পরিবর্তনশীল তা উপলব্ধি করতে মুহুর্তের চিন্তাভাবনা নিতে পারে may
ওয়ারবো

59
minএবং maxএছাড়াও minimizeএবং maximizeআপনি যে ফাংশনগুলি লিখতে চান তার সম্পূর্ণ ভুল নাম। ডিফল্ট minএবং maxআরও অনেক কিছু বোঝার। আপনি আসলে প্রায় সঠিকভাবে ফাংশন নাম পেয়েছেন। এই অপারেশনটিকে ক্ল্যাম্পিং বা ক্যাপিং বলা হয় এবং আপনি দুটি ক্যাপিং ফাংশন লিখেছেন। আমি পরামর্শ দেব capUpperBoundএবং capLowBound। আমাকে কারও কাছে ব্যাখ্যা করতে হবে না যে কোনটি কোনটি করে, এটি সুস্পষ্ট।
slebetman

উত্তর:


120

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

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

int cap(int value, int limit) { return (value > limit) ? limit : value; }

এটি যা প্রয়োজন তা করে এবং এর নাম থেকে তা বলে। (আপনি বাস্তবায়ন হতে পারে capপরিপ্রেক্ষিতে minযেমন দেখানো timster এর উত্তর )।

আর একটি ঘন ঘন ব্যবহৃত ফাংশন নাম clamp। এটি দুটি আর্গুমেন্ট এবং "ক্ল্যাম্পস" গ্রহণ করে অন্য দুটি মান দ্বারা সংজ্ঞায়িত বিরতিতে প্রদত্ত মান।

int clamp(int value, int lower, int upper) {
    assert(lower <= upper);  // precondition check
    if (value < lower) return lower;
    else if (value > upper) return upper;
    else return value;
}

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


2
আপনিও এটা getValueNotBiggerThan (এক্স, সীমা) নাম কি হতে পারে এই সঠিক পন্থা, এবং একটি শালীন কম্পাইলার ফাংশন inlined করা হবে সঙ্গে এবং তার ফলে মেশিন কোড বিল্ট-ইন ব্যবহার ঠিক একই হবে
Falco

20
@ ফ্যালকো আমি বলব যে "ক্যাপ" প্রায় "মূল্যের চেয়ে বড় হবে না" এর সমার্থক শব্দ তবে আমি আজ সেই বাইকের শেডটি আঁকতে যাচ্ছি না। ;-)
5gon12eder

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

1
clampখুব উল্লেখ করা হবে। এবং যদি এটি সঠিকভাবে লেখা থাকে তবে আপনি কেবল যখন এটি একপথে আবদ্ধ করতে চান তখন আপনি কেবল একটি অনন্ত / নেতিবাচক অনন্তের সীমা ব্যবহার করতে পারেন। উদাহরণস্বরূপ, কোনও সংখ্যা 255 এর চেয়ে বেশি নয় (তবে নিম্ন সীমানা নয়) তা নিশ্চিত করতে আপনি ব্যবহার করতে চান clamp(myNumber, -Infinity, 255)
ক্যাট

115

আপনি যদি 10 এর মতো minimize(4, 10)ফেরত দেয় এমন কোনও ফাংশন তৈরি করেন , তবে আমি বলব যে এটি অগ্রহণযোগ্য কারণ আপনার সহকর্মী প্রোগ্রামাররা আপনাকে শ্বাসরোধ করতে পারে।

(ঠিক আছে, সম্ভবত তারা আপনাকে আক্ষরিক অর্থে মৃত্যুর জন্য শ্বাসরোধ করবে না, তবে মারাত্মকভাবে ... তা করবেন না))


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

ওহ ... এই উত্তরে একটি দুর্দান্ত শীতল (এবং বেশ ভোট দেওয়া হয়েছে) মন্তব্য ছিল। (এটি উত্তরের প্রথম মন্তব্যও ছিল, যা রসাত্মক প্রবাহকে সহায়তা করেছিল))
তোগাম

আমি পাঞ্চ কার্ড পেতে এবং DO NOT("স্পিন্ডল, ভাঁজ বা মিটলেট না") ছাড়িয়ে যেতে চাইছি । যে কেউ এরকম কিছু কার্যকর করেছে তারা একটি কার্ড পাবে।
ক্লকওয়ার্ক-মিউজিক

26

কোনও ফাংশন অ্যালিজ করা ভাল, তবে বিদ্যমান পদগুলির অর্থ পরিবর্তনের চেষ্টা করবেন না

ফাংশনটির একটি নাম তৈরি করা ঠিক আছে - সাধারণ লাইব্রেরি সর্বদা এটি করে

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

সুতরাং আপনার ক্ষেত্রে, "মিনিমিনাম / সর্বাধিক" পার্লেন্সটি ছেড়ে দিন যা আপনি বিভ্রান্তিকর মনে করেন এবং আপনার নিজের তৈরি করতে সহজ, কোড বোঝে।

আপনার উদাহরণটি পুনর্বিবেচনা:

int apply_upper_bound(int x, int y)
{
    return min(x, y);
}


int apply_lower_bound(int x, int y)
{
    return max(x, y)
}

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


4
আমি মনে করি আপনি অ্যাপ্লিকেশনটিকে ভুল বুঝেছেন minএবং maxএটি ওপিকে বিভ্রান্ত করে। এটি যখন minকোনও কোনও মানের উপরের উপরের সীমানা নির্ধারণ করতে ব্যবহৃত হয়। get_lower_valueএই অ্যাপ্লিকেশনটিতে ঠিক ততটাই প্রতিদ্বন্দ্বী হবে। যদি আমি এই অপারেশনের জন্য বিকল্প নাম চয়ন করতে চাই , তবে আমি এটিকে উচ্চতম বলব, যদিও আমি নিশ্চিত না যে কতজন প্রোগ্রামার তাৎক্ষণিকভাবে এটি বুঝতে পারে।
বাম দিকের বাইরে

3
@leftaroundabout: সেট {1, 2} এর supremum 2, তাই নাম ব্যবহার না করলেও supremumফাংশন জন্য get_lower_valueযে শুধু কলে উপরে সংজ্ঞায়িত হচ্ছে min। এটি পরবর্তী প্রোগ্রামারকে কল করার ঠিক একই সমস্যা সৃষ্টি করে maximise। আমি এটি কল করার পরামর্শ দেব apply_upper_bound, তবে আমি নিশ্চিত নই যে এটি নিখুঁত। এটি এখনও অদ্ভুত কারণ এটি আপনার চারপাশের প্যারামিটারগুলির যে কোনও উপায়ে কাজ করে তবে নামটি বোঝায় যে প্যারামিটারগুলির একটি হ'ল "মান" এবং অন্যটি "আবদ্ধ" এবং সেগুলি কোনওরকম আলাদা।
স্টিভ জেসোপ

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

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

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

12

আমি এই প্রশ্ন ভালোবাসি। যদিও এটি ভেঙে দেওয়া যাক।

1: আপনার কোডের একটি একক লাইন মোড়ানো উচিত?

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

অতিরিক্তভাবে আপনি এই দিনগুলিতে একটি লাইনে প্রচুর স্টাফ করতে পারেন।

2: 'মিন' এবং 'ম্যাক্স' নামগুলি বিভ্রান্তিকর

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

3: আপনার নিজের নাম পরিবর্তন করে অন্য কোনও কিছু করা উচিত Should

হ্যাঁ, এটি জন্য যান। উদাহরণস্বরূপ, আপনি থাকতে পারে:

class Employee
{
    int NumberOfHolidayDaysIShouldHave(int daysInLue, int maxAllowableHolidayDays)
    {
         // Return the number of days in lue, but keep the value under the max allowable holiday days!
         // Don't use max, you fool!!
         return Math.Max(daysInLue, maxAllowableHolidayDays)
    }
}

এটি অর্থ যোগ করে, এবং কলকারীটির কীভাবে মান গণনা করতে হয় তা জানতে বা জানতে চান না want

4: আপনার "মিনিট" নামকরণ করা উচিত "সর্বাধিক"

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

// Add x and y, but don't let it go over 255
s = min(x + y, 255);

তারপরে যখন কেউ পড়ে

// Add x and y, but don't let it go over 255
s = max(x + y, 255);

তারা জানেন যে আপনি একটি ভুল করেছেন।


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

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

1
@ ফ্যালকো লোল উফ্ !!!
ইভান

4
@ ডেভিডহ্যামেন: এটি সত্যিকার অর্থে নয়, যেহেতু কোনও বাস্তব প্রোগ্রামিং স্টাইল FunctionWhichReturnsপ্রতিটি ফাংশনের সামনের অংশে মশালাকে রাখে না (এটি কোনও ব্যতিক্রম বা সমাপ্ত করে না)। আপনি আপ সঙ্গে শেষ হতে পারে getMinimum, getLarger(অথবা getLargestঅধিক 2 ইনপুট সঙ্গে) যদিও, লাইন যে (ক) বিশুদ্ধ ফাংশন এবং / অথবা "getters" আঁচিল ব্যবহার করা উচিত বরাবর বাস্তব পরামর্শ অনুসরণ করে get, (খ) ইংরেজি ভাষায় সংক্ষিপ্ত করা উচিত নয় নাম থাকবে না। স্পষ্টতই যারা এই ধরনের ফাংশন কল করার সিদ্ধান্ত নেন তাদের পক্ষে এটি খুব ভার্জোজ max
স্টিভ জেসপ

1
হ্যাঁ, @ ফ্যালকের মন্তব্য দেখুন। আমি সত্যিই তার পরে এটি সংশোধন করতে পারে না!
ইভান

4

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

max"সর্বাধিক" এর অর্থ , তবে আপনার "স্বজ্ঞাত" বোঝাপড়াটি "সর্বোচ্চ থেকে সর্বোচ্চ" এর মতো কিছু। কিন্তু এই কেবল ফাংশনের একটি ভুল বুঝতে, এবং থেকে নাম পরিবর্তন করা হয় maxথেকে maximumআপনার বিভিন্ন ব্যাখ্যা যোগাযোগ নেই। এমনকি যদি আপনি দৃ a়ভাবে বিশ্বাস করেন যে ভাষা ডিজাইনাররা কোনও ভুল করেছে, তবে এর মতো কিছু করবেন না।

তবে নামটি cap(x, limit)যেমন বলা হয়েছে তেমনটি পরিবর্তন করা ঠিক হবে, কারণ এটি স্পষ্টভাবে অভিজাত করে, উদ্দেশ্যটি স্পষ্টভাবে প্রকাশ করে min


3

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

যদি আপনাকে সর্বনিম্ন, ক্ষুদ্রতম বা খুব শীঘ্রই জিজ্ঞাসা করা হয়, আপনি কি মনে করেন যে উপযুক্তটি উপযুক্ত?

মিনিট এবং সর্বাধিক একা ছেড়ে দিন। পরীক্ষাগুলি লিখুন যাতে কমপক্ষে আপনি এটি দ্বিতীয়বার সংশোধন করতে পারেন।

আপনার প্রকল্পে যদি এই ফাংশনগুলি এত বেশি ব্যবহার করার প্রয়োজন হয় তবে কোনটি ব্যবহার করবেন তা স্পষ্ট করতে আপনাকে সহায়তা করার জন্য আপনি কিছু প্রকারের ইঙ্গিত নিয়ে আসবেন। <বা> এর মতো বাছাই করুন, মুখের প্রশস্ত অংশটি বৃহত্তর মানটির মুখোমুখি।


1
অন্তর্নিহিত সমস্যা হিসাবে সম্ভাব্য পরিভাষা বিভ্রান্তির জন্য +1। আমি মনে করি " 255 সর্বাধিক সহ সমষ্টি ফিরিয়ে দিন" মন্তব্যে এই বিভ্রান্তি শুরু হয় , সুতরাং তিনি মনে করেন যে maxফাংশনটি আরও উপযুক্ত, তবে যুক্তি অনুসারে minজিনিসটি যা তিনি আসলে সন্ধান করছেন।
Revenant

2

আপনার প্রশ্নের উত্তর দিতে: এটি অপ্রয়োজনীয় হতে পারে এমন অন্য কোনও কারণ আছে কি? একটি গ্রুপ প্রকল্প সম্পর্কে কি? এটি বোঝায় যে আপনি নিজের ফাংশন চান যা কোনও সমস্যা নয়। কেবলমাত্র নিশ্চিত করুন যে তারা আপনার নিজস্ব সহায়ক শ্রেণিতে রয়েছে এবং অন্যরা এটিকে আমদানি না করা হলে সহজে কল করতে পারে না। (Joes.Utilities।)

তবে আপনার সমস্যাটি আবার দেখার জন্য, মূলত আমি পরিবর্তে এটি ভাবছিলাম:

return (input >= 255) ? 255 : input;

আপনি বিভ্রান্ত হয়ে যাচ্ছেন কারণ আপনি এই মিনিট / সর্বাধিক কার্যগুলিতে আপনার মস্তিষ্কের যুক্তি প্রয়োগ করার চেষ্টা করছেন। পরিবর্তে কেবল ইংরেজিতে কথা বলুন। হয় অন্যথায় ।ifinputgreater than or equal to 255 then return 255returninput

যা হলো:

if (input >= 255) {
   255 
} else {
   input
}

আমার মতামত. আপনি ভুল কারণে সর্বাধিক \ মিনিটের জন্য যাচ্ছেন, এইগুলির গতি নগণ্য। যা বোঝায় তা করুন


1
আমার একজন প্রবীণ সহকর্মী সর্বদা বলতেন "কম্পিউটারটি আপনার জন্য চিন্তাভাবনা করুন"।

1

আমি যখন আপনার সমস্যা বুঝতে পারি তখনও আমি এটি করতে নারাজ। মিনিট () এবং সর্বোচ্চ () কী করবে তা কেবল আপনার খুলির মধ্যে ullালাই ভাল।

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

কোন পর্যায়ে কোনটি ব্যবহার করবেন তা বুঝতে যদি আপনার সমস্যা হয় তবে আমি বলব, এটির ব্যাখ্যা দিয়ে একটি মন্তব্য যুক্ত করুন। তারপরে যদি কোনও ভবিষ্যতের পাঠক একইভাবে বিভ্রান্ত হয় তবে আপনার মন্তব্যটি এটিকে পরিষ্কার করা উচিত। বা যদি আপনি এটি ভুল করে থাকেন তবে মন্তব্যটি আপনাকে কী করার চেষ্টা করছে তা ব্যাখ্যা করে, এটির ডিবাগ করার চেষ্টা করা ব্যক্তিটির একটি চিহ্ন থাকবে।

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

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

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


0

নতুন নামগুলি আপনার কোডকে অনেক পরিষ্কার করে দেয় এবং কারও দ্বারা বোঝা যায় না তবে ফাংশনগুলিতে নির্মিত নতুন নামকরণ ঠিক আছে। (আপনি যদি সি / সি ++ ব্যবহার করছেন তবে # ডিফাইনটি ব্যবহার করবেন না কারণ এটি কী চলছে তা দেখতে অসুবিধা হয়)) কলিং কোডটি কী করছে এবং কেন এটি করছে তা ব্যাখ্যা করার জন্য কোনও ফাংশনের নাম মন্তব্য করা উচিত ।

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

যদি আপনার ভাষা এটির অনুমতি দেয় তবে আপনি চেষ্টা করতে পারেন

return  calculatedDiscount.ButNoMoreThen(maxAllowedDiscount)

return  CDsInStocked.ButNoMoreThen(CasesInStock)

0

না।

আপনি আপনার মোড়ক লিখবেন না। এই মোড়কের নামগুলি খুব তাৎপর্যপূর্ণ নয়।

আপনি যা করার চেষ্টা করছেন তা হ'ল এক ধরনের কোড অবলোচনা। আপনি একটি অতিরিক্ত স্তর আবিষ্কার করছেন যা 2 টি উদ্দেশ্যে উদ্দেশ্য করে:

  1. অন্যান্য লোকেরা আপনার কোড বুঝতে পারে না।
  2. আপনি কখনই অন্য মানুষের কোড বুঝতে শিখেন না।

আপনি স্বচ্ছন্দ নন এমন জিনিসগুলি গোপন করে আপনি ভবিষ্যতে কেবল নিজের কোডটি এখন আঘাত করছেন। আপনার আরামদায়ক জোনে থাকার মাধ্যমে আপনি বাড়তে পারবেন না। আপনার যা প্রয়োজন তা হ'ল কীভাবে minএবং কীভাবে maxকাজ করা learn


-1

এটি ঠিক আছে, এবং মাইন, ম্যাক্সকে অতিরিক্ত লাগিয়ে দেওয়া এবং আন্ডারশুট করার জন্য ব্যবহার করা সত্যিকারের বিপরীত নয়। এটি ব্যবহার করেও করা হয়:

  • মেঝে () এবং সিল ()
  • বাতা, সীমা, সীমার
  • এবং উচ্চতর অর্ডার ট্র্যাঙ্কেশন সহ অবশ্যই মোড।

ফার্মওয়্যারগুলিতে এটি এমএমএক্সের চেয়েও আগের হয়, যা নিজেই আধুনিক 3 ডি গ্রাফিক্সের পূর্বাভাস দেয় যা এই এক্সটেন্সিভলে নির্ভর করে।

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


আমি দুঃখিত, এমএমএক্সের সাথে কী আছে?
টোবিয়া তিসান

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

-1

কিছু ক্ষেত্রে এটা ঠিক আছে, কিন্তু না , আপনার উদাহরণে কারণ শব্দ থেকে এটি অনেক ভালো উপায় আছে:
saturate, clamp, clip, ইত্যাদি


-1

আমি বরং 'জঞ্জাল' নামক একটি জেনেরিক ফাংশন তৈরি করব

//Assumes lower_bound <= upper_bound
template <typename T>
T bounded(T value, T lower_bound, T upper_bound){
    if (value < lower_bound)
        return lower_bound;
    if (value > upper_bound)
        return upper_bound;
    return value;
}

//Checks an upper (by default) or lower bound
template <typename T>
T bounded(T value, T bound, bool is_upper_bound = true){
    if (is_upper_bound){
        if (value > bound)
            return bound;
    }
    else {
        if (value < bound)
            return bound;
    }
    return value;
}

বা 'মিনিট' এবং 'সর্বোচ্চ' ব্যবহারের সাথে

//Assumes lower_bound <= upper_bound
template <typename T>
T bounded(T value, T lower_bound, T upper_bound){
    return max(min(value, upper_bound), lower_bound);
}

//Checks an upper (by default) or lower bound
template <typename T>
T bounded(T value, T bound, bool is_upper_bound = true){
    if (is_upper_bound)
        return min(value, bound);
    else
        return max(value, bound);
}

-1

আপনার ফাংশন কল সম্পর্কে কি:

atmost(x,255): সর্বাধিক x বা 255 এর নীচে ফিরে আসুন।

atleast(10,x): এক্স বা কমপক্ষে 10 এর উচ্চতর ফিরে আসুন।


-1

min(x+y, MAX_VALUE); এর চেয়ে অনেক বেশি অর্থ বহন করবে myCustomFunction(x, y);

উত্তরটি হ্যাঁ, এটি অনাবশ্যক । এটি আপনার মস্তিষ্কের ভাষাতে কেবলমাত্র একটি উপাধি হিসাবে কাজ করে।

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