কোনও গণনার প্রতিনিধিত্ব করে লম্বা কোড পড়া কি আরও সহজ?


9

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

এই ধরনের হার্ড-টু-পঠিত কোডকে কী খারাপ কোড বলে মনে করা হয়? একইভাবে, যদি আমি একটি জটিল অ্যালগরিদমের জন্য কোড লিখি, যার ফলে পরিষ্কার-নামযুক্ত পদ্ধতিতে মোড়ানো হার্ড-টু-রিড কোড হয়, তবে সে কোডটি কি খারাপ কোড?


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

আপনার ওআরএম কি মতামত সমর্থন করে? আপনি একটি ভিউতে যোগ দিতে একটি (গোষ্ঠীর )টি বের করতে পারেন এবং তারপরে দৃশ্যটি নির্বাচন করতে পারেন। এমনকি যদি ভিউটি অন্য কোথাও ব্যবহার না করা হয় তবে এটি একটি বড় এসকিউএল বিবৃতি
ছিন্ন

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

উত্তর:


17

তুমি লিখেছিলে

যেমন হার্ড-টু-পঠিত কোডটিকে খারাপ কোড বলে মনে করা হয়

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

  • কোড সাফ করার ক্ষেত্রে আপনার চেয়ে অভিজ্ঞ যে অন্য কেউ কোডটি দেখান। আপনার সংস্থায় যদি আপনার কাছে কেউ না থাকে তবে আপনি জিজ্ঞাসা করতে পারেন, কোডেরভিউ.স্ট্যাকেক্সেঞ্জিং চেষ্টা করুন

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

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

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


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

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

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

4

পড়া শক্ত হয় না - অযথা পড়া খুব খারাপ হয়।

কিছু জিনিস ঠিক হয় কঠিন। সেক্ষেত্রে আপনার সমস্যাটি পুরোপুরি বুঝতে হবে, কোডটি লিখতে হবে এবং যথাসম্ভব এটিকে মন্তব্য করতে হবে যাতে পরবর্তী বিকাশকারীর সুযোগ থাকে।

তবে কিছু জিনিস কেবলমাত্র কঠিন কারণ আপনি এগুলি কঠিন করেছেন। যদি সমস্যাটি সহজতর করা যায় এবং সহজ করা যায় তবে এটিকে সহজ করুন। যদি এটি বুঝতে অসুবিধা হয় তবে যথাযথভাবে সাব-প্রবলেমগুলিতে বিভক্ত করা যায়, তবে এটিকে সহজ করার জন্য এটি সাব-প্রবলেমে বিভক্ত করুন।


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

1

ওআরএম একটি প্রতিবেদন তৈরি করবেন? সিরিয়াসলি? কিছু এসকিউএল শিখুন, মানুষ। এই পদ্ধতিতে পদ্ধতিগত ভাষাগুলি ভয়ানক।

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

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


2
সত্যি বলতে কী, আপনি ওআরএম পছন্দ করেন না তা এই প্রশ্নের জন্য সম্পূর্ণ অপ্রাসঙ্গিক।
ডক ব্রাউন

আমি ORMs ঠিক আছে। আমি উল্লেখ করছি যে কোডগুলি "একাধিক কলামে যোগদান করে, একাধিক চাকা প্রয়োগ করে এবং প্রয়োজনীয় ডকুমেন্টেড আউটপুট ফর্ম্যাট তৈরি করতে একাধিক স্বতন্ত্র কলাম নির্বাচন করে," যা এই থ্রেডের বিষয়।
জন উ

0

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

আপনার যদি একটি একক প্রশ্নের মধ্যে অনেক কিছু করার দরকার হয় তবে এম্বেড করা মন্তব্যে এটি লাইন জুড়ে বিভক্ত করার চেষ্টা করুন:

query(join(map(condition1, condition2), blah, blah, something(bah, blah, blah))) 

হয়ে:

// Why are we doing such an awful single query rather than a sequence of selects?
query( // Description of query
  join( // Why are you doing a join here
    map( // Why a map
      condition1, // What is this
      condition2  // And this
   ), // End Map
   blah, // What, Why?
   blah, // What, Why?
   something( // What does this do?
      bah, // What, Why?
      blah, // What, Why?
      blah // What, Why?
      ) // End Something
   ) // End Join
) // End Query

আমি আপনার উদাহরণ সম্পর্কে অস্পষ্ট। মন্তব্যে কোডটি কেন এটির মতো তা ব্যাখ্যা করা উচিত । কি শনাক্তকারী দ্বারা প্রকাশ করা উচিত ...
টিমোথি চক্রযুক্ত

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

0

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

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

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

পরবর্তী জিনিসটি নিশ্চিত করা হয় যে আপনার পদ্ধতিটি কেবলমাত্র একটি কাজ করে - পার্শ্ব প্রতিক্রিয়াগুলি কোড বোঝা শক্ত করে তোলে। সুতরাং যদি আপনার পদ্ধতি কোনও আউটপুট ফর্ম্যাটের জন্য ডেটা ফেরত দেয় তবে এটি আপনার ডাটাবেসের স্থিতিকে "মুদ্রিত" বা যে কোনও কিছুতে আপডেট করা উচিত নয়।

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

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