একক লাইন বিবৃতি এবং ভাল অভ্যাস


11

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

textBox1.Text = "Something!"; textBox2.Text = "Another thing!"; textBox3.Text = "Yet another thing!";

উল্টোদিকে

textBox1.Text = "Something!";
textBox2.Text = "Another thing!";
textBox3.Text = "Yet another thing!";

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



1
আমি বজায় রাখলে আমার সমস্যা হবে। আমি প্রথম যেটি করবো তা হল "" "" এর জন্য একটি সিটিআরএল + এফ করা; এবং একটি লাইন বিরতি রাখুন। কিন্তু সেটা ছিলাম আমি :-). আমি কেবল একটি লাইনের মতোই করি যদি আমার পুনরায় কোনও পুনঃসূচনা হয়, উদাহরণস্বরূপ মিথ্যাটির ডিফল্ট মান সহ কয়েকটি পাঠ্য বাক্সের সক্ষম বৈশিষ্ট্যগুলি আরম্ভ করুন: পাঠ্যবক্স 1 nএনবল = টেক্সটবক্স 2 nএনবলড = মিথ্যা;
অরুণ

2
আপনি যদি কোডিং শৈলীর প্রশ্ন জিজ্ঞাসা করছেন, আপনি যদি ভাষাটি নির্দিষ্ট করে থাকেন তবে এটি সহায়তা করবে।
কালেব

3
প্রদত্ত উদাহরণে এটি উত্থাপিত নাও হতে পারে, আপনি কীভাবে দ্বিতীয় বা তৃতীয় বা ... বিবৃতিতে একটি ব্রেকপয়েন্ট স্থাপন করতে চলেছেন যদি আপনি সেগুলিকে এক লাইনে রেখে দিচ্ছেন?
মার্জন ভেনেমা

1
এবং এছাড়াও, আমি স্বয়ংক্রিয় বিন্যাসে (জাভা) অভ্যস্ত, যেখানে কোড যাইহোক একসাথে চেহারা পায়।
কুয়েবল

উত্তর:


22

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

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

এছাড়াও, যদি আপনার সমস্যাটি পুনরাবৃত্তিযোগ্য কোড এন্ট্রি ... Ctrl-C ভুলবেন না। আপনার উদাহরণ কোড থেকে ম্যানুয়ালি এগুলি টাইপ করা আরও দক্ষ হতে পারে তবে আপনি যদি অনেকগুলি লাইনের একগুচ্ছ অনুলিপি করতে চান তবে মনে হয় এটি এক লাইনের সাথে একটি নতুন লাইন অনুলিপি করা ঠিক তত দক্ষ হবে, এটি পেস্ট করুন এক্স বার এবং পরিবর্তনগুলি করুন, টাইপও করার সম্ভাবনা কম।

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


2
ক) পঠন / স্ক্যানিং কোড - বেশিরভাগ লোকেরা যখন স্ক্যানিং কোডটি লাইনটির প্রথম কয়েকটি অক্ষর পড়ে থাকে তবে এটি "আকর্ষণীয়" না হলে অগ্রসর হয়, তারপরে তারা আরও কয়েকটা পড়েন। সংকলক ত্রুটি: বেশিরভাগ সময় আমি সংকলক ত্রুটিটিকে "লাইন <x> সহ সমস্যা" হিসাবে ব্যাখ্যা করি। কেবলমাত্র যদি আমি তা করতে পারি; তাত্ক্ষণিকভাবে (বিরল) কাজ করা না হয়, তাই আমি আসলে ত্রুটিটি পড়ি।
mattnz

19

প্রতি লাইনে একটি বিবৃতি পাশাপাশি-পাশের পার্থক্যে কী পরিবর্তন হয়েছে তা দেখতে আরও সহজ করে তোলে।


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

@ অ্যানন পাশাপাশি মার্জ সরঞ্জাম সম্পর্কে ভাল পয়েন্ট; প্রতি লাইনে একটি স্টেটমেন্টের অর্থ পরিষ্কার করতে কম সংহত বিবাদগুলি।
হুগো

10

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

আপনার স্ট্যাক ট্রেস "EBLA এ লাইন এন" বলবে ... এবং এখন আপনি জানেন না যে এই পাঁচটি বিবৃতিতে কোনটি ব্যতিক্রম ছুঁড়ে দিয়েছে।

(যে কোনও ধরণের অত্যধিক দীর্ঘ বিবৃতি দিয়ে একই জিনিস ঘটে))


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

2
ওহ হ্যাঁ, এটি সমস্যা হতে পারে। একটি "প্রিয়" হ'ল আপনি যখন কোনও foo.bar[grill.boo].flip.flap[flop].mickey(minnie).marshmallowজাভা (সি / সি # সিনট্যাক্স) জাতীয় শূন্য পয়েন্টারটি আলগা করে পান । এই ধরণের গণ্ডগোলের মাধ্যমে বাছাই করা অতিরিক্ত লাইনগুলির সাথে (এবং অস্থায়ী ভেরিয়েবলগুলি ... এবং মূল বিকাশকারীটির জন্য 2D6 ইট অফ ক্লু) দিয়ে সর্বদা ভাল।
ডোনাল ফেলো

7

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

এই কারণে বিরল পরিস্থিতিতে বাদে আমি এর বিরুদ্ধে পরামর্শ দিচ্ছি।


4

আমি সর্বশেষে এটি 25 বছর আগে কম ঘড়ির গতিতে চলমান ছোট মাইক্রোগুলিতে ব্যাখ্যামূলক ভাষাগুলি ব্যবহার করে করেছি, যেখানে প্রতিটি স্থান বা ক্যারেজের রিটার্ন নির্মূল করা কর্মক্ষমতা বাড়িয়েছে।

আমি এখন এটি ভাবতে ভাবছিলাম (যদিও এটি একটি ভাল কারণে করা হয়েছিল)।

দুর্ভাগ্যক্রমে এই জাতীয় কোড পড়া কঠিন, এবং এইভাবে বজায় রাখা কঠিন।


1
সুতরাং আপনি এটিকে সঠিকভাবে লিখুন, তারপরে আপনার "মেশিন অনুলিপি" এর জন্য সাদা স্থান এবং অন্য কোনও প্রস্তুতি ফেলা করুন। ঠিক আজকাল জাভাস্ক্রিপ্ট মিনিফাইনের মতো।
ক্যাফগেক

1
হ্যাঁ - আমিও এর মতো সোর্স কোডটি পুনরায় প্রসেস করার জন্য একটি প্রোগ্রাম লিখেছিলাম - 1986 সালে।
দ্রুত_আগস্ট

1

কৃত্রিমভাবে, এটিতে আসলে কোনও ভুল নেই। এটি সত্যই আপনার দলের কোডিং শৈলীর উপর নির্ভর করে।

আমি যে বেশিরভাগ কোড দেখেছি (স্ট্যান্ডার্ড সি ++ শিরোনামের মধ্যে থাকা কোড সহ) এইভাবে সম্পন্ন হয়েছে, আমি আপনার প্রথম পদ্ধতিটি নিয়ে যাব।

textBox1.Text = "Something!";
textBox2.Text = "Another thing!";
textBox3.Text = "Yet another thing!";

0

এটি সত্যিই অস্বাভাবিক কোডিং শৈলী।

পরিবর্তে কোডের লজিকাল অংশগুলি ডিলিমেট করতে আপনাকে খালি লাইনগুলি ব্যবহার করার পরামর্শ দিচ্ছি would


0

ডানদিকে খুব দূরে যেতে একাধিক লাইনের মতোই সমস্যা তৈরি করতে পারে।

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

আমি এই কোডটিতে ফিরে আসার জন্য আফসোস করছি। অতিরিক্ত সারি থাকার কারণে এতটা সমস্যা তৈরি হয় বলে মনে হয় না তাই আমি সাধারণত এটি পরিষ্কার করি।


0

এছাড়াও, আপনি কি মনে করেন যে আমার কোডটি বজায় রাখতে হবে এমন কারও এই পদ্ধতির সাথে সমস্যা আছে?

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

আপনি যে উদাহরণটি দেখিয়েছেন কেবল তার মধ্যে একটি তাত্ক্ষণিক দৃষ্টিভঙ্গি দ্বিতীয় পদ্ধতির আরও কতটা পাঠযোগ্য able

আপনার চোখ চিরতরে অনুভূমিকভাবে সরানো না রেখে উল্লম্ব পৃষ্ঠ প্রবাহ অনুসরণ করা অনেক সহজ।

আপনার উদাহরণটি দেখুন: আপনি তাত্ক্ষণিকভাবেই জানেন কোডটি সমস্ত Textভিন্ন ভিন্ন textBoxবস্তুর সম্পত্তি সম্পর্কে এবং সেগুলিতে মান হিসাবে স্ট্রিং থাকে। অনেকটাই অকপট.


0

আমি ব্যক্তিগতভাবে এই জাতীয় শৈলী ব্যবহার করব না। সংক্ষেপ

পেশাদাররা

  • কম লাইন কোডের মাধ্যমে স্ক্রোল
  • শব্দার্থকভাবে গ্রুপ কোডে প্রকাশ করতে ব্যবহার করা যেতে পারে: "অনেক কাজ বরাদ্দ"। তবে আপনি যদি খুব বেশি বিরক্ত হন তবে আপনি এই জাতীয় ব্লকটিকে সবসময় কোনও ফাংশনে রিফ্যাক্টর করতে পারেন।

কনস

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

কিছু "কনস" বিভিন্ন সময়ে উপকারও পেতে পারে। উদাহরণস্বরূপ, ধরুন কোনও টুকরা কোডটিতে ফর্মটির টানা আটটি ক্রিয়াকলাপ রয়েছে if (x > maxX) {x=maxX; peggedAny = true;}। যদি এই জাতীয় প্রতিটি ক্রিয়াকলাপ কোনও একক লাইনে সহজেই ফিট হয়ে যায়, তবে আমার কাছে তার চেয়ে আটটি লাইন থাকবে যা বিবৃতি বিভক্ত করে এমন কয়েক ডজন লাইন। যদি এই ধরনের তুলনাগুলি পর্যাপ্ত জায়গায় ব্যবহার করা হয় তবে ফর্মটির চারটি বিবৃতি peggedAny |= pegValueMinMax(ref x, minX, maxX);ভাল হতে পারে তবে যে কেউ এটি পড়ছে pegValueMinMaxতা কী করে তা পড়তে হবে।
সুপারক্যাট

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