আঙ্কেল ববকে "অকেজো ধনুর্বন্ধনী" অপসারণ করার ভালবাসার প্রতি কি কেউ চ্যালেঞ্জ করতে পারে?


94

পে-ওয়ালড সামগ্রীগুলিকে রেফারেন্সিং আমি ঘৃণা করি তবে এই ভিডিওটিতে আমি ঠিক কী বলছি তা দেখায়। রবার্ট মার্টিনের ঠিক 12 মিনিটের দিকে এটি তাকান:

কিছু কোড

এবং বলে যে "আমার প্রিয় কাজগুলির মধ্যে একটি হ'ল অকেজো ধনুর্বন্ধনী থেকে মুক্তি দেওয়া" তিনি যখন এটিকে রূপান্তরিত করেন:

আরও কোড

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

চাচা ববকে ন্যায্য করার জন্য, তিনি একটি দীর্ঘ জাভা পদ্ধতির ক্ষুদ্র ছোট ফাংশনগুলির প্রতিফলন করছেন যা আমি সম্মত, আরও বেশি পঠনযোগ্য। যখন সে এটি পরিবর্তন করে ফেলবে, (22.18) দেখে মনে হচ্ছে এটির মতো:

তবুও আরও কোড

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


6
আমি এই প্রশ্নটিকে অফ-টপিক হিসাবে বন্ধ করতে ভোট দিচ্ছি কারণ এর কোনও উত্তর "না" বা "হ্যাঁ হতে চলেছে, এবং এখানে একটি উদ্ধৃতি দেওয়া হবে"।
blrfl

35
কয়েক বছর দিন, সম্ভবত তিনিও অকেজো লাইনব্রেকটি সরিয়ে ফেলবেন এবং "যদি (দেখুন (কিছু)) বলুন (কিছু);" আসলে কোডের একটি লাইন হবে ;-)
স্টিভ জেসোপ

8
@ স্টেভ জেসোপ শুনে শুনে ভালো লাগল যে আমি কয়েক বছর এগিয়ে আছি। : ডি নিউলাইন ছাড়া কুখ্যাত বাগের ঝুঁকি নেই। প্রয়োজন অনুসারে ব্রেস যুক্ত করা / অপসারণ করা অতিরিক্ত ওভারহেড, তবে পড়ার সময় আরও অনেক কিছু সঞ্চয় হয়।
মার্টিনাস

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

13
তিনি কেবলমাত্র return (page==null) ? "" : includePage(mode,page);সেটাই করা উচিত যদি তিনি প্রচুর পরিমাণে জ্বলন্ত হয়ে পড়েন ... আমি ভেবেছিলাম নো-ব্রেস স্টাইলটি যতক্ষণ না আমি পেশাদারভাবে অ্যাপ্লিকেশন বিকাশ করা শুরু করি cool বিভিন্ন গোলমাল, সম্ভাব্য টাইপো বাগ ইত্যাদি ধনুর্বন্ধনী, সমস্ত সময় সেখানে থাকা, আপনার সময় এবং ওভারহেড সাশ্রয় করে আপনার পরে সেগুলি পরিচয় করিয়ে দিতে হবে।
ভ্যাক্সকুইস

উত্তর:


47

পঠনযোগ্যতা কোন ছোট জিনিস নয়।

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

এই সামান্য ফিসোকার পরে সর্বদা ধনুর্বন্ধনী ব্যবহার করার বিষয়ে ধার্মিক এমন কাউকে আমি চ্যালেঞ্জ করি না।

সুতরাং আমি পঠনযোগ্যতার সুবিধাটি দেখতে পাচ্ছি, তবে আপনি যখন এই ধনুর্বন্ধনীগুলি ছেড়ে দিবেন তখন যে সমস্যাগুলি দেখা দিতে পারে সে সম্পর্কে আমি গভীরভাবে অবগত।

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


7
ইন্ডেন্টিং বন্ধ এবং বিভ্রান্তিমূলক ছিল যখন আমি খুব সামান্য এই দ্বারা ছিল।
অ্যান্ডি

12
কারণ এটি জিসিসি 6 এর-Wmisleading-indentation সি ছাড়াই ছিল ।
wchargin

2
@ ক্যান্ডিওড ওরেঞ্জ: এটিই চাচা বব প্রতিষ্ঠিত গোপনীয়তাকে চ্যালেঞ্জ জানাচ্ছেন।
রবার্ট হার্ভে

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

1
@ ক্যান্ডিওড ওরেঞ্জ: এটি একেবারে একটি প্রসঙ্গ বিষয়। যাঁরা কেবল অন্ধভাবে ডগমাকে গ্রহণ করেন তারা প্রসঙ্গ বিবেচনা করেন না; এগুলি হ'ল নিয়মটি কার্যকরভাবে প্রকাশিত হওয়ার পরে এবং বাস্তবে একটি প্রতিবন্ধকতায় পরিণত হওয়ার অনেক পরে, পরিচালিত ভাষাগুলিতে "কেবলমাত্র একমাত্র ফেরত" নিয়ম ব্যবহার করে।
রবার্ট হার্ভে

133

আপনি এখানে বা এখানে বা যেখানেই বাইকের শেড আঁকা হয়েছে সেখানে বেশ কয়েকটি প্রকাশিত প্রচার বা নো-ব্রেস শৈলীর প্রত্যাখ্যানগুলি খুঁজে পেতে পারেন ।

বাইক শেড থেকে সরে যেতে , 2014 এর দুর্দান্ত ওএস এক্স / আইওএস এসএসএল বাগের কথা মনে আছে?

if ((err = SSLHashSHA1.update(&hashCtx, &serverRandom)) != 0)
    goto fail;
if ((err = SSLHashSHA1.update(&hashCtx, &signedParams)) != 0)
    goto fail;
    goto fail;
if ((err = SSLHashSHA1.final(&hashCtx, &hashOut)) != 0)
    goto fail;

হাঁ, "সৃষ্ট" কোন ব্রেস ব্লকগুলো দ্বারা https://www.imperialviolet.org/2014/02/22/applebug.html

পছন্দগুলি বন্ধনী শৈলীর উপর নির্ভর করে। যদি লিখতে হত

if (suiteSetup)
{
    includePage(mode, suiteSetup);
}

আমিও জায়গা বাঁচানোর দিকে ঝুঁকতে পারি। কিন্তু

if (suiteSetup) {
    includePage(mode, suiteSetup);
}

কেবল একটি "অতিরিক্ত" লাইন ব্যবহার করে।


আমি জানি আপনি জিজ্ঞাসা করেননি, তবে আমি যদি একা কাজ করি তবে আমি একজন ধর্মাবলম্বী। আমি যদি বন্ধনীগুলি অপসারণ করি তবে আমি পছন্দ করি

if (suiteSetup != null) includePage(mode, suiteSetup);

এটি আইওএস এসএসএল-স্টাইলের বাগের মতো ভিজ্যুয়াল সমস্যাযুক্ত নয়, তবে আঙ্কেল ববের চেয়ে আরও "অপ্রয়োজনীয়" লাইনগুলি সংরক্ষণ করে;) আপনি যদি এটি ব্যবহার করেন তবে ভালভাবে পড়ে এবং রুবিতে মূলধারার ব্যবহার রয়েছে ( includePage(mode, suiteSetup) unless suiteSetup.nil?)। ওহ ভাল, শুধু জানি যে অনেক মতামত আছে।


13
এছাড়াও, আপনি যদি ব্যবহার } else[if(...)] {করেন তবে এটি কোনও অতিরিক্ত অতিরিক্ত লাইন যুক্ত করে না, তাই এটি পুরো জিনিস জুড়ে কেবল একটি অতিরিক্ত লাইন যুক্ত করে।
র্যান্ডম 832

12
আমি আপনাকে iOS এসএসএল বাগটি আনতে পেরে আনন্দিত। তার পর থেকে, আমি নিজেকে এই জাতীয় পরিস্থিতিতে আরও বেশি করে ব্রেস ব্যবহার করে দেখেছি।
জ্যাচ লিপটন

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

16
"গেটো ফেইল" একক লাইন ব্লকগুলির দ্বারা সৃষ্ট নয়, এটি ঝালর প্রোগ্রামিং, এমনকি স্লপিপিয়ার কোড পর্যালোচনা এবং এমনকি একবার নিজে হাতে কোডের মাধ্যমে পদক্ষেপ না নেওয়ার কারণে ঘটেছিল।
gnasher729

35
মেহ, ধনুর্বন্ধকের অভাব সেই বাগটি ঘটায় নি। অ্যাপলিং প্রোগ্রামাররা (এবং কোনও অর্থবহ কোডের পর্যালোচনা, পরীক্ষার অভাব) করেছে। আমাদের বাকিদের হাত বেঁধে নয়, দায়বদ্ধদের গুলি করে সমস্যার সমাধান করুন!
অরবিট

62

চাচা বব এর এমন ভুলের বিরুদ্ধে প্রতিরক্ষার অনেক স্তর রয়েছে যা "সর্বদা ব্রেস ব্যবহার করুন" প্রচলিত জ্ঞান যখন তখন সাধারণ ছিল না:

  1. একক-লাইনের শর্তসাপেক্ষে একটি শক্তিশালী ব্যক্তিগত পছন্দ, সুতরাং বহু-লাইনগুলি দাঁড়িয়ে থাকে এবং অতিরিক্ত যাচাই বাছাই করে।
  2. এমন একটি সম্পাদক যা আপনি দ্বিতীয় লাইন sertোকানোর পরে স্বয়ংক্রিয়ভাবে বাইরে চলে যায়।
  3. ইউনিট পরীক্ষার একটি সম্পূর্ণ স্যুইট যা তিনি ক্রমাগত চালান runs
  4. ইন্টিগ্রেশন পরীক্ষার একটি সম্পূর্ণ স্যুট।
  5. তার কোডটি মার্জ হওয়ার আগে পিয়ার পর্যালোচনা করা হয়েছে
  6. অবিচ্ছিন্ন ইন্টিগ্রেশন সার্ভার দ্বারা সমস্ত পরীক্ষার পুনরায় চালিত।
  7. একটি পণ্য মানের বিভাগ দ্বারা পরীক্ষা করা।

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


16
নিঃশব্দে ব্যর্থ হওয়া জিনিসগুলিকে আমি যেভাবে ভয় করি তাতে আমি কখনও ক্র্যাশ হওয়ার ভয় পাইনি। কমপক্ষে আপনি জানেন কখন কোন ক্রাশ ঘটে। আমি যখন এই জিনিসগুলি দেখি তখন আমার মস্তিষ্কের পেছনের অংশ জ্বলে যায়। আমি যখন দেখি এটি একইভাবে টিংগল করে while(true);{break;}। সত্যিই যদি এর জন্য কোনও বৈধ প্রসঙ্গ থাকে, তবে এটিটি পেতে আমার কিছুটা সময় লাগবে।
candied_orange

9
আমাদের কি চেক করার একটি স্বয়ংক্রিয় পদ্ধতি আছে includePage()যা একাধিক বক্তব্য সহ খারাপভাবে লিখিত ম্যাক্রো নয়?
মার্টিন ইয়র্ক

51
@ লোকিআস্টারি হ্যাঁ, একে "জাভাতে ম্যাক্রো নেই" বলা হয়।
সোভিক

11
উপরোক্ত সমস্তগুলি "'অকেজো ধনুর্বন্ধনী' নীতি সম্পর্কিত যে পতন আমাকে আঘাত করে তা এড়ানোর আরও উপায়" আসলে "" অকেজো ব্রেস নীতি ব্যবহারের কারণগুলি "এর চেয়ে"। আপনার যেগুলির প্রয়োজন (বিশেষত # 1) আপনার প্রয়োজন সেই সুবিধার চেয়ে অপ্রয়োজনীয় হিসাবে বিবেচনা করা উচিত।
এসজুয়ান 76

16
@ জুলস ওহ হ্যাঁ! আমি যে পণ্যগুলিতে কাজ পেয়েছি বা প্রকাশ করেছি তার সমস্ত পণ্যই 100% পরীক্ষার কভারেজ (খুব কমপক্ষে) থাকে, পিয়ার পর্যালোচনা করা হয় (বেশ কয়েকবার) এবং চারপাশের সমস্ত ব্যবসায়ের সফ্টওয়্যার কিউএ বিভাগ রয়েছে। হ্যাঁ. আমার অনুমান যে আপনি আপনার পেশাগত কেরিয়ারে এটি একইরকম পেয়েছেন, কারণ প্রতিটি ব্যবসায়েই একক প্রোগ্রামারগুলির পরিবর্তে প্রোগ্রামারদের একটি দল থাকে এবং তারা তাদের যে যা পরীক্ষা করতে চান তা করার জন্য তাদের যথেষ্ট সময় দেয়। হ্যাঁ যা সমস্ত কাজের জায়গা নিখুঁতভাবে বর্ণনা করে। আমাদের সফ্টওয়্যারটি সবসময় 100% বাগ মুক্ত থাকা নিশ্চিত হওয়ার পরে কিছু অতিরিক্ত বাগ যুক্ত করার বিষয়ে কেন উদ্বিগ্ন হওয়া উচিত?
এসজুয়ান 76

31

বেশিরভাগ অংশের জন্য এটি ব্যক্তিগত পছন্দ, তবে কিছু বিষয় বিবেচনা করার আছে।

সম্ভাব্য বাগ

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

বৈধ কোড (এটি পড়তে পারে এমন একটি বাগ হতে পারে)

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

আমরা দিয়ে শুরু:

if (foo)
    bar();

একজন বিকাশকারী একটি দরকারী মন্তব্য যুক্ত করুন।

if (foo)
    // At this point we know foo is valid.
    bar();

পরে একজন বিকাশকারী এটিতে প্রসারিত হয়।

if (foo)
    // At this point we know foo is valid.
    // This never fails but is too slow even for debug, so keep disabled.
    // assert(is_valid(foo));
    bar();

বা নেস্টেড ব্লক যুক্ত করে:

if (foo)
    while (i--) {
        bar(i);
        baz(i);
    }

অথবা ম্যাক্রো ব্যবহার করে:

if (foo)
    SOME_MACRO();

"... যেহেতু ম্যাক্রোগুলি কোডের একাধিক লাইন সংজ্ঞায়িত করতে পারে, তাই ম্যাক্রো কি একাধিক লাইনের জন্য ব্যবহার do {...} while (0)করে? এটি কারণ এটি আমাদের স্টাইল-গাইডে হওয়া উচিত তবে আমি কেবল আরও ভাল ক্ষেত্রে পরীক্ষা করতে পারি!"


উপরের উদাহরণগুলি হ'ল সমস্ত বৈধ কোড, তবে কোড-ব্লকে যত বেশি বিষয়বস্তু রয়েছে ততই ত্রুটি না হওয়ার জন্য আপনাকে আরও পড়তে হবে।

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

ডিফ শোরগোল

একক লাইনের জন্য ধনুর্বন্ধনী ব্যবহার করার একটি ব্যবহারিক কারণ হ'ল ভিন্ন শব্দ কমিয়ে আনা ।

তা হচ্ছে, পরিবর্তন:

if (foo)
    bar();

প্রতি:

if (foo) {
    bar();
    baz();
}

... পরিবর্তিত হওয়ার সাথে সাথে শর্তসাপেক্ষ রেখাটি দেখা দেয়, এতে কিছু ছোট তবে অপ্রয়োজনীয় ওভারহেড যুক্ত হয়।

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

এগুলি উভয়ই ছোট এবং আপনি কোড-পর্যালোচনা বা ট্র্যাকিং-ডাউনে কতটা সময় ব্যয় করেন তার উপর নির্ভর করে যা কোডের পরিবর্তিত লাইনের প্রতিশ্রুতি দেয়।

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


{এটির একটি ব্যতিক্রম আছে, নিজস্ব লাইনে থাকা কোড-বেসগুলির জন্য - এটি কোনও সমস্যা নয়।

পরিবর্তন গোলমাল যুক্তি না রাখা যদি এই স্টাইলে লিখুন:

if (foo)
{
    bar();
    baz();
}

তবে এই ধরনের একটি সাধারণ সম্মেলন নন, সুতরাং প্রধানত সম্পূর্ণতার জন্য উত্তর যোগ (না পরামর্শ প্রকল্প এই শৈলী ব্যবহার করা উচিত)


8
আমি হ্রাস মন্তব্যগুলি পছন্দ করি যা একটি সংজ্ঞাযুক্ত প্লাস।
মার্টিন ইয়র্ক

2
যদি কেবল জেএসএন-এর জন্য ক্ষিপ্ত প্রত্যেকেরই আলাদা শব্দ শুনতে পাওয়া যায় তবে! আমি আপনার দিকে তাকাচ্ছি, কোন শেষ-কমা নিয়ম নেই।
রোমান স্টারকভ

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

1
@ পিটার-কর্ডস, এটি {নিজের নিজস্ব লাইনের শৈলীর ভক্ত নয় , কেবলমাত্র উত্তরগুলির সম্পূর্ণতার জন্য এটি অন্তর্ভুক্ত করেছে। ব্যবহার করার জন্য ম্যাক্রোগুলিকে বিশ্বাস করার জন্য do{}while(0), আমি এটির সাথে সমস্যাটি খুঁজে পাই এটি আপনি প্রায় সর্বদা এটি বিশ্বাস করতে পারেন । সমস্যাটি হচ্ছে দুর্ঘটনা ঘটে, কোড পর্যালোচনা করে ত্রুটিগুলি পিছলে যেতে পারে ... এবং বাগগুলি চালু করা যেতে পারে যা অন্যথায় না হত।
ধারণাগুলি 42

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

15

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

if (debug)
   foo (4);

এবং দেখা গেল যে যিনি এটি লিখেছিলেন সে fooম্যাক্রো হিসাবে সংজ্ঞায়িত হয়েছিল। এতে দুটি লাইনের কোড সহ একটি ম্যাক্রো । এবং অবশ্যই, এই দুটি লাইনগুলির মধ্যে কেবল প্রথমটি ছিল এর অধীন if। (সুতরাং দ্বিতীয় লাইনটি নিঃশর্ত কার্যকর করা হয়েছিল।)

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

এখন আমি স্পষ্টতই প্রত্যেকের থেকে আলাদাভাবে ধনুর্বন্ধনী ব্যবহার করি এবং ব্যবহার করি। একটি লাইনের জন্য if, আমি করব:

if (debug) { foo (4); }

সুতরাং ধনুর্বন্ধনী অন্তর্ভুক্ত করতে এটি কোনও অতিরিক্ত লাইন নেয় না।


6
সেক্ষেত্রে যে কেউ ম্যাক্রো লিখেছিল সেটাই তার দোষ।
gnasher729

6
সি প্রিপ্রসেসর ম্যাক্রোগুলি সঠিকভাবে লেখার জন্য স্বজ্ঞাত না হলেও এটি করা যেতে পারে। Gnasher729 পয়েন্ট হিসাবে এটি করা উচিত। এবং আপনার উদাহরণটি হ'ল কারণ যে কোনও ম্যাক্রোর একাধিক স্টেটমেন্ট রয়েছে তার লুপটিতে অবশ্যই তার শরীর অন্তর্ভুক্ত করা উচিত do { ... } while(0)। এটি কেবল নিশ্চিত করে না যে এটি সর্বদা বদ্ধ if()বিবৃতির মাধ্যমে সঠিকভাবে চিকিত্সা করা হবে , তবে এটিও যে বিবৃতিটির শেষে থাকা সেমিকোলনটি সঠিকভাবে গ্রাস করা হয়েছে। যে এই জাতীয় সাধারণ নিয়ম সম্পর্কে জানেন না, কেবল প্রিপ্রোসেসর ম্যাক্রোগুলি লিখবেন না। কলিং সাইটে রক্ষা করা ডিফেন্সের ভুল জায়গা।
মাস্টার

18
@ মাস্টার: সত্য, তবে অন্যরা কীভাবে ম্যাক্রোস (বা অন্যান্য ভাষার বৈশিষ্ট্যগুলি) লিখেছেন তা আমার নিয়ন্ত্রণের বাইরে। আমি কীভাবে বন্ধনী ব্যবহার করি তা আমার নিয়ন্ত্রণে under আমি অবশ্যই বলছি না যে এটি বন্ধনী অন্তর্ভুক্ত করার জন্য একটি লোহা dাকা কারণ, তবে এটি এমন কিছু যা আমি অন্য ব্যক্তির ভুলের বিরুদ্ধে নিজেকে রক্ষা করতে পারি তাই আমি এটি করি।
ওয়েন

@ gnasher729, কার কারও দোষ থাকলে কে যত্ন করে? আপনি যদি কোড-পর্যালোচনা করছেন এবং কিছু যুক্তিসঙ্গত কোডের মান অনুসরণ করছেন তবে এটি আপনার দলগুলিরও দোষ হতে পারে। এবং যদি এটি ব্যবহারকারীদের কাছে পৌঁছায় তবে তারা বাগি সফ্টওয়্যার প্রকাশিত সংস্থাকে দোষ দেবেন।
ধারণাগুলি 42

1
যে ম্যাক্রোগুলি নিয়ে এসেছিল সে দোষী।
নেমে

14

"চাচা বব" তার মতামত রাখার অনুমতি পেয়েছে, আপনাকে আপনার মতামত দেওয়ার অনুমতি দেওয়া হয়েছে। তাকে চ্যালেঞ্জ করার দরকার নেই।

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

অন্য কারও কোডের মধ্য দিয়ে যাওয়া এবং "অকেজো ধনুর্বন্ধনী থেকে মুক্তি পাওয়া" একটি খারাপ অভ্যাস। কোডটি পর্যালোচনা করার প্রয়োজন হলে এবং অযথা সংঘাত তৈরি হওয়ার সময় কেবল অতিরিক্ত কাজ করে। হতে পারে "আঙ্কেল বব" এমন একটি অবিশ্বাস্যভাবে ভাল প্রোগ্রামার যে তার কোড পর্যালোচনার দরকার নেই? আমি আমার জীবনের এক সপ্তাহ নষ্ট করলাম কারণ এক শীর্ষ প্রোগ্রামার "যদি (পি! = এনএলএল)" "কোডটি পর্যালোচনা ব্যতীত" যদি "!

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


1
আমি অনুমান করি এটি "চ্যালেঞ্জিং" সম্পর্কে, কারণ ইউবি (sic!) তার মতামতগুলিকে সত্য হিসাবে উপস্থাপন করে - কমপক্ষে যখন আমি তাঁর কথা শুনি তখন তা আমাকে আঘাত করে।
ভ্যাক্সকুইস

3
"আপনি যা পছন্দ করেন তাই করুন" বলতে চাচা বব এর সাথে এই বিষয়ে একমত হওয়া কারণ তিনি এটাই বলেছিলেন যে "এতে কিছু যায় আসে না"। অনেক ভাষায় এটি একটি নন ইস্যু। আমি আগে সমস্ত ক্ষেত্রে ভেবেছিলাম যেখানে এটি এমন সমস্যা যেখানে আপনার উচিত হ'ল বন্ধনী ব্যবহার করা উচিত এবং কাউকে চ্যালেঞ্জ জানাতে দেখেন নি ing এখন এখানে চাচা বব এটিকে চ্যালেঞ্জ জানাচ্ছেন এবং আমি ভাবছি যে তিনি এতটা রিফ্যাক্টর ক্ষুদ্র পদ্ধতিতে কাজ করার কারণে বা তিনি এতে ভরা কারণ তিনি এ থেকে দূরে সরে যাচ্ছেন কিনা wond @ পোলড্রাপার তার উত্তরে উল্লেখ করেছেন ঠিক এমন ধরণের বাগের কারণে আমি এটিকে নিরীহ হিসাবে ভাবিনি।
candied_orange

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

9

ধনুর্বন্ধনী অপসারণ করার জন্য আমার কারণগুলি হ'ল:

  1. সিদ্ধান্ত ক্লান্তি হ্রাস। আপনি যদি সবসময় ধনুর্বন্ধনী ব্যবহার করেন তবে আপনাকে কখনই সিদ্ধান্ত নিতে হবে না যে আপনার ধনুর্বন্ধনী প্রয়োজন হবে কিনা।

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


0

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

Fwiw, আমরা একটি আপস যে তাদের এক লাইনে বসিয়ে যেমন শর্ট পূর্বশর্ত না একমত উন আমাকে বিক্ষেপী পাঠযোগ্য /। যেমন

if (!param) { throw invalid_argument (blahblah); }
if (n < 2) { return 0; }
// real code for function starts here...

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

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


1
চাচা বব সম্ভবত ভেবেছেন সেগুলি ছাড়াই তিনি আরও ভাল কোড লিখেছেন।
djechlin

2
আমি এবং অন্যান্যরা সি ++ তে সাবলীল।
জেডিগোসস

1
"যদি এটি তাকে আরও ভাল কোড আরও দ্রুত লেখার অনুমতি দেয় তবে এগুলি কেবল তাদের রাখার কারণ" ++ আমার এক জুনিয়র আছেন যিনি একই কথা বলেছেন, সুতরাং আমরা সেগুলি রাখি।
রাবারডাক

... এবং এই কারণেই আঙ্কেল বব যেভাবে চান এটি করার একা কারণ।
djechlin

-1

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

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


এটি 10 ​​টি পূর্ব উত্তরগুলিতে তৈরি এবং ব্যাখ্যা করা পয়েন্টগুলির চেয়ে বেশি কিছু দেওয়ার প্রস্তাব দিচ্ছে না
gtat

-3

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

যদি আপনার কোডটি ভালভাবে ইউনিট-পরীক্ষিত হয় তবে এই ধরণের "বাগ" মুখে ফেটে যেতে পারে।

কোনও অকেজো এবং কুরুচিপূর্ণ বন্ধনী এড়িয়ে কোড পরিষ্কার করা একটি অনুশীলন আমি অনুসরণ করি।


9
অবশ্যই, বিপরীতটিও সত্য: আপনার কোডটি যদি বাগ-মুক্ত হয়, তবে আপনার কোনও ইউনিট-পরীক্ষার দরকার নেই। বাস্তবতা হ'ল আমরা এমন একটি অসম্পূর্ণ বিশ্বে বাস করি যেখানে কোডের ক্ষেত্রে কখনও ভুল হয় এবং কখনও কখনও পরীক্ষায় ভুল হয়। (আমার অভিজ্ঞতা অনুসারে, প্রকৃতপক্ষে আরও সাধারণ)) সুতরাং পরীক্ষাগুলি অবশ্যই বাগের ঝুঁকি কমাতে পারে, আবার ঝুঁকিটি আবার বাড়ানোর জন্য অন্য উপায়গুলি খুঁজে বের করার জন্য এটি কোনও অজুহাত নয়।
রুখ

3
রুখের মন্তব্যে যোগ করতে: কোনও কোডের 100% ইউনিট পরীক্ষা করা সম্ভব নয়।
BЈовић

দয়া করে আসুন আমার কোডটি দেখুন;) টিডিডি অনুশীলনের সময়, এই ধরণের বাগটি খুব দ্রুত প্রদর্শন করা সর্বদা সম্ভব।
মিক 378

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