কেন অনেক ভাষা নামকরণ পরামিতি সমর্থন করে না? [বন্ধ]


14

আমি কেবল ভাবছিলাম যে কোড পড়া কত সহজ হবে যদি কোনও ফাংশন কল করার সময় আপনি লিখতে পারেন:

doFunction(param1=something, param2=somethingElse);

আমি কোনও ত্রুটিগুলি সম্পর্কে ভাবতে পারি না এবং এটি কোডটি আরও অনেক পাঠযোগ্য able আমি জানি আপনি একমাত্র আর্গুমেন্ট হিসাবে অ্যারে পাস করতে পারেন এবং প্যারামিটারের নাম হিসাবে অ্যারে কীগুলি থাকতে পারে, তবে এটি এখনও পঠনযোগ্য হবে না।

এর কোন অসুবিধা কি আমি মিস করছি? যদি তা না হয় তবে অনেক ভাষা কেন এটিকে অনুমতি দেয় না?


1
আপনি কি এমন একটি ভাষা দিতে পারেন যা প্যারামিটারের নাম দেওয়া উচিত (এবং পারে) তবে তা নেই?
ব্রায়ান চেন

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

2
@ স্টিভফিলস: "নামকৃত প্যারামিটার ইডিয়োম" নির্মাতাদের ক্লাসে অনর্গল এপিআই (মার্টিন ফাউলারের নাম অনুসারে) সংজ্ঞায়নের জন্য একটি অদ্ভুত নাম বলে মনে হচ্ছে। আপনি জোশুয়া ব্লচের কার্যকর জাভার প্রথম আইটেমগুলির মধ্যে একটিতে একই প্যাটার্নের উদাহরণগুলি পেতে পারেন ।
ঝোমিনাল

3
এটি অগত্যা কোনও মতামত ভিত্তিক প্রশ্ন নয়
ক্যাটস্কুল

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

উত্তর:


14

প্যারামিটারের নাম নির্দিষ্ট করে কোড সবসময় আরও বেশি পঠনযোগ্য করে তোলে না : উদাহরণস্বরূপ, আপনি কি পড়তে পছন্দ করবেন min(first=0, second=1)বা min(0, 1)?

আপনি যদি পূর্বের অনুচ্ছেদের যুক্তি স্বীকার করেন, তবে প্যারামিটারের নাম উল্লেখ করা বাধ্যতামূলক হওয়া উচিত না এটি বেশ স্পষ্ট। সমস্ত ভাষা কেন প্যারামিটারের নামগুলি বৈধ বিকল্প হিসাবে উল্লেখ করে না?

আমি কমপক্ষে দুটি কারণ সম্পর্কে ভাবতে পারি:

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

নোট করুন যে আমি এমন কোন ভাষা সম্পর্কে জানি না যা নামকরণ পরামিতিগুলি প্রয়োগ করেও alচ্ছিক প্যারামিটারগুলি প্রয়োগ করে না (যার জন্য নামকরণের প্যারামিটারগুলির প্রয়োজন হয়) - সুতরাং আপনার পঠনযোগ্যতা বেনিফিটগুলির তুলনায় আপনার সতর্ক হওয়া উচিত, যা ফ্লুয়েট ইন্টারফেসের সংজ্ঞা দিয়ে আরও ধারাবাহিকভাবে প্রাপ্ত হতে পারে ।


6
আমি নিয়মিতভাবে বিভিন্ন বিভিন্ন ভাষায় কোড করি, আমাকে প্রায় সর্বদা কোনও প্রদত্ত ভাষায় একটি সরল সাবস্ট্রিংয়ের জন্য প্যারামিটারগুলি সন্ধান করতে হয়। এটি কি স্ট্রিং (শুরু, দৈর্ঘ্য) বা স্ট্রিং (শুরু, শেষ) এবং স্ট্রিংয়ের অন্তর্ভুক্ত?
জেমস অ্যান্ডারসন

1
@ জেমসএন্ডারসন - কোনও নামযুক্ত-প্যারামিটার সাবস্ট্রিং কীভাবে আপনার সমস্যার সমাধান করবে? দ্বিতীয় প্যারামিটারটির নাম কী তা জানতে আপনাকে এখনও প্যারামিটারগুলি সন্ধান করতে হবে (যদি না উভয় ফাংশন উপস্থিত থাকে এবং ভাষার পলিমারফিজম বৈশিষ্ট্যটি বিভিন্ন নামের সাথে একই ধরণের পরামিতিগুলির অনুমতি দেয় না)।
mouviciel

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

@ ফোশি - আপনি সঠিক বলেছেন। আমি যখন আমার পূর্ববর্তী মন্তব্যটি লিখেছিলাম তখন আমি কোড পড়ার গুরুত্বটি ভুলে গিয়েছিলাম।
mouviciel

14

নামযুক্ত প্যারামিটারগুলি কোড পড়তে আরও সহজ করে তোলে, আরও শক্ত লেখা

আমি যখন কোনও কোডের টুকরো পড়ছি, নামযুক্ত প্যারামিটারগুলি প্রসঙ্গটি প্রবর্তন করতে পারে যা কোডটি বুঝতে সহজ করে তোলে। উদাহরণস্বরূপ বিবেচনা করুন এই কন্সট্রাকটর: Color(1, 102, 205, 170)। পৃথিবীতে এর অর্থ কী? সত্যিই, Color(alpha: 1, red: 102, green: 205, blue: 170)পড়া আরও সহজ হবে। কিন্তু হায়, সংকলকটি "না" বলে - এটি চায় Color(a: 1, r: 102, g: 205, b: 170)। নামযুক্ত প্যারামিটার ব্যবহার করে কোড লেখার সময়, আপনি সঠিক নামগুলি খুঁজতে অপ্রয়োজনীয় পরিমাণ সময় ব্যয় করেন - কিছু প্যারামিটারের সঠিক নামগুলি ভুলে যাওয়া তার ক্রমটি ভুলে যাওয়া সহজ easier

প্রায় একবারে DateTimeএকই ইন্টারফেসের সাথে পয়েন্ট এবং সময়সীমার জন্য দুটি ভাইবোনের ক্লাস ছিল এমন একটি এপিআই ব্যবহার করার সময় এটি একবার আমাকে বিট করে । DateTime->new(...)একটি second => 30যুক্তি গ্রহণ করার সময় , অন্যান্য ইউনিটগুলির জন্য এটি DateTime::Duration->new(...)চেয়েছিল seconds => 30এবং অনুরূপ। হ্যাঁ, এটি পুরোপুরি অর্থপূর্ণ, তবে এটি আমাকে দেখিয়েছে যে নামকরণের পরামিতিগুলি use ব্যবহারের সহজ।

খারাপ নামগুলি পড়ার পক্ষে সহজ করে না

নামকরণের পরামিতিগুলি কীভাবে খারাপ হতে পারে তার অন্য একটি উদাহরণ সম্ভবত আর ভাষা R কোডের এই অংশটি একটি ডেটা প্লট তৈরি করে:

plot(plotdata$n, plotdata$mu, type="p", pch=17,  lty=1, bty="n", ann=FALSE, axes=FALSE)

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

  • pchআসলে প্লট চরিত্র, প্রতিটি ডাটা পয়েন্টের জন্য আঁকা হবে যে গ্লাইফ। 17এটি একটি খালি বৃত্ত, বা এর মতো কিছু।
  • ltyলাইন টাইপ হয়। এখানে 1একটি কঠিন লাইন।
  • btyবক্স টাইপ হয়। "n"প্লটটির চারপাশে একটি বাক্স আঁকানো এড়ানোতে এটি সেট করা ।
  • ann অক্ষরের টীকাগুলির উপস্থিতি নিয়ন্ত্রণ করে।

প্রত্যেকের সংক্ষিপ্তসারটির অর্থ কী না এমন কারও জন্য, এই বিকল্পগুলি বিভ্রান্তিকর। আর আর এই লেবেলগুলি কেন ব্যবহার করে তাও প্রকাশ করে: স্ব-ডকুমেন্টিং কোড হিসাবে নয়, (সঠিকভাবে টাইপ করা ভাষা হওয়ায়) মানগুলি তাদের সঠিক ভেরিয়েবলগুলিতে মানচিত্রের কী হিসাবে ব্যবহার করে।

পরামিতি এবং স্বাক্ষরের বৈশিষ্ট্য

ফাংশন স্বাক্ষরগুলিতে নিম্নলিখিত বৈশিষ্ট্য থাকতে পারে:

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

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

ভারার্গস (কমান্ড লাইন ইন্টারফেস, পার্ল,…) সহ গতিময় টাইপ করা ভাষাগুলি namedচ্ছিক নামযুক্ত পরামিতিগুলি অনুকরণ করতে পারে। স্বাক্ষর আকারের ওভারলোডিং সহ ভাষাগুলিতে অবস্থানগত optionচ্ছিক পরামিতিগুলির মতো কিছু থাকে।

নামযুক্ত পরামিতিগুলি কীভাবে প্রয়োগ করা যায় না

নামযুক্ত পরামিতিগুলির কথা চিন্তা করার সময় আমরা সাধারণত নামযুক্ত, alচ্ছিক, আনর্ডারড প্যারামিটারগুলি ধরে নিই। এগুলি কার্যকর করা কঠিন।

.চ্ছিক পরামিতিগুলির ডিফল্ট মান থাকতে পারে। এগুলি অবশ্যই ডাকা ফাংশন দ্বারা নির্দিষ্ট করা উচিত এবং কলিং কোডে সংকলন করা উচিত নয়। অন্যথায়, সমস্ত নির্ভরশীল কোডটি পুনরায় কম্পাইল না করে ডিফল্টগুলি আপডেট করা যায় না।

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

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

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

সম্ভাব্য বাস্তবায়ন

আমাদের যদি একটি নির্দিষ্ট আদেশ নাও থাকতে পারে, তাই আমাদের কিছু অ-রক্ষিত ডেটা কাঠামো দরকার।

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

    প্রকৃতপক্ষে, স্ট্রিং পুলিং ব্যবহার করে স্থানের প্রয়োজনীয়তাগুলি হ্রাস করা যেতে পারে, যা পরবর্তী পংক্তির তুলনাগুলি পয়েন্টার তুলনায় কমিয়ে আনতে পারে (যখন স্থির স্ট্রিংগুলি আসলে পুল করা হয় তখন গ্যারান্টি দেওয়া যায় না, সেই ক্ষেত্রে দুটি স্ট্রিংকে তুলনা করতে হবে বিস্তারিত)।

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

সুতরাং এটি বেশিরভাগ ক্ষেত্রে ব্যয়বহুল

যদি নামযুক্ত পরামিতিগুলির সাথে কোনও ফাংশনটি যথাযথভাবে প্রসারিত হয় তবে একটি নির্দিষ্ট আদেশটি ধরে নেওয়া যায় না। সুতরাং শুধুমাত্র দুটি সমাধান রয়েছে:

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

অন্যান্য ক্ষতি

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

নামযুক্ত যুক্তিগুলির অনুকরণ সহ একটি সমস্যা হ'ল কলার পক্ষের স্থির চেকের অভাব। যুক্তিগুলির একটি অভিধান পাস করার সময় এটি ভুলে যাওয়া বিশেষত (আপনার দিকে, পাইথনের দিকে তাকানো) looking এটি গুরুত্বপূর্ণ কারণ একটি অভিধান ক্ষণস্থায়ী একটি সাধারণ কার্যসংক্রান্ত যেমন জাভাস্ক্রিপ্ট রয়েছে: foo({bar: "baz", qux: 42})। এখানে, মানগুলির প্রকারভেদ বা নির্দিষ্ট নামের অস্তিত্ব বা অনুপস্থিতি উভয়ই স্থিরভাবে পরীক্ষা করা যায় না।

নামকরণের প্যারামিটারগুলি এমুলেটিং (স্ট্যাটিকালি টাইপড ভাষায়)

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

// Java

static abstract class Arguments {
  public String bar = "default";
  public int    qux = 0;
}

void foo(Arguments args) {
  ...
}

/* using an initializer block */
foo(new Arguments(){{ bar = "baz"; qux = 42; }});

3
" it is easier to forget the exact names of some parameters than it is to forget their order" ... এটি একটি আকর্ষণীয় বক্তব্য।
ক্যাটসকুল

1
প্রথম কাউন্টার-উদাহরণটি নামকরণকৃত প্যারামিটারগুলির সাথে সমস্যা নয় এবং ইংরাজী বহুবচন কীভাবে ইন্টারফেসে ফিল্ডের নামগুলিতে ম্যাপ করে। দ্বিতীয় কাউন্টার-উদাহরণটি একইভাবে বিকাশকারীদের নামকরণের বাছাইয়ের পছন্দ করতে সমস্যা হয়। (প্যারামিটার পাসিং ইন্টারফেসের কোনও পছন্দ নিজেই পঠনযোগ্যতার জন্য পর্যাপ্ত শর্ত হতে চলেছে না - প্রশ্নটি এটি কোনও প্রয়োজনীয় শর্ত বা কিছু ক্ষেত্রে এটির পক্ষে সহায়তা কিনা) is
mtraceur

1
নামকরণকৃত প্যারামিটারগুলি সম্পাদন ব্যয় এবং ট্রেডঅফস সম্পর্কে সামগ্রিক পয়েন্টগুলির জন্য +1। আমি কেবল মনে করি শুরুটি মানুষকে হারাবে।
mtraceur

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

7

একই কারণে যে হাঙ্গেরিয়ান নোটেশন আর বহুল ব্যবহৃত হয় না; ইন্টেলিজেন্স (বা নন-মাইক্রোসফ্ট আইডিইতে এর নৈতিক সমতুল্য)। সর্বাধিক আধুনিক আইডিই আপনাকে কেবলমাত্র প্যারামিটারের রেফারেন্সের উপর ঘুরে বেড়াতে প্যারামিটার সম্পর্কে যা জানতে হবে তা আপনাকে জানাবে।

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

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


4
পাইথন নামযুক্ত প্যারামিটার ব্যবহার করে এবং এটি ভাষার একটি দুর্দান্ত বৈশিষ্ট্য। আমি আরও ভাষা এটি ব্যবহার করতে চান। এটি ডিফল্ট আর্গুমেন্টগুলি আরও সহজ করে তোলে কারণ আপনাকে আর জোর করা হবে না, যেমন সি ++ তে ডিফল্টগুলির আগে "আর্গুমেন্ট" এর আগে কোনও যুক্তি স্পষ্টভাবে নির্দিষ্ট করে দেওয়া। (আপনার শেষ অনুচ্ছেদে যেমন রয়েছে, তেমনি কীভাবে অজু না হওয়া দিয়ে অজগরটি দূরে সরে যায় ... ডিফল্ট আর্গুমেন্ট এবং নাম আর্গুমেন্ট আপনাকে একই জিনিস করতে দেয়)) নামযুক্ত যুক্তি আরও পাঠযোগ্য কোডের জন্যও তৈরি করে। আপনার মতো কিছু থাকলে sin(radians=2)আপনার "ইনটেলিসেন্স" দরকার হয় না।
রোবট

2

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

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

নোট করুন যে অভিজ্ঞ প্রোগ্রামাররা অর্ডার / স্লট দ্বারা পরামিতিগুলি পাস করার সাথে স্বাচ্ছন্দ্য বোধ করেছেন। আপনি আরও জানতে পারেন যে এই আইডিয়মটি কেবল তখনই মূল্যবান যখন আপনার কাছে কয়েকটি যুক্তির চেয়ে বেশি থাকে (বলুন> 5/6)। এবং যেহেতু প্রচুর সংখ্যক যুক্তি প্রায়শই (অতিরিক্ত) জটিল পদ্ধতির পরিচায়ক, আপনি দেখতে পাচ্ছেন যে এই প্রতিমাটি কেবলমাত্র জটিল পদ্ধতির জন্যই উপকারী।


2

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

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


1
আমি দৃ less়ভাবে একমত যে "কম ভাল"। যৌক্তিক চরম দিকে নিয়ে যাওয়া, কোড গল্ফ বিজয়ীরা হবে "সেরা" প্রোগ্রাম।
রিলে মেজর

2

নামযুক্ত প্যারামিটারগুলি সোর্স কোডটি রিফ্যাক্টরিংয়ের কোনও সমস্যার সমাধান এবং উত্স কোডটি আরও পঠনযোগ্য করার উদ্দেশ্যে নয় । নামকৃত প্যারামিটারগুলি ফাংশন কলগুলির জন্য ডিফল্ট মানগুলি সমাধান করতে সংকলক / পার্সারকে সহায়তা করতে ব্যবহৃত হয়। আপনি যদি কোডটি অর্থপূর্ণ মন্তব্য যুক্ত করার চেয়ে বেশি পঠনযোগ্য করতে চান।

যে ভাষাগুলি পুনরুদ্ধার করা শক্ত হয় প্রায়শই নামযুক্ত প্যারামিটারগুলিকে সমর্থন করে, কারণ পরিবর্তনের foo(1)স্বাক্ষরটি যখন ভেঙে যাচ্ছে foo()তবে এতে foo(name:1)পরিবর্তন করার জন্য প্রোগ্রামারের কাছ থেকে কম পরিশ্রমের প্রয়োজন পড়ার সম্ভাবনা কম foo

যখন আপনাকে নিম্নলিখিত ফাংশনে একটি নতুন প্যারামিটারটি প্রবর্তন করতে হবে এবং সেখানে কয়েকশো বা কয়েক হাজার লাইন কোড রয়েছে যা এই ফাংশনটিতে কল করে?

foo(int weight, int height, int age = 0);

বেশিরভাগ প্রোগ্রামাররা নিম্নলিখিতটি করবেন।

foo(int weight, int height, int age = 0, string gender = null);

এখন, কোনও রিফ্যাক্টরিং প্রয়োজন হয় না এবং genderশূন্য হলে ফাংশনটি উত্তীর্ণ মোডে কার্যকর করতে পারে ।

genderএকটি মান নির্দিষ্ট করতে এখনকার কলটিতে হারডকোড করা হয়েছে age। এই উদাহরণ হিসাবে:

 foo(10,10,0,"female");

প্রোগ্রামারটি ফাংশন সংজ্ঞাটি দেখেছিল, দেখেছিল যে ageএর মান একটি ডিফল্ট মান আছে 0এবং ব্যবহার করেছে।

এখন ageফাংশন সংজ্ঞায়নের জন্য ডিফল্ট মান সম্পূর্ণ অকেজো।

নামযুক্ত পরামিতি আপনাকে এই সমস্যা এড়াতে দেয় to

foo(weight: 10, height: 10, gender: "female");

নতুন প্যারামিটারগুলিতে যুক্ত করা যেতে পারে fooএবং সেগুলিতে যে ক্রম যুক্ত হয়েছিল সে সম্পর্কে আপনাকে চিন্তা করার দরকার নেই এবং আপনি যে ডিফল্ট সেট করেছেন তা সত্যই এটি সত্যই ডিফল্ট মান value

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