আপনি কি নিজের কোডটিতে সংক্ষিপ্ততা বা পঠনযোগ্যতা পছন্দ করেন? [বন্ধ]


21

ভাষার শর্টকাটগুলি প্রায়শই কোড আরও সংক্ষিপ্ত করতে ব্যবহৃত হতে পারে।

উদাহরণস্বরূপ, টেরিনারি এবং নাল কোলেসিং অপারেটরগুলি কোডের পরিমাণ হ্রাস করতে পারে তবে তর্কযোগ্যভাবে পাঠযোগ্যতার ক্ষতির জন্য:

সি # তে:

Person newGuy = new Person();
if (boss == null) {
    newGuy.Boss = GetDefaultBoss();
} else {
    newGuy.Boss = boss;
}

কার্যত সমান:

Person newGuy = new Person();
newGuy.Boss = boss ?? GetDefaultBoss();

তবে স্পষ্টতই অনেক বেশি ভার্বোস।

যখন পাঠ্যতার সাথে সংক্ষিপ্ততার বিষয়টি আসে তখন আপনি রেখাটি কোথায় আঁকেন?


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

20
আমি মনে করি দ্বিতীয় সংস্করণটি আরও পঠনযোগ্য।
বৈভব

2
আপনি সংক্ষিপ্ততা দিয়ে বিভ্রান্তিকর সংক্ষিপ্ততা। সংক্ষিপ্ততা পাঠযোগ্যতার উন্নতি করে। নিষ্ঠুরতা এটি থেকে বিচ্ছিন্ন করে।
ফেরুকসিও

1
@ থোরজ্বার্নআরভানএন্ডারসেন: সি # কোডের শ্রোতারা সাধারণত "সি # ব্যাকগ্রাউন্ড সহ বিকাশকারী" হন। আমি যা দেখেছি, সেখান থেকে প্রোগ্রামারগুলিতে sensক্যমত্য বলে মনে হয় যে আপনি উপযুক্ত ভাষার বৈশিষ্ট্যগুলি এড়ানো উচিত নয় কারণ কেউ তাদের সাথে পরিচিত নাও হতে পারে। (আরও দেখুন: প্রোগ্রামার্স.স্ট্যাকেক্সেঞ্জারওএইচএইচ
101513/33843

1
সদৃশ ?: প্রোগ্রামার.সটাকেক্সচেঞ্জ / কিউ / 868630৩০/১64৪64৪ .. ওহ, এইটি বয়স্ক। :)
স্টিভেন জিউরিস

উত্তর:


63

উভয়।

আপনার প্রথম উদাহরণটি অবশ্যই আরও ভার্বোজ এবং তর্কসাপেক্ষে আরও সুস্পষ্ট ... তবে এটির পরিবর্তে আমার একটির পরিবর্তে পাঁচটি লাইন স্ক্যান করা দরকার। সবচেয়ে খারাপ, এটি তার উদ্দেশ্যটিকে বিবেচনা করে - একটি মান নির্ধারণ করে newGuy.Boss

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

এখন, এর বিপরীতে:

if (boss == null) {
    newGuy.Boss = GetDefaultBoss();
    newGuy.IsTemp = true;
    newGuy.AddTask("orientation");
} else {
    newGuy.Boss = boss;
    newGuy.IsTemp = false;
}

...সঙ্গে:

newGuy.Boss = boss ?? GetDefaultBoss();
newGuy.IsTemp = boss == null;
if ( boss == null ) newGuy.AddTask("orientation");

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


3
দুর্দান্ত উত্তর! - এটি উদ্দেশ্য সম্পর্কে যতটা ভার্চুটিটি সম্পর্কে নয়।
দামোভিসা

2
@ দামোভিসা: হুবহু - কোডের লক্ষ্য হল যোগাযোগ, এবং এটি যথাসম্ভব সংক্ষিপ্তভাবে করা না হওয়ার কোনও সাধারণ কারণ নেই (তবে আর নেই)।
শোগ 9

1
নাল কোলেসিং অপারেটরটি শিখতে এক সেকেন্ডেরও বেশি সময় লাগবে - তবে আপনি যদি এটি জানেন না, তবে আপনার এটি শেখা উচিত!
কেসব্যাশ

2
আহ "??" জাভা ভাল হবে।

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

16

যদিও উভয়ই ভাল লক্ষ্য, আমি যখনই কোনওটি বেছে নিতে বাধ্য করি তখন আমি সর্বদা পঠনযোগ্যতার পক্ষে থাকব ।

আমি যুক্তি দিয়ে বলব যে আপনার উদাহরণ পাঠযোগ্যতা এবং সংক্ষিপ্তকরণ উভয়কে উন্নত করে । তবে বিবেচনা করুন:

if( a > b )
{
    foo = bar
}
else
{
    if( c.isThing() ){
        foo = somethingElse;
    }
    else{
        foo = someFurtherThing.GetFoo();
    }
}

উল্টোদিকে

foo = a > b ? bar ?? whatever.something : c.isThing() ? somethingElse : someFurtherThing.GetFoo();

দ্বিতীয়টি সংক্ষিপ্ত, তবে এটি পড়া খুব কঠিন। পূর্ববর্তীটি ভার্বোজ, তবে যুক্তির প্রবাহ স্পষ্ট।

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


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

কোড নমুনাগুলি সমতুল্য নয়: প্রথমটি অনুপস্থিত ?? whatever.something
জন বি। ল্যাম্বে

11

আমি সাধারণ নিয়ম হিসাবে বলব সংক্ষিপ্ততার কারণে পঠনযোগ্যতার ত্যাগ কখনও করেন না, তবে অন্য প্রোগ্রামারদের সেই বিষয়ে জ্ঞানের অভাবের ভিত্তিতে পাঠযোগ্যতার বিচার করবেন না।

সংক্ষিপ্ততা এবং পাঠযোগ্যতা বৈপরীত্য নয়। এই উত্তরের মতো, কখনও কখনও সংক্ষিপ্ততর আরও বেশি পঠনযোগ্য।


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

4

আমি বলব আমি পঠনযোগ্যতা পছন্দ করি, যদিও এর অর্থ মাঝে মাঝে সংক্ষিপ্ত কোড ব্যবহার করা হয়। (অর্থাত্ বৃহত্তর শর্তাধীন ব্লকের অভ্যন্তরে তুলনামূলক সহজ শর্তসাপেক্ষে তিন ভাগ))

মূলত, এটি অযথা যদি বুঝতে অসুবিধা হয় তবে এটি করবেন না।


3

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

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

  2. পাঠযোগ্যতার মূল্যায়ন করা উচিত যুক্তিযুক্ত অভিজ্ঞ প্রোগ্রামার যিনি ভাষা এবং এর অনন্য / উন্নত বৈশিষ্ট্যগুলি মোটামুটি ভাল জানেন, এমন কিছু সবেমাত্র সক্ষম কোড বানর নয় যারা কেবল সর্বনিম্ন সাধারণ ডিনোমিনেটর জানেন তাদের জন্য কোডটি কত সহজ পাঠ করা যায় তার ভিত্তিতে মূল্যায়ন করা উচিত।


2

আমি মনে করি না যে একটি দিক এখনও উল্লেখ করা হয়েছে: আপনার লক্ষ্য কি ?

আপনি যে বিষয়টির যত্ন নেবেন তা হ'ল চাকরির সুরক্ষা, সমস্ত কিছুর চেয়ে নিবিড়তা এবং সংক্ষিপ্ততার জন্য যান। আপনার কোড মন্তব্য করা এড়িয়ে যান।

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

দ্রষ্টব্য: উপরেরগুলি ব্যক্তিগতভাবে আপনার সম্পর্কে নয়, @ দামোভিসা; এটি উভয় অবস্থানের মধ্যে যে কেউ বেছে নিন for


এটি চাকরির সুরক্ষার মতো মনে হচ্ছে তবে আপনি যদি প্রোগ্রামার হতে চান তবে এটি ভুল সংস্থায় একটি চাকরির সুরক্ষা ...;)
অ্যালোস মাহডাল

2

ভার্বোজ সংস্করণটির সুবিধার হিসাবে একটি জিনিস রয়েছে।

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

অন্য কথায়, আপনি যদি আপনার ডিবাগারটি কখন লাথি মারতে চান তবে আপনি আপনার সম্পাদকে কোনটি দেখতে চান boss == null?

(এটি বলেছিল আমি পছন্দ করি ?? - অপারেটর)


0

পঠনযোগ্যতাটি প্রথম আসবে, দীর্ঘমেয়াদী বেশিরভাগ লোক বিদ্যমান কোডটি সংশোধন বা প্রসারিত করতে বেশিরভাগ সময় ব্যয় করে - পাঠযোগ্যতা রক্ষণাবেক্ষণের একটি বড় অংশ is

এটি বলেছিল, সংক্ষিপ্ততা এমন একটি জিনিস যা পাঠযোগ্যতার পক্ষে ভূমিকা রাখতে পারে। উদাহরণস্বরূপ, আপনার প্রশ্নে দ্বিতীয় স্নিপেট আরও পাঠযোগ্য এবং আরও সংক্ষিপ্ত।

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