কার্যকর কোডগুলিতে ক্লিন কোডের নীতি প্রয়োগ করা to


16

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

[ডাব্লু] আমি প্রোগ্রামটি এমনভাবে পড়তে সক্ষম হতে চাই যেহেতু এটি একটি অনুচ্ছেদের একটি সেট ছিল, যার প্রতিটিই বিমূর্ততার বর্তমান স্তরকে বর্ণনা করছে এবং পরবর্তী স্তরে পরবর্তী স্তরের অনুচ্ছেদে রেফারেন্স করছে।

( ক্লিন কোড , পৃষ্ঠা 37: একটি "টু অনুচ্ছেদ" একটি অনুচ্ছেদ যা ইনফিনিটিভ কণ্ঠে বলা একটি বাক্য দিয়ে শুরু হয় "" এক্স করতে, আমরা Y এবং Z পদক্ষেপগুলি সম্পাদন করি "" "Y করার জন্য, আমরা ..." ইত্যাদি) etc. ) উদাহরণ স্বরূপ:

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

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

হাস্কেল স্ট্যান্ডার্ড লাইব্রেরি থেকে একটি উদাহরণ গ্রহণ করা :

maximumBy               :: (a -> a -> Ordering) -> [a] -> a
maximumBy _ []          =  error "List.maximumBy: empty list"
maximumBy cmp xs        =  foldl1 maxBy xs
                        where
                           maxBy x y = case cmp x y of
                                       GT -> x
                                       _  -> y

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

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


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

অজ্ঞতা ক্ষমা করুন, তবে একটি অনুচ্ছেদে কী?
শশাঙ্ক গুপ্ত

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

@ শশাঙ্কগুপ্ত আমি বইয়ের নির্দিষ্ট পৃষ্ঠার লিঙ্কের পাশাপাশি চাচা বব কী লিখেছেন তার নিজের বোঝার সাথে প্রশ্নটি সম্পাদনা করেছি।

@ শশাঙ্ক গুপ্ত তিনি কয়েকটি উদাহরণ দিয়েছেন তবে ধারণাটি হ'ল এটি গদ্যের মতো পড়া উচিত। "তালিকার সর্বাধিক সন্ধান করতে আপনি প্রতিটি উপাদান পরীক্ষা করে দেখুন ..."
প্যাট্রিক কলিন্স

উত্তর:


11

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

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

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


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

আমি মার্টিনের ক্লিন কোড বইটি স্টাইল ম্যানুয়াল হিসাবে ভাবি না। আমি মনে করি বইয়ের শিক্ষাগুলি কোনও স্টাইল গাইড এবং ডিজাইনের নিদর্শনগুলির মধ্যে কোথাও ফিট রয়েছে।
মাইকেল আর

15

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

বব মার্টিনের "টু অনুচ্ছেদ" ফর্ম্যাটে প্রকাশিত, আমি আপনার উদাহরণটি পড়লাম:

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

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

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

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

প্রকৃতপক্ষে, আমি মনে করি যে অনুচ্ছেদের বিন্যাসের জন্য বাস্তবের মতো whereনির্মাণগুলি আরও উপযুক্ত because "অনুচ্ছেদে" প্রসঙ্গে পরিষ্কার উপায় way

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