অপারেটরের আগে / পরে লাইন ব্রেক


29

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

String longVarName = a + b + c + d +
          e + f;

বনাম

String longVarName = a + b + c + d
          + e + f;

আপনি দয়া করে উভয় সম্মেলন দেখিয়ে একটি সাধারণ কোড উদাহরণ পোস্ট করতে পারেন?
মাইকেল

প্রথমে আমি এ জাতীয় কিছু ব্যবহার করে পরিস্থিতি এড়াতে চেষ্টা করব: download.oracle.com/javase/1.4.2/docs/api/java/lang/…
কাজ

লিঙ্কটি নষ্ট হয়ে গেছে।
ফ্লোরিয়ান এফ

উত্তর:


14

আমি এটিকে এক লাইনে রেখে দিয়েছি এবং পরিবর্তনের নামগুলি (এবং ফাংশন) এর উদ্দেশ্য অনুযায়ী পাঠযোগ্যতার বিষয়ে চিন্তা করব।

একবার যদি অগোছালো হয়ে যায় তখন রিফ্যাক্টর করার সময় এসেছে :

  • নাম পরিবর্তন করুন
  • নতুন vars / ফাংশন প্রবর্তন

উদাহরণ

subtotal = price * (100 + tax_ratio) / 100`

বনাম

tax = price * tax_ratio / 100
subtotal = price + tax

2
বাম দিকে সূত্রটি ভুল। এটি শতাংশ বা ভগ্নাংশের উপর নির্ভর করে price * (100 + tax_ratio) / 100এটি হয় বা ন্যায়সঙ্গত হওয়া উচিত । price * (1 + tax_ratio)tax_ratio
রাফলেউইন্ড

4
এটি প্রশ্নের উত্তর দেয় না। এই জাতীয় জবাবের বিরুদ্ধে আইন থাকা উচিত।
এডওয়ার্ড ডি সুজা

@ এডওয়ার্ড'সুজা আমিও একই বোধ করি। তবে কেন উত্তরটি গৃহীত হয়েছিল?
রুডি দর্শক

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

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

36

আমি পাঠ্যতা একটি আর্গুমেন্ট হিসাবে কল্পনা করতে পারেন

result = longidentifier +
   short -
   alittlelonger -
   c;

বনাম

result = longidentifier
   + short
   - alittlelonger
   - c;

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


4
অপারেটররা যে পরিস্থিতিতে গুরুত্বপূর্ণ (যেমন গণিতের এক্সপ্রেশন এবং এর মতো) আমি দুটি নম্বর বেছে নেব কারণ আপনি যেমন বলেছেন, এটি অনেক বেশি পঠনযোগ্য। তবে স্ট্রিংগুলির জন্য আমি প্রথম বিকল্পগুলি বেছে নেব, কারণ অপারেটরগুলি "অর্থহীন"। তারা একসাথে স্ট্রিং আনা ব্যতীত অন্য কিছু করে না এবং স্ট্রিংগুলি গুরুত্বপূর্ণ বিট, তাই আমি প্রথম বিকল্পগুলি পছন্দ করব।
নিক্লাস এইচ

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

35

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

আমি যে সর্বাধিক সাধারণ শৈলীগুলি দেখেছি তা হ'ল প্রশ্নের দ্বিতীয় স্টাইল। তাদের তালিকার জন্য নীচে দেখুন:

গুগল স্টাইল গাইড :

যখন কোনও নাইন-অ্যাসাইনমেন্ট অপারেটরে একটি লাইন নষ্ট হয়ে যায় তখন চিহ্নটির আগে বিরতি আসে।

সান কোডিং কনভেনশন :

অপারেটরের আগে বিরতি দিন

Checkstyle অপারেটর মোড়ানো চেক এর ডিফল্ট মান nl এর হল:

অপারেটরটি অবশ্যই একটি নতুন লাইনে থাকবে


2
পরিষ্কারতার জন্য আমার উত্তর আপডেট করেছে + সনের কোডিং কনভেনশন।
সিলফোরস

google.github.io/styleguide/javaguide.html (উত্তরের লিঙ্কটি ভাঙা হয়েছে)
মার্টিন

10

কোডে আমি অপারেটরের পরে বিরতি রেখেছি:

foo = some_long_expression() +
      some_other_long_expression();

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

এই অভিব্যক্তিটি ডকুমেন্ট করার সময় (এটির যদি ডকুমেন্টেশনের প্রয়োজন হয়), আমি অপারেটরের সামনে বিরতি রাখি।


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

3

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


3

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

নীচের উদাহরণে, বাম মার্জিনটি স্ক্যান করে, আপনি 3 টি এক্সপ্রেশনের একটি OR হিসাবে বিবৃতিটির কাঠামোটি দেখতে পান।

if (ch>='A' && ch<='Z'
    || ch>='a' && ch<='z'
    || ch>='0' && ch<='9')
{...}

নীচে, || অপারেটর কম হাইলাইট করা হয়। এটি কম স্পষ্ট হয় এটি একটি || প্রকাশের। বিশেষত যদি লাইনগুলি পৃথক দৈর্ঘ্যের হয়।

if (ch>='A' && ch<='Z' ||
    ch>='a' && ch<='z' ||
    ch>='0' && ch<='9')
{...}

এবং কেবল রেফারেন্সের জন্য, এটি খুব ভুল। দি || অপারেটরদের মোটেই হাইলাইট করা হয় না।

if ( ch>='A' && ch<='Z' || ch>='a'
     && ch<='z' || ch>='0' && ch<='9')
{...}

আমি এমনকি লাইনের শুরুতে কমা রাখতে চাই, যদিও আমি খুব কমই এটি দেখতে পারি। আমি ভাগ করা কোডে তা করা থেকে বিরত থাকি।

var note:Object =
    { key: key
    , type: 'P'
    , text: someLongProcedureCallGettingTheUserInitials()
       + ": " + getTheTextThatWasTyped()
    };

2

দীর্ঘ গাণিতিক সমীকরণের জন্য, আমি সাধারণত দুটি জিনিসের একটি করি।

একটি লাইনে সবকিছু ছেড়ে দিন:

foo = bar + baz - fizz + buzz + alpha - beta;

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

আমি ব্যবহৃত দ্বিতীয় ফর্ম্যাটটি হ'ল প্রগতিশীল অপারেটর:

foo = bar;
foo += baz;
foo -= fizz;
foo += buzz;
foo /= alpha - beta;
foo *= spiff;

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


2

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

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


0

এক্সপ্রেশনটি একটি লাইনে ছেড়ে দিন এবং যদি এটি খুব দীর্ঘ হয়ে যায়, তবে এটিকে আরও ছোট করে প্রকাশ করুন:

days = ((year * months_per_year) + month) * days_per_month + day

হয়ে:

months = year * months_per_year + month
days = months * days_per_month + day

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

random = years * months_per_year 
         + month * days_per_month 
         + day * hours_per_day 
         + hour * minutes_per_hour 
         + minute * seconds_per_minute 
         + second

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