বাইনারি অপারেটরগুলির আগে বা পরে নতুন লাইনগুলি রাখা উচিত? [বন্ধ]


11

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

তবে সি বা সি ++ তে এটি কোনও সমস্যা নয়, তাই আমি ভাবছি:

আমার জন্য দ্বিতীয় সংস্করণটিকে প্রথমটির চেয়ে পছন্দ করার কোনও কারণ আছে?

return lots_of_text
       + 1;

বনাম

return lots_of_text +
       1;

(উদাহরণস্বরূপ, এর মধ্যে একটির কি অন্য ধরণের ত্রুটি রোধে সহায়তা করা হয়? বা এর মধ্যে একটিকে আরও পাঠযোগ্য বলে বিবেচনা করা হয়?)


না, পাইথনে আপনাকে এটি করা উচিত নয়, বেশিরভাগ কারণেই আপনি দাবি করেছেন যে এটি প্রভাব ফেলেছে না। একটি পূর্ববর্তী অপারেটর একটি লাইন ধারাবাহিকতা সৃষ্টি করে না; একটি ব্যাকস্ল্যাশ বা আনলসড বন্ধনী, বন্ধনী বা ধনুর্বন্ধনী রয়েছে does

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

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

@ ডেলানন: দুর্ঘটনাক্রমে আপনার পাঠ্য সম্পাদকের সাথে ইন্ডেন্টেশনটি আঁকানো খুব সহজ, যেমন বাল্ক-সম্পাদনা করার সময় বা আয়তক্ষেত্রাকার নির্বাচন করার সময়। এবং যদি / রক্ষণাবেক্ষণের সময় এটি ঘটে তখন আপনি প্রথম ক্ষেত্রে ত্রুটি পাবেন না এবং এটি নীরবে আপনার দ্বারা পিছলে যাবে তবে আপনি দ্বিতীয় ক্ষেত্রে একটি দুর্দান্ত ত্রুটি পাবেন।
ব্যবহারকারী541686

4
কেন এটি নিম্নমানের ছিল তা নিশ্চিত নয়। এটি একটি যুক্তিসঙ্গত কোডিং শৈলীর প্রশ্নের মতো মনে হচ্ছে।
স্টুয়ার্ট

উত্তর:


18

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


অপারেটরগুলির আগে আমি একটি নতুন লাইন সন্নিবেশ করতে পছন্দ করি

যখনই আমাকে লাইনগুলি ভেঙে ফেলতে হবে, আমি সাধারণত একই "স্তরের" প্রায় এক শব্দটি একটি লাইনে রাখি:

পাইথনে নিউটনের মহাকর্ষ আইন:

force = (
    gravitational_constant
    * mass_1
    * mass_2
    / (distance * distance)
)

এর সাথে তুলনা করুন:

force = (
    gravitational_constant *
    mass_1 *
    mass_2 /
    (distance * distance)
)

আমি জানতে চাই, আমি " দূরত্বের স্কোয়ার দ্বারা বিভক্ত ", আমি জানতে চাই না যে "ভর ২ বিভক্ত হয়ে যায়", কারণ আমি এইভাবে গাণিতিক ভাবের কথা ভাবি না।

তদতিরিক্ত, আমি সাধারণত ( প্রথমে ) আমি কী করতে চাই (অপারেটর) জানতে চাই, আমি (অপারেটস) দিয়ে কী করি সেগুলি সম্পর্কে যত্নশীল হওয়ার আগে ।

অথবা এই দ্রষ্টব্য এসকিউএল বিবৃতিটি বিবেচনা করুন:

WHERE
  a = 1
  AND b = 2
  AND c = 3
  AND ( -- or put the OR on one line together with the AND
    d = 3 
    OR e = 1)
  AND x = 5

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

WHERE
  a = 1 AND
  b = 2 AND
  c = 3 AND
  ( 
    d = 3 OR
    e = 1) AND
  x = 5

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

বা একটি পিএইচপি উদাহরণ:

$text = "lorem ipsum"
      . "dolor sit amet, "
      . "consectetur adipisicing elit, "
      . "sed do eiusmod tempor";

আবার আমি কেবল উল্টানো পড়ার বিষয়টি স্কিমে দেখতে পারি যে আমি কেবল পাঠ্যকে সংশ্লেষ করছি, কারণ বেশিরভাগ সময় আমি অনুভব করি যে স্ট্রিং / শর্তের ভিতরে যা আছে তা আসলে আমি যত্ন করি না।

অবশ্যই, আমি এই শৈলীটি নিঃশর্তভাবে প্রয়োগ করব না। কোনও অপারেটরের পরে যদি নতুন লাইনটি লাগানো আমার কাছে আরও বোঝায় তবে আমি তা করব তবে আমি এই মুহুর্তে কোনও উদাহরণের কথা ভাবতে পারি না।


অনুপস্থিত প্রথম বন্ধনে প্রথম বন্ধনী যুক্ত করা হয়েছে।
কেভিন ক্লাইনে

1
+1: ঠিক ঠিক; গণিত সর্বদা টাইপসেট থাকে যাতে ধারাবাহিকতা লাইন অপারেটরের সাথে শুরু হয়।
কেভিন ক্লাইনে

আপনি বর্ণনা করেছেন একই কারণে +1, তবে আপনার পিএইচপি উদাহরণটি আমার কাছে বেশ অদ্ভুত দেখাচ্ছে । এই কনকোটগুলি কি কেবল হওয়া উচিত .নয় .=?
ইজকাটা

@ ইজকাটা ওহ হ্যাঁ, আপনি অবশ্যই ঠিক আছেন। ধন্যবাদ। কেভিন: প্রথম বন্ধনীগুলি সঠিক ছিল;) আমি কেবল তাদের সাথে প্রান্তিককরণ করেছিforce
ফ্যান্ট0 মি

11

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

if (first_part_of_condition &&
    second_part_of_condition) {
    statement_within_then_part;
}

শর্তসাপেক্ষ প্রকাশের দ্বিতীয় অংশটি তৎকালীন প্রথম অংশের সাথে সহজেই বিভ্রান্ত হয়। এটি বেশ বিভ্রান্তিকর হতে পারে যদি শর্তের প্রথম অংশটি দীর্ঘ হয় এবং && ডানদিক থেকে শেষ হয়। বিকল্পের সাথে এর তুলনা করুন:

if (first_part_of_condition
    && second_part_of_condition) {
    statement_within_then_part;
}

এটি কিছুটা অদ্ভুত দেখাচ্ছে তবে এটি একেবারে পরিষ্কার করে দিয়েছে যে শর্তের দ্বিতীয় অংশটি কোনও বিবৃতি শুরুর নয়।

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

tl; ডাঃ লাইনের বাম প্রান্তটি দ্রুত পঠন অনুধাবনের জন্য আরও তাত্পর্যপূর্ণ, সুতরাং অপারেটরটিকে বাম প্রান্তে রাখা আরও বিশিষ্ট মার্কার যে এটি একটি ধারাবাহিক প্রকাশ, বিবৃতি নয়।


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

"শর্তসাপেক্ষ প্রকাশের দ্বিতীয় অংশটি তত্ক্ষণাতন্ত্রের প্রথম বক্তব্যের সাথে সহজেই বিভ্রান্ত হয়" ": আপনি আরম্ভ এবং শেষ করতে" {"এবং" ("উল্লম্বভাবে (একই কলাম) সারিবদ্ধ করলে এটি হয় না This ব্লকের আরও পরিষ্কারভাবে দাঁড়ানো।
জর্জিও

8

আমি সর্বদা প্রথমটি ব্যবহার করতাম। আপনি সেখানে এটি 1 দিয়ে কী করছেন তা পরিষ্কার হয়ে যেতে চান। যদি আমি এটি দেখেছি এবং সেখানে 1 এর উপরে পাঠ্যের একটি প্রাচীর রয়েছে তবে আমার কী ধারণা নেই যে 1 এর ব্যবহার পর্যন্ত কী চলছে।

'+' 1 এর পাশে থাকা এটি পরিষ্কার করে দেয় যে কোনও আপত্তিগত কারণ ছাড়াই ন্যূনতমভাবে আমি প্রশ্নে থাকা 1 টির সাথে কিছু করছি বরং এটি "আমি সমস্তই আপনার কোড ডিউডে আছি ..." যাচ্ছে hanging


সেকেন্ডেড ...........
জেমস

7

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

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

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

আমি ডুবেছি,
তাই আমি সাঁতার কাটছি

আপনি লিখবেন না

আমি ডুবেছি
, তাই আমি সাঁতার কাটছি


3
+1: আমি অপারেটরগুলির তালিকায় দুটি আইটেমকে পৃথক করে কমা হিসাবে লাইনের শেষে + পড়তে চাই। এই কারণে আমি কমা দিয়ে যেমন করতাম তেমন একটি লাইনের শেষে + যুক্ত করা পছন্দ করি (আমি কখনই কমা দিয়ে লাইন শুরু করব না)।
জর্জিও

@ জর্জিও এই পয়েন্টটি এত উত্তম যে আমি আমার উত্তরের জন্য এটি চুরি করেছি। আমি আপনাকে আমার ক্ষমা করতে পারেন আশা করি।
কনরাড রুডলফ

এগিয়ে যান: আমি সম্মানিত বোধ। ;-)
জর্জিও

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

3
গাণিতিক টাইপসেটেটিং-এ লাইন ব্রেকটি সর্বদা অপারেটরের আগে থাকে, পরে কখনও হয় না। প্রসাইক উদাহরণে অপারেটরটি "অতএব"। ইংরেজি গদ্যে কমাগুলি মূলত শ্বাসের চিহ্ন।
কেভিন cline
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.