জোরপূর্বক কোড পুনর্নির্মাণের সুবিধা এবং অসুবিধা


19

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


জেএসপি অটো-ফরম্যাট? এর মধ্যে এইচটিএমএল / এক্সএমএল কোড এবং পুনরায় ফর্ম্যাটিং রয়েছে যা ফলস্বরূপ আউটপুটটিকে খুব সহজেই ভেঙে / বদলে দিতে পারে।
এডিএ-কিএ মার্ট-ওরা-ই

উত্তর:


23

আমি মনে করি এটি করা খুব গুরুত্বপূর্ণ। কারণটা এখানে:

  • এটি আপনার উত্স নিয়ন্ত্রণের ডিফারেন্সকে কেবল আসল কোড পরিবর্তনগুলি দেখায় এবং সাদা অংশ এবং অন্যান্য তুচ্ছ ফর্ম্যাটিং পছন্দগুলির কারণে সমস্ত "ডিফ শব্দ" মুছে দেয় all
  • এটি সমস্ত কোডকে আরও অনুরূপ করে তোলে, যাতে ডিভস কোডের ভিত্তিগুলি জোড়া এবং ভাগ করে নিতে আরও স্বাচ্ছন্দ্য বোধ করে

যদি আপনি এটি করেন, আমি সবাইকে সমস্ত কোড চেক করার পরামর্শ দেব, তারপরে একজন ব্যক্তি পুরো কোড বেসের উপরে একটি পুনরায় ফর্ম্যাট করেন, তারপরে সমস্তটি পরীক্ষা করে দেখুন যাতে ফর্ম্যাটের জন্য একটি "দৈত্য" পরিবর্তন সেট রয়েছে (যে প্রত্যেকে উপেক্ষা করতে পারে), তবে এর পরে, সমস্ত ডিফগুলি হ'ল আসল কোড ডিফগুলি।

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


1
বিশ্বব্যাপী পরিবর্তনে বুলেট কামড়ানো সত্যিই সর্বোত্তম উপায়, আমি সম্মত; এটি সম্পন্ন করুন এবং এর জন্য আর কাউকে চিন্তার দরকার নেই।
প্যাট্রিক হিউজ

... যতক্ষণ না আপনি আপনার স্টাইলের কনভেনশন পরিবর্তন করেন।
Nerdfest

1
@ নেটড ফেস্ট তারপরে আপনি আপনার নতুন প্রকল্পটি আপনার সমস্ত প্রকল্পে একক প্রতিশ্রুতিতে প্রয়োগ করবেন। এটি কোনও বড় কথা নয়।
গ্যাজেট

2
আপনার "ডিফ" টুল ধরণের ধোন চুষে রাখে যদি এটি সাদা স্থানের পরিবর্তনগুলি সঠিকভাবে পরিচালনা করতে না পারে।
এডিএ-কিএ মর্ট-ওরা-y

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

10

আমি এখানে নিজের উত্তরটি টস করতে যাচ্ছি কারণ লোকেরা কেবল সুবিধা যুক্ত করছে বলে মনে হচ্ছে। অসুবিধাগুলি হিসাবে আমি যা দেখছি তা হ'ল:

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

সহজ কথায়, একটি অ-স্বয়ংক্রিয় কনভেনশনের সেট ন্যূনতম শৈলী / পঠনযোগ্যতা প্রয়োজনীয়তা সেট করে, যেখানে স্বয়ংক্রিয় সম্মেলনগুলি সর্বনিম্ন এবং সর্বাধিক সেট করে।

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


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

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

1
অপরিশোধিত দুর্যোগ সহ্য করার চেয়ে সময়টির 99.9% ধারাবাহিক ফর্ম্যাট থাকা এবং আপনি ব্যক্তিগতভাবে পছন্দ না করে এমন বিজোড় বিটটি বজায় রাখা আরও ভাল। আমি সম্ভবত নির্ভর করে যে দলটি কতটা শৃঙ্খলাবদ্ধ সেখানেই ভারসাম্য রয়েছে। যদি আপনি কোনও ভাষার জন্য প্রতিষ্ঠিত নিয়মগুলিকে অবিচল থাকেন তবে সমস্ত শালীন সম্পাদক / আইডিই সেভাবে গঠন করতে সক্ষম হবেন। আপনি যদি নিয়মগুলি থেকে সরানোর জন্য জিদ করেন তবে আপনার সমস্যা হবে।
mattnz

3

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


3

প্রাথমিক অসুবিধাটি কাস্টম ফর্ম্যাটিং হারাচ্ছে যেখানে এটি সত্যই গুরুত্বপূর্ণ।

() যদি কোনও নির্দিষ্ট শর্ত উপস্থিত থাকলেও তা পূরণ না হয় তবে একটি সাধারণ বিচক্ষণতা যাচাইয়ের কল্পনা করুন ...

  if(
      (user.id == TEST_ID)
    ||(
         (user.id == UserID)
       &&( 
             ( user.type == HUMAN_USER && user.name.size() >= MIN_NAME )
           ||( user.type == EMULATION && input.source != SOURCE_INTERNAL ))
       && ( user.email == NULL || emailValidator.isValid(user.email))
       && ( (user.phone == NULL) == (user.type == EMULATION) )

       // several more lines like this.)
    ){ /* handle results */ }

শর্তগুলির যৌক্তিক কাঠামো অনুসরণ করে যুক্তিসঙ্গত ইনডেন্টিংয়ের জন্য এটি পঠনযোগ্য ধন্যবাদ।

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


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

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

2

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

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

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


0

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

এই ক্ষেত্রে বিবেচনা করুন:

if( x == 0 ) 
   return foo;
//do something else
return bar;

আপনি যদি এখন কিছু ক্ষেত্রে লগিং যুক্ত করতে চান তবে আপনি যদি স্বতন্ত্রভাবে লিখতে পারেন:

if( x == 0 ) 
  log.info("x was 0");
  return foo;
//do something else
return bar;

এবং সযত্নে আপনার পদ্ধতি সর্বদা ফিরে আসে foo

সম্পাদনা করুন: এটি স্বয়ংক্রিয় বিন্যাসে নয় বরং স্টাইল পরীক্ষায়। দুঃখিত যদি উত্তরটি বিষয়টিও বন্ধ ছিল। :)


এটি কোনও কোড শৈলীর জিনিস, বিন্যাসের জিনিস নয়। তার জন্য বিল্ড সরঞ্জাম রয়েছে।

@ বোহেমিয়ান, আপনি ঠিক বলেছেন, আমি প্রশ্নটি ভুলভাবে লিখেছি। আমাদের পছন্দের বিল্ড টুল চেকস্টাইল বিটিডব্লিউ। :)
টমাস

0

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


0

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


0

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

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