পি * দিয়ে ফাংশন প্যারামিটারের নামগুলির উপসর্গ করার কী কী সুবিধা রয়েছে?


22

আমি প্রায়শই এমন প্রকল্পগুলি (জাভা প্রকল্পগুলিতে এবং Eclipse ব্যবহার করে এমন টিমগুলিতে) দেখতে পাই যা প্রিফিক্স ফাংশন পরামিতিগুলির সাথে থাকে p

উদাহরণ স্বরূপ

public void filter (Result pResult) ...

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

উত্তর:


34

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


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

7
@ ডার্থফেট: এমনকি এই জাতীয় গ্রন্থেও স্বতন্ত্র নামগুলি সরাসরি অ্যাড-হক, ম্যানুয়াল টাইপ সিস্টেমটি প্রয়োগ করার চেষ্টা করছে বলে মনে হয়। কেবলমাত্র একটি ভাল স্ট্যাটিক্যালি টাইপ করা ভাষা ব্যবহার করুন এবং স্বয়ংক্রিয়ভাবে আপনার জন্য স্বয়ংক্রিয় টাইপ সিস্টেম ট্র্যাকের জিনিস থাকুন!
টিখন জেলভিস

1
@ ওয়াটবার্নেট সিস্টেম হাঙ্গেরিয়ান কোনও প্রোগ্রামারকে আধুনিক আইডিই সহ কোনও দরকারী তথ্য দেয় না। অ্যাপ্লিকেশন হাঙ্গেরিয়ান যখন সঠিকভাবে প্রয়োগ করা হয় তখন কোড পর্যালোচনায় মাথাব্যথা হ্রাস করতে পারে।
কেসি কুবাল

2
@ টিখোনজেলভিস সমস্ত ভাষাই টাইপইফগুলি সমর্থন করে না যা দৃ strongly়ভাবে প্রয়োগ করা হয় (যেমন সি ++ টাইপডিফস )। যে ভাষাগুলি এটিকে সমর্থন করে তাদের জন্য, আপনি বেশ সঠিক।
কেসি কুবাল

4
@ ডার্থফেট: সি / সি ++ এ আপনি কেবল একটি উপাদান দিয়ে struct/ এটি মোড়ানো করতে পারেন union
ম্যাকিয়েজ পাইচোটকা

9

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


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

5

আমি কেবল তখনই প্যারামিটারের উপসর্গটি ব্যবহার করি যখন প্যারামিটারটি কোনও সদস্য ভেরিয়েবলের জন্য যেমন নির্মাতা বা সেটার হিসাবে বরাদ্দ করার উদ্দেশ্যে থাকে।

Paint (newColor) {
  color = newColor;
}

আমার জন্য, আমি দেখতে পেয়েছি যে "এই" উপসর্গটি ব্যবহার করার চেয়ে ভিন্ন ভিন্ন চলক নাম ব্যবহার করা অন্ধভাবে স্পষ্ট।

অন্যান্য পরিস্থিতিতে আমি কোনও প্যারামিটার ব্যবহার করা এড়াতে পারি যা সদস্য ভেরিয়েবলের সাথে সহজেই বিভ্রান্ত হতে পারে।

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


ব্যক্তিগতভাবে, আমি সেই ক্ষেত্রে প্যারামিটারের নামটি সংক্ষিপ্ত করতে পছন্দ করি (যেমন, Paint (clr) { color = clr; })। ... সাধারণত খুব একটা অস্পষ্টতা থাকে না, যদিও color -> clrবিশেষত এটি ব্যতিক্রম হতে পারে।
জাস্টিন টাইম 2 পুনরায় ইনস্টল করুন মনিকা

1

আপনি যদি প্রতিটি পদ্ধতির প্যারামিটার নামের সাথে প্রিফিক্স হিসাবে 'পি' ব্যবহার করার জন্য মান তৈরি করেন, আপনি খুব সহজেই পদ্ধতিটির বাকী অংশগুলির বাক্যগুলির প্যারামিটারগুলি সনাক্ত করতে পারবেন।

পদ্ধতির পরামিতিগুলি খুঁজে পেতে এটি আপনার সময় সাশ্রয় করে। আপনি সহজেই আপনার কোডটি ডিবাগ করতে পারেন।


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

1

সংক্ষিপ্ত - এই অনুশীলনটি কোড পড়তে আরও কঠিন করে তোলে।

দীর্ঘ - আমি তর্ক করব এটি একটি খারাপ অভ্যাস যা কেবলমাত্র অন্যান্য খারাপ অভ্যাসকে সমর্থন করার জন্যই ব্যবহৃত হয়। আসুন কয়েকটি উপায়ে পরীক্ষা করা যাক কেন এইরকমের উপসর্গগুলি ব্যবহারকে সহায়ক হিসাবে বিবেচনা করা যেতে পারে:

  • পরিবর্তনশীল নামে সংঘর্ষ এড়ানো

    • আপনার প্যারামিটারের নামগুলি প্যারামিটারগুলি কী তা প্রকাশ করে? আপনার যদি একটি প্যারামিটার এবং শ্রেণি ক্ষেত্র থাকে যা "হুবহু একই" হয় তবে আপনার প্যারামিটারের দরকার নেই।
    • এই ক্ষেত্রে হারুনের উত্তরে বর্ণিত নতুন * উপসর্গের মতো শ্রেণি নির্মাতাদের জন্য উপসর্গগুলি ব্যবহার করা কেবলমাত্র বোধগম্য। এটি সেটার পদ্ধতিগুলির জন্য যেমন উপকারী হতে পারে যেমন

    public void setHeight(int newHeight) { this.height = newHeight; }

  • পদ্ধতিগুলি প্রচুর পরিমাণে প্যারাম নেয়, প্রচুর ভেরিয়েবল ঘোষণা করে এবং আমরা সহজেই ভুলতে পারি যে কোনটি একটি প্যারামিটার।

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

কিছু নির্দিষ্ট কেস বাদ দিয়ে প্যারামিটারের উপসর্গগুলি কেবল লক্ষণগুলির সাথে সহায়তা করে এবং প্রকৃত সমস্যাগুলি সমাধান করে না।


0

আমি ইন আইপারামের ভক্ত, এবং পরামিতিগুলির জন্য ওপরাম। আমি পরিবর্তনের জন্য সিপিরাম বলব, তবে তা গ্রহণযোগ্য নয়


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