কোঁকড়া ধনুর্বন্ধনী বাদ দেওয়া কেন এটি একটি খারাপ অভ্যাস হিসাবে বিবেচিত হয়? [বন্ধ]


177

সবাই কেন আমাকে কোড লিখতে বলে কেন এটি একটি খারাপ অভ্যাস?

if (foo)
    Bar();

//or

for(int i = 0 i < count; i++)
    Bar(i);

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

using (Brush br = new SolidBrush(Color.FromArgb(15, GlowColor)))
{
    for (int x = 0; x <= GlowAmount; x++)
    {
        for (int y = 0; y <= GlowAmount; y++)
        {
            g.DrawString(Text, this.Font, br, new Point(IconOffset + x, y));
        }
     }
 }
 //versus
using (Brush br = new SolidBrush(Color.FromArgb(15, GlowColor)))
    for (int x = 0; x <= GlowAmount; x++)
        for (int y = 0; y <= GlowAmount; y++)
            g.DrawString(Text, this.Font, br, new Point(IconOffset + x, y));

আপনি usingsমিলিয়ন বার ইনডেন্ট না করে এক সাথে শৃঙ্খলার অতিরিক্ত সুবিধা পেতে পারেন ।

using (Graphics g = Graphics.FromImage(bmp))
{
    using (Brush brush = new SolidBrush(backgroundColor))
    {
        using (Pen pen = new Pen(Color.FromArgb(penColor)))
        {
            //do lots of work
        }
    }
 }
//versus
using (Graphics g = Graphics.FromImage(bmp))
using (Brush brush = new SolidBrush(backgroundColor))
using (Pen pen = new Pen(Color.FromArgb(penColor)))
{
    //do lots of work
}

কোঁকড়া ধনুর্বন্ধনী জন্য সর্বাধিক প্রচলিত যুক্তি রক্ষণাবেক্ষণ প্রোগ্রামিং এবং যে সমস্যাগুলি মূল বিবরণ এবং এর উদ্দেশ্যযুক্ত ফলাফলের মধ্যে মূল সন্নিবেশ দ্বারা সংঘটিত হবে তার চারদিকে ঘুরবে:

if (foo)
    Bar();
    Biz();

প্রশ্নাবলী:

  1. ভাষাটি যে আরও কমপ্যাক্ট সিনট্যাক্স ব্যবহার করে তা ব্যবহার করা কি ভুল? এই ভাষাগুলির নকশা করা লোকেরা স্মার্ট, আমি ভাবতে পারি না যে তারা এমন কোনও বৈশিষ্ট্য রাখবেন যা ব্যবহার করা সবসময় খারাপ।
  2. আমাদের বা উচিত কি কোড লেখা উচিত নয় যাতে সর্বনিম্ন সাধারণ ডিনমিনেটর বুঝতে পারে এবং এটিতে কাজ করতে কোনও সমস্যা নেই?
  3. আমি কি অনুপস্থিত অন্য কোন যুক্তি আছে?

6
আমি আপনার সাথে একমত. তাদের ছাড়। সময়কাল।
আন্দ্রে রেনিয়া

67
কয়টি লাইন সম্পর্কে কেয়ার করে 2010 এর কিছুটা 2010 এর মধ্যে Mon আমার মনিটরটি 2048 এক্স 1152 এবং আমার মধ্যে দুটি আছে! পঠনযোগ্যতা আরও গুরুত্বপূর্ণ যে 2 টি উল্লম্ব লাইন সংরক্ষণ করা যখন আপনি সহজেই সূক্ষ্ম ত্রুটিগুলি সনাক্ত করতে পারেন যা খুঁজে পাওয়া শক্ত।

51
মনিটরগুলি প্রশস্ত এবং সস্তা, তবে তারা লম্বা এবং সস্তা নয়। উল্লম্ব স্থান অনুভূমিক স্থানের তুলনায় বেশি দুর্লভ।
অ্যাডাম বলেছেন - মনিকা 22

32
@ অ্যাডামরথ তাদের পাশের দিকে ঘুরিয়ে দিন :)
জাচারি ইয়েটস

16
সুতরাং আপনি ফেব্রুয়ারী 2014, এলএল-তে এসএসএল বাগের সাথে অ্যাপলের মতো আপত্তি প্রদর্শন করবেন না।
learnvst

উত্তর:


183

প্রকৃতপক্ষে, আমি যখন ডিবাগিং করছিলাম, এবং বারটির মন্তব্য করলাম তখন কেবলমাত্র একবারই আমাকে বিট করত:

if(foo)
  // bar();
doSomethingElse();

তা ছাড়া, আমি ব্যবহার করার ঝোঁক:

if(foo) bar();

যা উপরের মামলার যত্ন নেয়।

সম্পাদনা করুন প্রশ্নটি স্পষ্ট করার জন্য ধন্যবাদ, আমি সম্মত, আমাদের সর্বনিম্ন সাধারণ ডিনমিনেটরে কোড লেখা উচিত নয়।


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

23
আমি এক লাইনের স্টাইল পছন্দ করি না কারণ আমি সর্বদা নীচের লুপের বডি খুঁজতে যাই।
নসরেডনা

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

1
এক-লাইন শৈলী পরীক্ষা কভারেজ থেকে বার () কেও লুকায়। এটি foo সবসময় মিথ্যা থাকলেও এটি আবৃত দেখায়।
বোহুমিল জানদা

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

156

পড়ার গতি ...

ইতিমধ্যে যা উল্লেখ করা হয়েছে তা বাদ দিয়ে। এই মুহুর্তে, আমি ইতিমধ্যে পার্স শর্তযুক্ত করা হয়েছে যদি ব্রেস এবং সাদা স্থানের সাথে বিবৃতি দেয়। তাই আমি পড়েছি:

if (condition)
{
    DoSomething();
}

DoSomethingElse();

আমি পড়ার চেয়ে সামান্য দ্রুত:

if (condition) DoSomething();

DoSomethingElse();

এটিকে দেখে মনে হচ্ছে আমি এটি একটু ধীর করে পড়ছি:

if (condition) DoSomething();
DoSomethingElse();

আমি এটি পূর্বের তুলনায় উল্লেখযোগ্যভাবে ধীর পড়েছি:

if (condition) 
    DoSomething();
DoSomethingElse();

কারণ আমি সাহায্য করতে পারছি না তবে এটি আবার পড়তে চাই এবং লেখক যদি উদ্দেশ্য করে:

if (condition)
{
    DoSomething();
    DoSomethingElse();
}

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

if (condition) 
    DoSomething();
    DoSomethingElse();

29
সমস্যাটি সমাধান হয়ে যায়, যখন আপনার চতুর্থ নমুনায়, আপনি কেবলমাত্র ডসোমিংথেলস () থেকে পৃথক করার জন্য বিবৃতি দেওয়ার পরে একটি খালি লাইন রেখেছেন যা আমি করি এবং পাঠযোগ্যতা কার্যত 1 ম নমুনার মতোই হয় (যদি ভাল না ;- পি) আরেকটি বিষয় হ'ল 2 বা 3 এর গোষ্ঠীতে লাইনগুলি উল্লেখযোগ্যভাবে পাঠযোগ্যতায় সহায়তা করে, আপনি কেবল কোডের মাধ্যমে আরও দ্রুত স্ক্যান করতে পারেন।
পাইওটর ওউসিয়াক

6
এটি সম্ভবত কারণ আমি পাইথনের প্রতি অভ্যস্ত, তবে যদি বিবৃতি আমাকে পড়তে দেয় তবে এটি আরও দ্রুত বুঝতে পারা যায় তবে প্রথম কোঁকড়ানো ধনুর্বন্ধনীটিকে একই লাইনে রেখে দেওয়া হয়।
পোনকডুডল

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

2
ধনুর্বন্ধনী প্রকৃতি দ্বারা সুস্পষ্ট। আমি এটি দিয়ে থাকব, ধন্যবাদ।
TheOptimusPrimus

2
শেষ ক্ষেত্রে, মূল লেখককে সন্ধান করুন এবং তাকে স্প্যান করেছিলেন ...;)
পার লুন্ডবার্গ

55

এটি যদি কিছু ছোট থাকে তবে এটিকে এভাবে লিখুন:

if(foo()) bar();

যদি এটি দুটি লাইন ভাঙ্গার জন্য যথেষ্ট দীর্ঘ হয় তবে বন্ধনী ব্যবহার করুন।


হ্যাঁ, আমিও তাই করি। আপনি যদি অন্য লাইন যুক্ত করেন তবে এটি আপনাকে ব্রেসগুলি যুক্ত করতে বাধ্য করে, এবং বার () আসলে সেই অংশটির অংশ কিনা তা দেখতে বেশ স্পষ্ট, যদি আপনি কেবল মন্তব্য না করেন তবে এত খারাপ জিনিস ঘটবে।
জাল্ফ

10
যদিও খুব ডিবাগার বান্ধব নয়। আপনি কীভাবে "বার" অংশে ব্রেকপয়েন্ট স্থাপন করবেন?
নেমানজা ত্রিফুনোভিচ

9
@ নিমঞ্জা: আপনার কার্সারটি বারে চাপান (); এবং F9 টিপুন। VS2005 এবং VS2008 উভয়ই আন্তঃ-লাইন ব্রেকপয়েন্টগুলি পরিচালনা করে, যদি তারা পৃথক "বিবৃতি" থাকে।
গ্যালাকটিক

4
গ্যালান্টিক কাউবয়: আপনার পরিচিতদের চেয়ে আরও বেশি পরিবেশ রয়েছে। :-)

20
অবশ্যই, তবে যেহেতু প্রসঙ্গটি সি #, তাই এটি ব্যবহারকারীর একটি উল্লেখযোগ্য সংখ্যাগরিষ্ঠতা কভার করা উচিত ...
গ্যালাকটিক কাউবয়

47

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

সর্বদা ধনুর্বন্ধনী ব্যবহারের জন্য আরও একটি ভাল কারণ, কেউ যদি দ্বিতীয় বিবৃতি যুক্ত করে, তবে এরকম কিছু ঘটতে পারে:

if(a)
   if(b)
     c();
else
   d();

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

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


12
আমি যে দুটি ক্ষেত্রে বন্ধনী ব্যবহার করি সেগুলির মধ্যে এটি একটি। অন্যথায় না।
আন্দ্রে রিনিয়া

3
এটি বরং এমনভাবে লেখা উচিত যেন (এক & বি) ... প্রথম স্থানে মেথিংকস।
অ্যালেক্সান্ডার.বিসকপ

8
@ অ্যালেক্সান্ডার.বিস্কোপ: অবশ্যই তা নয়, যেহেতু এটি অন্যটি ব্লক !a || !bকরে ( !a) বা a && !bযুক্ত ( ) যোগ করা বন্ধনীগুলির চেয়ে আলাদা অর্থ ( ) দেয় ।
বেন ভয়েগট

1
@ বেন ভয়েগ: সত্য! এর জন্য পড়ুন ;-) পরে আধা বছর এবং দুটি আপোস্ট, কেউ আমার বক্তব্যটি ভুল বলে বুঝতে পারে ... অনুমান আমি বিশদ দিকে যথেষ্ট মনোযোগ দিইনি, মূলত কারণ আমার মন্তব্যের পিছনে উদ্দেশ্যটি উল্লেখ করার চেয়ে আলাদা ছিল যদি এই-ক্লজটির প্রযুক্তিগতভাবে সঠিক রূপান্তর হয়। আমার অর্থ হ'ল নেস্টেড ইনলাইন যদি-বিবৃতিগুলি সাধারণত পঠনযোগ্যতা হ্রাস করে (এবং উদাহরণস্বরূপ নিয়ন্ত্রণ প্রবাহের সন্ধানযোগ্যতা) উল্লেখযোগ্যভাবে ইমো এবং তাই বরং এটি একটি বিবৃতিতে সংযুক্ত করা উচিত (বা সম্পূর্ণভাবে সাজানো)। চিয়ার্স
অ্যালেক্সান্ডার.বিস্কোপ

3
@ অ্যালেক্সান্দার.বিস্কোপ: একই সময়ে, নেস্টেড আইফএসের সাথে সহজ শর্তগুলির সাথে ডিবাগিং করা সহজ, যেহেতু আপনি প্রতিটিটিতে একক পদক্ষেপ নিতে পারেন।
বেন ভয়েগট

35

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


2
পুরো গাইডলাইন পড়ার পরে মনোো কোডটির দিকে তাকানো আমার কাছে বেশ বিদেশী বলে মনে হচ্ছে ।
নাচ 2 ডি

35

লাইন সস্তা। প্রসেসর শক্তি সস্তা। বিকাশকারী সময় খুব ব্যয়বহুল।

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

(ক) আমি যা করছি তা অনুসরণ করতে অন্য কোনও বিকাশকারীদের পক্ষে সহজ

(খ) কোডটির প্রয়োজনের নির্দিষ্ট অংশগুলি মন্তব্য করুন

(গ) কিছু ভুল হয়ে গেলে ডিবাগ করা সহজ

(d) সংশোধন করা সহজ যদি এটি ভবিষ্যতে হওয়া প্রয়োজন (যেমন কোড যুক্ত / অপসারণ)

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

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


9
(ক) সম্পর্কে আপনার শেষ বক্তব্যটি এমন একটি মতামত যা এখানে অন্যান্য পোস্টার সহ বিশাল সংখ্যক দেবকে তর্ক করবে।
কেলি এস ফরাসী

34

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

if (condition) action();  // ok by me

if (condition) // normal/standard for me
{
   action();
}

23

আমি মনে করি এটি আপনি যে প্রকল্পে কাজ করছেন তার নির্দেশিকাগুলির বিষয় এবং ব্যক্তিগত স্বাদ।

নিম্নলিখিতগুলির মতো কিছু ক্ষেত্রে বাদে যখন প্রয়োজন হয় না তখন আমি সাধারণত তাদের বাদ দিই:

if (something)
    just one statement; // i find this ugly
else
{
    // many
    // lines
    // of code
}

আমি পছন্দ করি

if (something)
{
    just one statement; // looks better:)
}
else
{
    // many
    // lines
    // of code
}

15

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

আপনি যখন আপনার ম্যাক্রোগুলি তৈরি করেন আপনি খুব সাবধান হন না, আপনি যদি বিবৃতি যে use} ব্যবহার না করে তবে সমস্যা তৈরি করতে পারেন}

#define BADLY_MADE_MACRO(x) function1(x); function2(x);

if (myCondition) BADLY_MADE_MACRO(myValue)

এখন, আমাকে ভুল বলবেন না, আমি বলছি না যে আপনারা সর্বদা সি C সি ++ এ এড়ানোর জন্য do should করা উচিত, তবে এর কারণে আমাকে কিছু খুব অদ্ভুত ত্রুটিযুক্ত সমস্যার মুখোমুখি হতে হয়েছিল।


2
যদি কেবল সমস্ত কোডই নিজেকে এ জাতীয় হিসাবে ঘোষণা করে ... দীর্ঘশ্বাস
নাথান স্ট্রং

15

আমি একইভাবে চিন্তা করতে ব্যবহার করি।

একদিন অবধি (কেন সেখানে সর্বদা আপনার "চিরদিনের জন্য" একদিন "থাকে?) আমরা 24 থেকে 36 ঘন্টা সোজা ঘুম ডিবাগিং প্রোডাকশন কোড ব্যয় করি কেবল এটি সন্ধানের জন্য / পরিবর্তনের পরিবর্তে কাউকে ব্রেস রাখেনি বলে সন্ধান করি to ।

এটা কিছু ছিল।

 if( debugEnabled ) 
      println( "About to save 1 day of work to some very important place.");
 saveDayData();

পরে এসেছিল কি

 if( debugEnabled ) 
 //     println( "About to save 1 day of work to some very important place.");
 saveDayData();

দেখা যাচ্ছে যে সিস্টেমটি প্রতিদিন 500 এমবি লগ তৈরি করে এবং আমাদের এটি বন্ধ করতে বলা হয়েছিল। ডিবাগ পতাকাটি যথেষ্ট ছিল না তাই অনুসন্ধান এবং প্রিন্টলন প্রতিস্থাপনের ক্রম ছিল।

তবুও যখন অ্যাপটি প্রযোজনায় গিয়েছিল তখন ডিবাগ পতাকাটি বন্ধ ছিল এবং গুরুত্বপূর্ণ "সেভডেডাটা" কখনও কল করা হয়নি।

সম্পাদনা

এখন কেবলমাত্র যেখানে আমি ধনুর্বন্ধনী ব্যবহার করি না সেগুলিতে যদি / চেষ্টা করা হয়।

if( object != null ) try { 
     object.close();
} catch( .....

কোনও সুপারস্টার ডেভেলপার দেখে এটি করার পরে।


3
আমি বুঝতে পারছি না। আপনার একটি ভেরিয়েবল রয়েছে যা ডিবাগিং (ডিবাগইনেবল) নিয়ন্ত্রণ করে এবং আপনি এখনও ডিবাগিংটি অক্ষম করতে মন্তব্যগুলি ব্যবহার করেন ??? আপনি কেবল ডিবাগইনেবলকে মিথ্যাতে সেট করলেন না কেন?
ইগর পপভ

এটি হুবহু দৃশ্যের নয়, তবে আপনি একটি ভাল বক্তব্য রেখেছেন। মূর্খ জিনিস (যেমন মিথ্যাতে ডিবাগ সেট না করা) সূক্ষ্ম এবং মূ bu় বাগগুলি তৈরি করে যা "সুস্পষ্ট" বাগগুলির চেয়ে পাওয়া শক্ত। ব্রেস ব্যবহার না করা এক্ষেত্রে খুব বেশি সহায়তা করে নি।
অস্কাররাজ

1
@ আইজিওর কিভাবে হবে কারণ তারা কেবল লগিংয়ের সমস্ত লাইন লগিংয়ের একটি লাইন অপসারণ করতে চেয়েছিল?
gman

14

আমি এতে বেশ খুশি:

foreach (Foo f in foos)
  foreach (Bar b in bars)
    if (f.Equals(b))
      return true;

return false;

ব্যক্তিগতভাবে, আমি কেন দেখছি না

foreach (Foo f in foos)
{
  foreach (Bar b in bars)
  {
    if (f.Equals(b))
    {
      return true;
    }
  }
}

return false;

আর কোনও পাঠযোগ্য।

হ্যাঁ, লাইনগুলি নিখরচায়, তবে যখন এটির আকার অর্ধেক হতে পারে তখন কেন আমাকে পৃষ্ঠা পৃষ্ঠা এবং কোডের পাতাগুলি দিয়ে স্ক্রোল করতে হবে?

যদি পঠনযোগ্যতা বা রক্ষণাবেক্ষণের মধ্যে কোনও পার্থক্য থাকে তবে অবশ্যই, বন্ধনীগুলি রাখুন ... তবে এই ক্ষেত্রে আমি এর কোনও কারণ দেখতে পাচ্ছি না।

এছাড়াও, আমি সর্বদা নেস্টেডদের জন্য ব্রেসগুলি রাখব যদি আমি যেখানে অন্যের ঘৃণা করি's

if (condition1)
  if (condition2)
    doSomething();
  else (condition2)
    doSomethingElse();

বনাম

if (condition1)
  if (condition2)
    doSomething();
else (condition2)
  doSomethingElse();

মারাত্মক বিভ্রান্তিকর, তাই আমি সর্বদা এটি লিখি:

if (condition1)
{
  if (condition2)
    doSomething();
  else (condition2)
    doSomethingElse();
}

যখনই সম্ভব, আমি টার্নারি অপারেটরগুলি ব্যবহার করি, তবে আমি কখনই এগুলিকে বাসা করি না


সবেমাত্র আমার কোডে এটি প্রায় ঘটছে দেখেছি :) ভেবেছিলাম আমার চারপাশে একবার নজর থাকবে, এবং দেখুন এবং দেখুন ... এটি ইতিমধ্যে বাইরে আছে :)
Noctis

13

ভোঁতা হতে আমি এটি দেখতে:

ডিফেন্সিয়ালি ভাল প্রোগ্রামার প্রোগ্রাম, খারাপ প্রোগ্রামার না।

যেহেতু উপরে বেশ কয়েকটি উদাহরণ রয়েছে এবং ত্রুটিগুলি ভুলে যাওয়ার সাথে সম্পর্কিত বাগগুলির সাথে আমার নিজস্ব অভিজ্ঞতা রয়েছে তবে আমি সর্বদা পুট ব্র্যাকের হার্ড উপায়টি শিখেছি।

সুরক্ষার চেয়ে অন্য যে কোনও কিছুই ব্যক্তিগত শৈলী চয়ন করছে এবং এটি পরিষ্কারভাবে খারাপ প্রোগ্রামিং।

জয়েল এমনকি ভুল কোড লুক রেকং তৈরিতে এটির উল্লেখ করে

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


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

10

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

তবে ... ভুলগুলি করা যেতে পারে এবং এটি একটি ডিবাগ করার জন্য একটি ব্যথা ... বিশেষত যদি আপনি অন্য কারও কোডটি দেখছেন in


10

আমার দর্শনটি যদি কোডটি আরও পঠনযোগ্য করে তোলে তবে তা কেন করবেন না?

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

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


7
অবশ্যই এটি খুব সাবজেক্টিভ। এগুলি কিছু সময় ছেড়ে দেওয়া পাঠযোগ্যতার উন্নতি করে।
ব্রায়ান নোব্লাচ

সত্য, আমি যদি বন্ধনীগুলি বাইরে রাখি তবে অন্যরা যেমন উল্লেখ করেছে তেমন আমিও একটি লাইন রাখি। আমি অনেকবার কামড়েছি কিন্তু বহু লাইনের বন্ধনীবিহীন বিবৃতি। এমনকি যদি আপনি এটি সন্ধান করতে জানেন তবে এটি মাঝে মাঝে আপনাকে পেতে পারে।
জেমস ম্যাকমাহন

10

সর্বদা ব্যতিক্রম রয়েছে, তবে আমি কেবল তখনই বাদ দেওয়া বাদ দেওয়ার বিরুদ্ধে তর্ক করব যখন এটি কোনও ফর্মের মধ্যে রয়েছে:

if(x == y)
   for(/* loop */)
   {
      //200 lines
   }

//rampion's example:
for(/* loop */)
{
   for(/* loop */)
      for(/* loop */)
      {
         //several lines
      }
}

অন্যথায়, আমার এটি নিয়ে কোনও সমস্যা নেই।


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

2
সত্য, তবে তা ঘটে। এছাড়াও, পাঠকের স্ক্রিন বেশি হওয়ার চেয়ে কোনও সময় ব্লক দীর্ঘতর হতে পারে, আপনার এই সমস্যাটি থাকবে। এবং আপনি আপনার কোড পাঠকের পর্দার উচ্চতা নিয়ন্ত্রণ করতে পারবেন না। তারা কেবল প্রতিটি দিকে কয়েকটি লাইন দেখতে পাবে।
রামপিন

2
এটা ঘটে। এর অর্থ এই নয় যে এটি হওয়া উচিত
অ্যাডাম জ্যাসকিউইচ

3
পুনঃটুইট এটা ঘটে। আমরা কোন বিষয়ে চিন্তা করতে হবে না ঘটতে বদলে কি করা উচিত ঘটে। যা হওয়ার দরকার তা আমরা যদি নিজেদের মধ্যে সীমাবদ্ধ রাখতে পারি তবে আমাদের বাগগুলি নিয়ে চিন্তা করার দরকার পড়বে না।
বেসকা

10

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

আমি দেখেছি

if (...)
    foo();
    bar();

বাগ আমাকে কামড়ায় (বা বরং "আমাকে এবং সহকর্মী" - আমি আসলে বাগটি পরিচয় করিয়ে দিইনি) একবার । এটি তখনও ছিল যা আমাদের কোডিং মানগুলি সেই সময় সর্বত্র ব্রেস ব্যবহার করার পরামর্শ দিয়েছিল। স্পট করতে আমার এটি একটি আশ্চর্যজনকভাবে দীর্ঘ সময় নিয়েছিল - কারণ আপনি যা দেখতে চান তা আপনি দেখতে পান। (এটি প্রায় 10 বছর আগে ছিল। সম্ভবত আমি এটি এখন দ্রুত খুঁজে পেয়েছি))

অবশ্যই আপনি যদি "লাইনের শেষে ব্রেস" ব্যবহার করেন তবে এটি অতিরিক্ত অতিরিক্ত লাইন হ্রাস করে তবে আমি ব্যক্তিগতভাবে সেই স্টাইলটি অপছন্দ করি। (আমি এটি কর্মক্ষেত্রে ব্যবহার করেছি এবং এটি আমার প্রত্যাশার চেয়ে কম অপ্রীতিকর বলে মনে করেছি, তবে এটি এখনও খানিকটা অপ্রীতিকর))


আমি সর্বদা এই ক্ষেত্রে তর্ক করি যে প্রকৃত শৈলীর চেয়ে ধারাবাহিকতা অধিক গুরুত্বপূর্ণ, কেন আমরা কেবল ব্যবহারের ক্ষেত্রে ব্যতিক্রম করব?
বব

@ বোবি: ভাল কথা, এবং আমি এটি মাঝে মধ্যেই করি। আমি এখানে ভ্রান্ত কারণ বলতে চাই না যে এখানে আমার আসল কারণ রয়েছে :) আসলে, এর একটি যুক্তিসঙ্গত কারণ আছে - এর মতো ইউস্টিংগুলি (এবং কেবলমাত্র usings) বাসা বেঁধে ফেলা মোটামুটি সুস্পষ্ট, এবং আপনি এখনও একটি ব্লক দিয়ে শেষ করেন । আমি তাত্ক্ষণিকভাবে বিপদটি দেখতে পাচ্ছি না।
জন স্কিটি

কোনটি অবশ্যই কোনও বিপদ নেই তা বলার অপেক্ষা রাখে না
জন স্কিটি

1
এই বাগের সেরা সমাধান: পাইথন ব্যবহার করুন। (মজা করছি, অবশ্যই।)
জোয়েল উইটেলম্যান

10

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

আমি মনে করি এটির অর্থ আমি স্মার্ট নই। আমি এই একাধিকবার ভুল করেছি। আমি এটিকে ঘিরে অন্যের ভুল ডিবাগ করেছি। আমি এর কারণে বাগ সহ সফ্টওয়্যার শিপটি দেখেছি (ভিএস ২০০২ চালিত কোনও মেশিনে আরডিপি এবং আপনার ঘড়ির উইন্ডো ফন্টটি খারাপ হবে)।

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

এটি বলেছিল যে বিশ্বে কিছু জিনিস পরিবর্তিত হয়েছে যা "তুমি একক-লাইন ব্লকে ধনুর্বন্ধনী ব্যবহার করবে" মোসাকে যখন আমাদের কাছে নামিয়ে এনেছে তার চেয়ে আজকের নিয়মটি কম প্রাসঙ্গিক হয়ে উঠেছে:

  • কিছু জনপ্রিয় ভাষাগুলি কম্পিউটারটিকে ইন্ডেন্টেশন পড়ার মাধ্যমে সমস্যাটি সরিয়ে দেয়, ঠিক যেমন প্রোগ্রামার করে (যেমন পাইথন)।

  • আমার সম্পাদক স্বয়ংক্রিয়ভাবে আমার জন্য ফর্ম্যাট করে , সুতরাং ইন্ডেন্টেশন দ্বারা আমার বিভ্রান্ত হওয়ার সম্ভাবনা অনেক কমে যায়।

  • টিডিডি এর অর্থ হ'ল আমি যদি একটি বাগ প্রবর্তন করি কারণ আমি একটি একক-লাইন ব্লকে বিভ্রান্ত হয়ে পড়েছি তবে আমি সম্ভবত বাগটি আবিষ্কার করার সম্ভাবনা অনেক বেশি।

  • রিফ্যাক্টরিং এবং ভাষাগুলি প্রকাশের অর্থ হ'ল আমার ব্লকগুলি অনেক খাটো এবং একক-লাইন ব্লকগুলি ব্যবহারের চেয়ে অনেক বেশি ঘটে। হাইপোথিটিক্যালি, এক্সট্রাক্টমথোডের নির্মম অ্যাপ্লিকেশন সহ, আমার সম্ভবত পুরো প্রোগ্রামটিতে আমার কেবলমাত্র একক-লাইন ব্লক থাকতে পারে । (আমি অবাক হই যে এটি দেখতে কেমন হবে?)

প্রকৃতপক্ষে, একক লাইন ব্লকগুলিতে নির্মমভাবে এবং ব্রেসগুলি বাদ দেওয়া থেকে আলাদা আলাদা সুবিধা আসতে পারে: আপনি যখন ব্রেসগুলি দেখেন তখন আপনার মাথায় কিছুটা অ্যালার্ম বাজতে পারে যা বলে "জটিলতা এখানে! সাবধান!"! ভাবুন যদি এই আদর্শ ছিল:

if (condition) Foo();   // normal, everyday code

if (condition) 
{
    // something non-trivial hapening; pay attention!
    Foo();
    Bar();
}

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


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

ধনুর্বন্ধনী সম্পর্কে আমিও একই অনুভব করি। সব জটিলতা সম্পর্কে। আদর্শভাবে আমাদের কেবল একটি লাইন ব্লক থাকবে। এটাকেই আমি পাঠ্যতা বলি, অপ্রয়োজনীয় ধনুর্বন্ধনী না।
ইগোর পপভ

9

তিনটি সম্মেলনের মধ্যে:

if(addCurleyBraces()) bugFreeSofware.hooray();

এবং:

if(addCurleyBraces())
    bugFreeSofware.hooray();

এবং (যা একটি উদ্বোধনী এবং একটি বন্ধনী বন্ধনী ব্যবহার করে কোনও প্রবর্তন শৈলী প্রতিনিধিত্ব করে):

if(addCurleyBraces()) {
    bugFreeSofware.hooray();
}

আমি সর্বশেষ হিসাবে পছন্দ করি:

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

8

ধনুর্বন্ধনী ব্যবহারের বিরুদ্ধে আপনার প্রধান যুক্তি হ'ল তারা অতিরিক্ত লাইন ব্যবহার করে এবং তাদের অতিরিক্ত ইনডেন্টিংয়ের প্রয়োজন।

রেখাগুলি (প্রায়) নিখরচায়, আপনার কোডের লাইনের সংখ্যা হ্রাস করা কোনও উদ্দেশ্য নয়।

এবং ইন্ডেন্টেশন বন্ধনী ব্যবহারের থেকে পৃথক। আপনার ক্যাসকেডিং 'ব্যবহার করে' উদাহরণে আমি এখনও মনে করি আপনি ব্রেসগুলি বাদ দিলেও আপনার সেগুলি যুক্ত করা উচিত।


8

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

কেউ কেউ বলতে পারে এটি পছন্দ হিসাবে বিবেচিত, তবে কোনও প্রোগ্রামের যৌক্তিক প্রবাহটি যদি অভ্যন্তরীণভাবে সামঞ্জস্যপূর্ণ হয় তবে এটি অনুসরণ করা আরও সহজ মনে করি এবং আমি বিশ্বাস করি না যে এটি যদি এইরকম একটি বিবৃতি লিখতে সুসংগত হয়;

if(x < y)
    x = y;
else
    y = x;

আর এর মতো আর একটি;

if(x < y)
{
    x = y;
    x++;
}
else
{
    y = x;
    y++;
}

আমি কেবল একটি সাধারণ স্টাইল বাছাই করে পছন্দ করি :)


7

প্রধান বিষয় এক (ব্যবহারকারীকে নিয়ন্ত্রণের statment থেকে বিচ্ছেদ সহ আপনি এক liners, এবং অ এক liners, অঞ্চলে আছে for,if তোর কি মনে আছে) এবং statment শেষে।

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

for (...)
{
  for (...)
    for (...) 
    {
      // a couple pages of code
    }
  // which for block is ending here?  A good text editor will tell you, 
  // but it's not obvious when you're reading the code
}

4
আপনার কেন লুপের জন্য কোডের কয়েকটি পৃষ্ঠা রয়েছে?
অ্যাডাম জ্যাসকিউইচ

বি / সি আমি একটি সংবেদনশীল ক্লড এবং ফাংশন কলগুলির "ব্যয়" থেকে মুক্তি পাওয়ার জন্য আমার মন খারাপ হয়ে গেছে। :)
রামপিন

4
কোডের দুটি পৃষ্ঠাগুলি সাধারণত একটি পৃথক ফাংশনে থাকা উচিত।
জোনাথন লেফলার

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

7

আমি "কোঁকড়ানো ধনুর্বন্ধনী একটি আবশ্যক!" এর বিশাল সমর্থক হিসাবে ব্যবহৃত হতাম, তবে ইউনিট পরীক্ষা গ্রহণের পরে, আমি দেখতে পেয়েছি যে আমার ইউনিট পরীক্ষাগুলি যেমন দৃশ্যাবলী থেকে ব্রেসলেস বিবৃতি রক্ষা করে:

if (foo)
    snafu();
    bar();

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

বিকল্প হিসাবে, উপরের মত কিছু জন্য, আমি সম্ভবত ইনলাইন যে দেখতে হবে:

if (foo) snafu();

এইভাবে, যে বিকাশকারীকে শর্তে বার () যুক্ত করতে হবে, তারা কোঁকড়ানো ধনুর্বন্ধনীগুলির অভাব সনাক্ত করতে এবং সেগুলি যুক্ত করার জন্য আরও উপযুক্ত।


2
আপনি বলেছিলেন "আমার দরকার নেই" তখন এটি ব্যবহারের জন্য একটি কারণ দিয়েছেন: পাঠযোগ্যতা!
tvanfosson

4
আমি এটির জন্য কোনও ইউনিট টেস্টের উপর নির্ভর করব না। লিন্ট হতে পারে, ইউনিটের পরীক্ষা নেই!
ক্রাইস্টেন

2
@ ক্রিস্টেন - ইউনিট পরীক্ষার ধারণাটি হল পদ্ধতির আচরণকে দৃ .় করা। আচরণ পরিবর্তন হলে (উপরে বর্ণিত হিসাবে) ইউনিট পরীক্ষা ব্যর্থ হবে। আমি তাতে সমস্যা দেখছি না।
লিগি

তবে কেন ইউটি তে যাওয়ার আগে স্থির করা উচিত এমন চমকপ্রদ স্পষ্টতাকে বেছে নিতে ইউনিট টেস্টের উপর কেন ভরসা করবেন?
অ্যান্ড্রু

7

কিছু ব্যক্তিগত রায় ব্যবহার করুন।

if (foo)
  bar();

নিজেই ঠিক আছে। যদি না আপনি পরে মরনগুলিকে এই জাতীয় কিছু দেওয়ার বিষয়ে উদ্বিগ্ন হন:

if (foo)
  bar();
  baz();

আপনি যদি মরনদের নিয়ে উদ্বিগ্ন না হন তবে আপনি ভাল আছেন (আমি নই - তারা যদি বেসিক কোড সিনট্যাক্সটি সঠিকভাবে না পেতে পারে তবে এটি তাদের সমস্যাগুলির মধ্যে অন্তত)>

বিনিময়ে, এটি অনেক বেশি পাঠযোগ্য।

বাকি সময়:

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

যতক্ষণ মনে রাখতে পারি এটি আমার প্রিয় ছিল। উপরন্তু:

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

আমার জন্য কাজ কর.

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


আমি যখন প্রথম স্টাইলটি পছন্দ করি কেবল তখনই যখন আমাকে তত্ক্ষণাত্ ফিরে আসতে হয় বা কিছু ভুল হয়ে যায় তবে ত্রুটি ফেলে দিতে হয়। লাইক if (parameter == null) return null;
নওফাল

7

ঠিক আছে, এটি একটি পুরানো প্রশ্ন যা মৃত্যুর জবাব দেওয়া হয়েছে। আমার কিছু যোগ করার আছে

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

এখন আমার সংযোজনের জন্য: এটির সাথে একটি সমস্যা রয়েছে:

if (foo) bar();

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

সুতরাং এটি করুন:

if (foo)
{
    bar(); //It is easy to put a breakpoint here, and that is useful.
}

2
বারে ডান ক্লিক করুন এবং সন্নিবেশ ব্রেকপয়েন্টটি চয়ন করুন ... মোটেই কঠিন নয়। আপনার সরঞ্জামগুলি জানুন।
বব

সূচক বারে ডান ক্লিক করা কিছুই করে না; আপনি কি টেক্সট ডান ক্লিক করতে চান? যাইহোক, যদি আপনি কেবল "যদি" স্টেটমেন্টটি সত্য হয় এবং "বার ()" তার নিজস্ব লাইনে থাকে তখন ব্রেক পয়েন্টটি হিট করতে চান, আপনি কার্সারটি সেই লাইনের যে কোনও জায়গায় রেখে F9 চাপতে পারেন, বা বাম ক্লিক ক্লিক করুন সূচক মার্জিন তবে যাইহোক, সমস্ত কোড একক লাইনে থাকলে আপনাকে "বার ()" তে কার্সারটি অবস্থান করতে হবে বা F9 টিপানোর আগে ঠিক সেখানে ডান ক্লিক করতে হবে এবং সূচক মার্জিনে ক্লিক করা কার্যকর হবে না ('ব্রেক ব্রেকপয়েন্ট' রাখবে) যদি ')। এটি "শক্ত" নয় তবে কোডটি দুটি লাইনে থাকলে কম ঘনত্বের প্রয়োজন।
পাথর

ওহ, হা হা, "বার ()" এ ডান ক্লিক করুন। আপনি পাঠ্যটি বোঝাতে চেয়েছিলেন Gotcha। অবশ্যই, বা কেবল F9 টিপুন ...
পাথর

>> আপনাকে "বার ()" তে কার্সারটি অবস্থান করতে হবে বা এফ 9 টিপানোর আগে ঠিক সেখানে রাইট ক্লিক করতে হবে, (এফ 9 টি টিপুন বা ডান ক্লিকের আগে কার্সারটি ঠিক সেখানে অবস্থান
পাথর

7

প্রচুর জায়গা গ্রহণ থেকে ব্রেস সহ কোডটি রাখার জন্য, আমি কোড কমপ্লিট বইতে প্রস্তাবিত কৌশলটি ব্যবহার করি :

if (...) {
    foo();
    bar();
}
else {
    ...
}

এটি কেন কম করা হয়েছিল তা আমি পেতে পারি না এটি প্রতিটি ব্র্যাকেট জুটির জন্য একটি লাইন সংরক্ষণ করে যা আমি সব সময় ব্যবহার করি
এরিক

2
এটি কে ও আর স্টাইল হিসাবে বেশি পরিচিত। কার্নিগান এবং রিচি রচিত সি প্রোগ্রামিং ল্যাঙ্গুয়েজ বইটি অবলম্বনে: en.wikedia.org/wiki/The_C_Programming_Language_(book) । এবং এটি আপনাকে নিচে নামানো উচিত নয়।
jmucchiello

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

আমি এই এক ভেবে উপরে সমস্ত উত্তর পড়ছিলাম "কেন কেউ এখনও এ বিষয়ে পরামর্শ দেয়নি ???" এটি বন্ধ হয়ে যাওয়া বন্ধনীটি এটি বন্ধ হয়ে যাওয়া ব্লকের সাথে প্রান্তিককরণ করে, এটি "যদি" বা "যখন", ইত্যাদি, অর্থহীন "{" নয়। +1 টি।
নিকফ

যদি খোলা ধনুর্বন্ধনী সবসময় নিজেরাই লাইনগুলিতে স্থাপন করা হয় তবে কোনও ifএকক ইনডেন্টেড রেখার পরে যা কোনও দৃষ্টিগোচর দরকার নেই তা ছাড়াই কোনও একক স্টেটমেন্ট নিয়ন্ত্রণ করার জন্য দৃশ্যত স্বীকৃত হতে পারে। ওপেন-ব্রেস-বাই-নিজেই শৈলী এমন পরিস্থিতিতে সাদা স্থানকে বাঁচায় যেখানে কোনও ifবিবৃতি এমন কিছুকে নিয়ন্ত্রণ করে যা শব্দার্থগতভাবে একটি একক ক্রিয়া হয় (কেবলমাত্র একক পদক্ষেপের সাথে ঘটে এমন পদক্ষেপগুলির ক্রম থেকে পৃথক)। উদাহরণস্বরূপ, if (someCondition)/ new নতুন সাম্যাক্সেপশন (...) `নিক্ষেপ করুন`
ক্যাট

6

ধরা যাক আপনার কিছু কোড রয়েছে:

if (foo)
    bar();

এবং তারপরে অন্য কেউ এসে যোগ করেছেন:

if (foo)
    snafu();
    bar();

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


প্রশ্নটি ইতিমধ্যে তৈরি হয়েছিল point
মাইক স্কট

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

বাগ প্রুফ কোডের মতো সত্যই কি কোনও জিনিস আছে?
বব

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

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

6

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


5

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

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

আমি এটা ধরনের জন্য যুক্তি মত দেখতে if ( foo == 0 )বনাম if ( 0 == foo )। পরেরটি নতুন প্রোগ্রামারগুলির জন্য বাগগুলি প্রতিরোধ করতে পারে (এবং এমনকি কখনও কখনও অভিজ্ঞদের জন্যও হতে পারে), যখন আপনি কোডটি বজায় রাখছেন তখন পূর্ববর্তীটি দ্রুত পড়া এবং বুঝতে সহজ হয়।


4

বেশিরভাগ সময় এটিকে কোডিং স্ট্যান্ডার্ড হিসাবে সংযুক্ত করা হয়, তা কোনও সংস্থা বা কোনও FOSS প্রকল্পের জন্যই হোক।

শেষ পর্যন্ত অন্য কাউকে আপনার কোডটি ছাঁটাই করা দরকার এবং প্রতিটি বিকাশকারী যে কোডটিতে কাজ করছেন তার সুনির্দিষ্ট স্টাইলটি বের করার জন্য এটি একটি প্রধান সময় নিকাশ।

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


পাইথন সম্পর্কে মন্তব্য করার জন্য +1। আমি সবসময় আশ্চর্য হয়েছি যে ভাষাগুলির মধ্যে অবিচ্ছিন্নভাবে স্যুইচ করার সময় আমি কীভাবে "বোকা" হতে পারি।
কেনা

3

আরও সুরক্ষিত দিকের ত্রুটি - সম্ভবত আপনাকে আরও একটি বাগ ঠিক করতে হবে না।

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

আমার যদি ওয়ান-লাইনার থাকে তবে আমি সাধারণত এটি নিম্নরূপে ফর্ম্যাট করি:

if( some_condition ) { do_some_operation; }

লাইনটি যদি খুব জটিল হয় তবে নিম্নলিখিতগুলি ব্যবহার করুন:

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