এক-বর্ণের ভেরিয়েবলগুলির ব্যবহারকে কী উত্সাহ দেওয়া হচ্ছে? [বন্ধ]


13

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


3
হ্যা এবং না. সম্পূর্ণরূপে পরিস্থিতির উপর নির্ভর করে।
জাভিয়র




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

উত্তর:


32

জিনিসগুলির যথাযথ নামকরণ করা শক্ত। খুবই কঠিন. আপনি যদি এটি অন্যভাবে দেখেন তবে আপনি এটিও নিতে পারেন যে সঠিকভাবে নামকরণ করা জিনিসগুলি গুরুত্বপূর্ণ। (অন্যথায়, আপনি কেন নামকরণের চেষ্টাটি ব্যয় করবেন?)

তবে, কখনও কখনও, জিনিসগুলির নামগুলি গুরুত্বপূর্ণ নয় । এই কারণেই আমাদের কাছে বেনাম ফাংশনগুলির মতো জিনিস রয়েছে ("ল্যাম্বডাস"), উদাহরণস্বরূপ: কারণ কখনও কখনও এটি স্টাফের নামকরণের পক্ষে উপযুক্ত নয়।

অনেকগুলি উদাহরণ রয়েছে, যেখানে একক বর্ণ (বা খুব সংক্ষিপ্ত) ভেরিয়েবলের নামগুলি উপযুক্ত:

  • i, j, k, lলুপ সূচকের জন্য
  • kএবং vমানচিত্রে কী এবং মানটির জন্য
  • nএকটি সংখ্যার জন্য (যেমন Math.abs(n))
  • a, b, cনির্বিচারে অবজেক্টের জন্য (যেমন max(a, b))
  • eজেনেরিক for eachলুপে উপাদানটির জন্য
  • f উচ্চতর অর্ডার ফাংশনে ফাংশনের জন্য
  • p একটি ফিল্টার মধ্যে predicate ফাংশন জন্য
  • T, T1, T2, ... টাইপ ভেরিয়েবলের জন্য
  • E সংকলনের উপাদান ধরণের প্রতিনিধিত্ব করে টাইপ ভেরিয়েবলের জন্য
  • R কোনও ফাংশনের ফলাফলের ধরণের প্রতিনিধিত্ব করে এমন ধরণের ভেরিয়েবলের জন্য
  • exএকটি catchধারা বাদে
  • op একটি মানচিত্র বা ভাঁজ অপারেশন জন্য
  • sবহুবচন বোঝাতে চিঠি যুক্ত করা , অর্থাত্ একটি সংগ্রহ (উদাহরণস্বরূপ nsসংখ্যার সংগ্রহের জন্য, xsএবং ysজেনেরিক বস্তুর দুটি স্বেচ্ছাসেবী সংগ্রহের জন্য)

এগুলি অন্য প্রোগ্রামিং ভাষায় ব্যবহৃত হতে দেখছি না!

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


5
-1 1-বর্ণের ভেরিয়েবলের নাম ব্যবহার করা অলস প্রোগ্রামিং। কখনও কখনও অলস হওয়া ঠিক আছে, তবে আপনি যদি লুপ সূচকগুলিতে পৌঁছাচ্ছেন kএবং lএটি খুব বেশি দূরে রয়েছে (আপনার অনেকগুলি নেস্টেড লুপগুলি শুরু করা উচিত নয়; সেগুলিকে ফাংশনে সন্ধান করুন) । ব্যক্তিগতভাবে, আমি
ফাংশনটিতে

এছাড়াও, lবা lenএকটি দৈর্ঘ্যের arrজন্য এবং একটি অ্যারের জন্য ব্যবহৃত হয় (যেমন for(var i=0; l=arr.length; i<l; i++):)। এছাড়াও, আপনি কোনও ফাংশন উল্লেখ করলে fnপরিবর্তে ব্যবহৃত হতে পারে f
ইসমাইল মিগুয়েল

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

2
@ লিলিয়েনথাল: কোডটি পড়ার দক্ষ হতে হবে, লেখার পক্ষে দক্ষ নয়। সাধারণত এগুলি একই জিনিস, তবে সবসময় হয় না, যেমন এই ক্ষেত্রে।
ব্লুরাজা - ড্যানি পিফ্লুঘুফুট

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

20

যদি আপনার লুপ গণনা করার জন্য একটি ভেরিয়েবল ব্যবহার ছাড়া কিছুই না করে

  for(int i = 0; i < 10; i++) {
     System.out.println("Stop it! I really mean it!!");
  }

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

যদি ভেরিয়েবলটি লুপের ভিতরে ব্যবহার করা হয় তবে একটি অর্থবহ নামটি কার্যকর হতে পারে।

for(int door = 0; door < 3; door++) {
  int reward = gauge(door);
  if(reward > max) {
    max = reward;
    best = door;
  }
}

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

সংক্ষেপে, ভেরিয়েবলের বৃহত্তর পরিধি, এর নামটি আরও দীর্ঘ হতে হবে।


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

13
@ মিশেল: আমার মতে, প্রোগ্রামিং জারগন এর নিজস্ব ভাষা, এটি ইংরেজি যথাযথ নয়। এবং সেই ভাষায়, iএকটি যথাযথ সংজ্ঞাযুক্ত অর্থ সহ একটি যথাযথ শব্দ, যথা "সূচক আপনার খুব বেশি চিন্তা করার দরকার নেই"। তবে আমার ধারণা এটি পরিচিতির বিষয়। আপনি Haskell, অনেক পড়া থাকে, তাহলে আপনি পড়তে অভ্যস্ত হয়ে করব mযেমন একসংখ্যা , fযেমন functor , xযেমন কিছু বস্তু , xsযেমন একটি তালিকা xগুলি ইত্যাদি।
জার্গ ডব্লু মিট্টাগ

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

@ নেলসন: এই প্রশ্নটি এবং এই উত্তরটি জাভা সম্পর্কে। স্পষ্টতই বিভিন্ন ভাষায় কিছুটা আলাদা বিবেচনা থাকতে পারে। (জাভাস্ক্রিপ্ট জাভা হিসাবে একই ভাষা নয়।)
বুধবার

আমি যখনই একক-বর্ণের পরিবর্তনশীল নামগুলি সর্বাগ্রে বোধ করি তখনও আমি এটির সাথে একমত নই যে iআমি "লুপের জন্য আপনি ব্যবহার করতে পারেন সেরা নাম" যা কেবলমাত্র গণনা করার জন্য একটি চলক ব্যবহার করে। countসেক্ষেত্রে আমি পরিবর্তিত নাম হিসাবে তত্ক্ষণাত বোধগম্য হিসাবে দেখতে চাই। for (int count = 0; count < 10; count++)বা while (count--)
টড লেহম্যান

4

কিলিয়ান এর উত্তরে কোডটি পড়ে, আমি মনে করি না "এখানে একটি লুপ আছে, এবং সেখানে একটি পরিবর্তনশীল আছে, এবং এটির টাইপ রয়েছে, এবং এর একটি নাম আছে, এবং নামটি আমি, এবং এটি সূচনা হয়েছে 0,। .. "। আমি কেবল "লুপ ..." ভাবি যেখানে তিনটি বিন্দু গুরুত্বহীন বিশদের জন্য দাঁড়িয়ে থাকে যা আমি এমনকি ভাবি না। আমার প্রোগ্রামারের মনে, সেই পরিবর্তনশীলটি আসলেই বিদ্যমান নেই, এটি কেবলমাত্র একটি প্রত্নসম্পদ যা আমাকে টাইপ করতে হবে (যেমন;;) এর জন্য {} এটি এটিকে একটি লুপ করে তোলে।

যেহেতু সেই পরিবর্তনশীলটি আমার মনের মধ্যেও নেই, তাই কেন একে অপরিহার্য প্রয়োজনীয়তার বাইরে, একটি নাম রাখব?


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

আপনার কেবল ভেবে চলতে হবে যে কেবলমাত্র শিরোনামে নয়, লুপের অভ্যন্তরে কীভাবে চলকটি ব্যবহৃত হয় for (...)

@ কিলিয়ানফথ: আমি হ্যাস্কেল, এমএল, এফ # এবং স্কালায়ও সেভাবে ব্যবহার করেছি, আমি বিশ্বাস করি। আর রুবি মধ্যে, যদিও _শুধু অন্য কোন মত একটি আইনি সনাক্তকারী, সেখানে একটি সাম্প্রতিক পরিবর্তন অব্যবহৃত স্থানীয় ভেরিয়েবল নামে ছিল _(অথবা দিয়ে শুরু _) না না একটি "অব্যবহৃত স্থানীয় পরিবর্তনশীল" সতর্কবার্তা উৎপন্ন, যদিও রুবি স্বাভাবিকভাবে তাদের সম্পর্কে সতর্ক করে।
Jgrg ডব্লু মিট্টাগ

-1

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

for(User user: users) {
  doSomethingWithTheUser(user);
}

পরিবর্তে

for(int i=0; i<users.size(); i++) {
  doSomethingWithTheUser(users.get(i));
}

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

আরও কয়েকটি ক্ষেত্রে রয়েছে যেখানে একক অক্ষর যথাযথ হতে পারে যেমন একটি গাণিতিক ক্রিয়াকলাপ বাস্তবায়নের ক্ষেত্রে যেখানে এন, এক্স, বা y এর মতো একক অক্ষর ইতিমধ্যে সাধারণ হতে পারে। তবে সাধারণভাবে না, আপনার ভেরিয়েবলের অর্থপূর্ণ কিছু বলুন।


5
"জাভাতে লুপিংয়ের স্টাইলটি সম্প্রতি সম্প্রতি চালু হয়েছিল" ... যেমনটি, এক দশক আগে? ( জাভা 5 মুক্তি পেয়েছিল 2004 এ )
মেরিটন

1
হ্যাঁ এটি মোটামুটি সাম্প্রতিক। না আমার বয়স হয়নি। চুপ কর. জঘন্য বাচ্চারা আমার লন থেকে নামছে। জাভা পূর্বের 5 থেকে এখনও প্রচুর উত্তরাধিকারী জাভা অ্যাপ্লিকেশন রয়েছে And এবং আরও অনেক জাভা প্রোগ্রামাররা যারা জাভা 1.4 এ ভাষা শিখেছে এবং কীভাবে তারা কাজ করে তা আপডেট করতে অস্বীকার করে। এবং এখনও অনলাইনে আরও বেশি কোডের নমুনাগুলি এটি 2000 সালের শুরুর দিকে (হ্যাঁ, আমাদের তখন ইন্টারনেট ছিল; আমরা কেবল এটি ওয়েব 2.0 বলেছি) 2.0
নিক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.