কোডিং শৈলী নীতিমালা কোন বৈজ্ঞানিকভাবে কঠোর অধ্যয়ন আছে? [বন্ধ]


25

একটি কোডিং শৈলী নীতি - যেমন একক প্রস্থান নীতি - সত্যিই একটি ভাল জিনিস? সবসময়, নাকি ঠিক মাঝে মাঝে? এটি কতটা পার্থক্য করে?

আপনার মতামত যাই হোক না কেন এগুলি স্পষ্টতই বিষয়গত প্রশ্ন are তারা নাকি?

কেউ কোডিং শৈলী নীতিগুলির একটি বৈজ্ঞানিকভাবে কঠোর অধ্যয়ন করার চেষ্টা করেছেন?

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


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

এটি ভাষার উপর খুব বেশি নির্ভর করে কিছু নীতি নির্দিষ্ট ভাষাগুলিতে প্রয়োগ হয় অন্যদের নয়। উদাহরণস্বরূপ single-exit principleRAII এর কারণে C ++ এ সত্যই প্রযোজ্য নয়
মার্টিন ইয়র্ক


@ লোকি - আমাকে সে সম্পর্কে ভাবতে হবে, এবং আমি নিশ্চিত নই যে আমি একমত। এটি সত্য যে ব্যতিক্রমগুলি মোকাবেলায় RAII বড় অংশে নকশা করা হয়েছিল, যা বিকল্প প্রস্থান পয়েন্টস, তবে (কমপক্ষে কিছু লোকের কাছে) তারা বিকল্প বিকল্প প্রস্থান পয়েন্ট হিসাবে গণনা করে - যেভাবে একক বহির্গমন নীতির বিরুদ্ধে গণনা করা যায় না break, gotoবা returnনা। আইডাব্লু একক প্রস্থান সি ++ এ নিরঙ্কুশ নয় তবে এটি সি এবং বেশিরভাগ অন্যান্য ভাষায় এটি সম্পর্কে আমার দৃষ্টিভঙ্গি। তবে এটি এখনও কঠোর অর্থে প্রাসঙ্গিক।
স্টিভ 314

1
@ স্টিভ 314, নিবন্ধটি কমপক্ষে দূরেরভাবে প্রাসঙ্গিক - এটি এই জাতীয় পরীক্ষার একটি পদ্ধতির জন্য একটি নকশার রূপরেখা তৈরি করে, যা এই অঞ্চলে সঠিকভাবে লিপিবদ্ধ পরীক্ষামূলক প্রমাণের অভাবের কারণে যথেষ্ট গুরুত্বপূর্ণ।
এসকে-যুক্তি

উত্তর:


11

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


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

আমি এই বইটি পড়িনি, এবং সম্ভবত আমারও হওয়া উচিত, তবে - gnats উত্তরের মন্তব্যের ভিত্তিতে - এইগুলি উল্লেখ করা কাগজগুলি কি বৈজ্ঞানিকভাবে কঠোর এবং উদ্দেশ্যমূলক? উত্তরটি "তারা যতটা পারে" যদি হয় তবে কী আপস করা দরকার ছিল? আমি যেমন প্রশ্নে পরামর্শ দিয়েছিলাম, ডাবল-ব্লাইন্ডকে কিছুটা দুর্বল স্ট্যান্ডার্ডের সাথে প্রতিস্থাপন করা দরকার ছিল?
স্টিভ 314

@ স্টিভ 314: আমি জানি না, আমি সূত্রগুলি পরীক্ষা করে দেখিনি! তবে সেরা অনুশীলন প্রতিষ্ঠার জন্য আপনার সর্বদা বৈজ্ঞানিক অনমনীয়তার প্রয়োজন হয় না। কল্যাণকর বিষয়গুলি নিয়ে আলোচনা কখনও কখনও যথেষ্ট।
এম ডুডলি

@ এমডিডুডলি - একেবারে সত্য, তবে এই প্রশ্নটি আসলে কী তা নয়।
স্টিভ 314

@ স্টিভ 314: কোড সম্পূর্ণ আপনার জন্য একটি দুর্দান্ত সূচনা হবে এবং আমি বিশ্বাস করি যে এর কয়েকটি উল্লেখ কোডিং শৈলীর বৈজ্ঞানিক বিশ্লেষণের বিষয়টি বিবেচনা করবে।
এম ডুডলি

12

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

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

এটি খুব সাধারণ QWERTY টাইপিং লেআউটের সাথে ঠিক একই - এটি প্রমাণ করা খুব সহজ যে এটি আর্গনোমের দিক থেকে বেশ suboptimal (আপনি কি মনে করেন যে TYPEWRITER শব্দের সমস্ত অক্ষরকে আমাদের নিত্য সুবিধার কথা বিবেচনা করে উপরের সারিতে রাখা হয়েছিল?) ।

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

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


1
শীতল, আমি
কোলেমাক এর

1
@ চ্যাড এমনকি কম পরিচিত কারপাল এক্স, যা আমি কিছুক্ষণের জন্য বললাম। আমি এটি কোলেমাকের চেয়ে সুন্দর দেখতে পেয়েছি (আমি কার্পলেক্সের সাথে 90-100 ডাব্লুপিএম পৌঁছেছি)। এমনকি যদি আপনি কোনও বহিরাগত বিন্যাসে স্যুইচ করতে চান না, তবুও কারপ্লেক্স ওয়েবসাইট কীবোর্ড লেআউটগুলি মূল্যায়ন ও অনুকূলিতকরণ এবং এই বিভাগের সমস্যার জন্য জেনেটিক অ্যালগরিদমগুলি ব্যবহার করে একটি অত্যন্ত আকর্ষণীয় পাঠ করে। Mkweb.bcgsc.ca/carpalx
Konrad

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

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

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

4

উত্তর একটি নির্দিষ্ট কোন! `ব্রেক` এবং `চালিয়ে যাওয়া programming খারাপ প্রোগ্রামিং অনুশীলনগুলি কি? এই প্রশ্নের একটি উপসেট, তাই আমি এর সবেমাত্র পরিবর্তিত উত্তর দিয়ে শুরু করতে যাচ্ছি ...

আপনি বিরতি বিবৃতি ছাড়াই প্রোগ্রামগুলি [পুনরায়] লিখতে পারেন (বা লুপগুলির মধ্য থেকে ফিরে আসেন যা একই কাজ করে)। তবে এটি করার জন্য আপনাকে অতিরিক্ত ভেরিয়েবল এবং / অথবা কোড ডুপ্লিকেশন উভয়ই প্রবর্তন করতে হতে পারে যা সাধারণত প্রোগ্রামটিকে বোঝা শক্ত করে তোলে। পাস্কাল (১৯60০ সালের শেষের দিকে প্রোগ্রামিং ল্যাঙ্গুয়েজ) বিশেষত সেই কারণেই শিক্ষানবিশ প্রোগ্রামারদের পক্ষে খুব খারাপ ছিল।

কোসারাজুর নিয়ন্ত্রণ কাঠামোগত শ্রেণিবিন্যাস নামে পরিচিত একটি কম্পিউটার বিজ্ঞানের ফলাফল রয়েছে, যা ১৯3৩ সাল থেকে আসে এবং যা নথের (আরও) বিখ্যাত গবেষণাপত্রের স্ট্রাকচার্ড প্রোগ্রামিংয়ে উল্লেখ করা হয়েছে ১৯ 197৪ সালের বিবৃতিতে । এস। রাও কোসারাজু ১৯ 197৩ সালে যা প্রমাণ করেছিলেন তা হচ্ছে তা নয় অতিরিক্ত ভেরিয়েবল প্রবর্তন না করে এন থেকে কম বিরতি গভীরতার প্রোগ্রামগুলিতে গভীরতার এন -এর বহু-স্তরের বিরতি রয়েছে এমন সমস্ত প্রোগ্রামের পুনর্লিখন সম্ভব । তবে আসুন আমরা এটি খাঁটি তাত্ত্বিক ফলাফল বলি। (কেবল কয়েকটি অতিরিক্ত ভেরিয়েবল যুক্ত করুন?! স্ট্যাকেক্সচেঞ্জে 3 কে + ব্যবহারকারীদের সাথে এনগ্রুপ মনে করার জন্য আপনি এটি করতে পারেন ...)

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

আমি এখনও একটি একক ব্যক্তি খুঁজে পেয়েছি যিনি [এই শৈলী] ব্যবহার করে একটি প্রোগ্রাম চেষ্টা করেছিলেন যিনি একটি ভুল সমাধান তৈরি করেছেন।

রবার্টস আরও বলেছেন:

লুপ থেকে সুস্পষ্ট রিটার্ন ব্যবহার না করেই সমস্যার সমাধানের চেষ্টা করা শিক্ষার্থীরা খুব কম ভাল ফল করেছে: এই কৌশলটি চেষ্টা করে 42 শিক্ষার্থীর মধ্যে মাত্র সাতটি সঠিক সমাধান উত্পন্ন করতে সক্ষম হয়েছিল। এই চিত্রটি 20% এরও কম সাফল্যের হার উপস্থাপন করে।

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

এবং এখানে রিটার্ন / ব্রেক-টাইপ স্টেটমেন্ট ছাড়াও আরও একটি বড় সমস্যা রয়েছে, সুতরাং বিরতি সম্পর্কে এই প্রশ্নটি কিছুটা বিস্তৃত। ব্যতিক্রম হ্যান্ডলিং পদ্ধতিগুলি কারও কারও মতে একক বহির্গমন পয়েন্টের দৃষ্টান্ত লঙ্ঘন করছে

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

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


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

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

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

1
@ স্টিভ 314 " যুক্তিযুক্ত ডুপ্লিকেট দ্বারা হ্রাস করা যেতে পারে ডুপ্লিকেট কোডটি ফাংশন হিসাবে ফাংশন করে " ফাংশনটির লজিকের অবিলম্বে দেখা অংশের বাইরে রাখা, এমন একটি অংশ যা কোনও অর্থই বিচ্ছিন্ন করে না। এটি আরও শক্ত করে ফাংশনটির যুক্তি বোঝা।
কৌতূহলী

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

1

http://dl.acm.org/citation.cfm?id=1241526

http://www.springerlink.com/content/n82qpt83n8735l7t/

http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=661092

[আপনার প্রশ্নের উত্তরগুলি একক শব্দ দ্বারা "হ্যাঁ" বলে মনে হচ্ছে। তবে আমাকে বলা হয়েছে যে সংক্ষিপ্ত উত্তর প্রদান করা হচ্ছে প্রশ্নের "বরখাস্ত"। আপনি যদি মনে করেন আমি বরখাস্ত হয়েছি তবে দয়া করে উত্তরের উত্তরটি ফ্ল্যাগ করুন যাতে কোনও মডারেটর এটি মুছতে পারে]]


1
@ luis.espinal: কি শেষ? পাঠ্যটিতে কী তথ্য থাকবে? প্রশ্নটি কিছুটা ঘোরাঘুরি করে। প্রশ্নের কোন অংশটি কিছু পাঠ্য দিয়ে সম্বোধন করা উচিত?
এস .লট

1
শৈলীর বিষয় হিসাবে এবং সম্ভবত লিঙ্কগুলির অ্যাবস্ট্রাক্টগুলি সরবরাহ করতে পারে এমন আরও তথ্য সরবরাহ করতে (এই বিষয়টি বিবেচনা করে আমরা জানি না যে ওপি সম্পূর্ণ নিবন্ধগুলিতে অ্যাক্সেস সহ কোনও পেমেন্ট এসিএম / আইইইই / স্প্রঞ্জার ভার্লাগ সদস্য কিনা এবং এর উত্তরগুলি খুঁজে পেতে পারে) উদাহরণস্বরূপ, এসিএম নিবন্ধ বিমূর্তে কোডিং শৈলীর কোনও উল্লেখ নেই। বেশিরভাগ ক্ষেত্রে এটি স্ট্রাকচার্ড প্রোগ্রামের উপপাদ্য (যা নিজেই একক বা একাধিক রিটার্ন সমস্যা সম্পর্কে কথা বলে না) সংশ্লেষ করার বিষয়ে কথা বলে। সুতরাং আপনি যে লিঙ্কটি প্রাসঙ্গিক তা ব্যাখ্যা করতে পারতেন।
luis.espinal

1
তৃতীয় নিবন্ধ (ধন্যবাদ আমি আইইইই এক্সপ্লোরার অ্যাক্সেস পেয়েছি) ওপি যতদূর বলতে পারে আমি যা জিজ্ঞাসা করতে চাইছে তার সাথে সম্পর্কিত বলে মনে হচ্ছে না। আপনার মনে মনে এটি একটি দুর্দান্ত নিবন্ধ, যা পরবর্তী সময়ে আরও নিবেদিত পড়ার জন্য প্রিন্ট করছি। সুতরাং সম্ভবত আপনিও ব্যাখ্যা করতে পারতেন যে এই নিবন্ধটি ওপিকে তার প্রশ্নের উত্তর দিতে সহায়তা করে। সামগ্রিকভাবে, মনে হচ্ছে আপনি একসাথে লিঙ্কগুলির একগুচ্ছ ছুঁড়ে দিয়েছেন। এটি বরখাস্ত করার পদ্ধতি নয় (যদি না এটি ছিল আপনার উদ্দেশ্য) তবে আবার ও, ওপিকে কীভাবে সহায়তা করেছিল তা আমি দেখতে ব্যর্থ হয়েছি। এবং এই কারণেই কোনও পোস্টারকে তার লিঙ্কগুলির সাথে কিছু পাঠ্য যুক্ত করা উচিত। সুতরাং এখন আপনি জানেন যে আমি এটি কেন বলেছি;)
luis.espinal

1
ওপির মুখ থেকে Is a coding style principle - e.g. the single-exit principle - really a good thing?- কোডিং শৈলীর বিষয়ে যে প্রশ্নটি তিনি উত্থাপন করছেন তার প্রসঙ্গ দেয়। তদুপরি, কোডিং স্টাইলটি প্রোগ্রামিং পদ্ধতির মতো নয়, বিশেষ করে উচ্চ-স্তরের নকশা পদ্ধতিগুলি যা আইইইই নিবন্ধের ফোকাস (লেখকরা স্পষ্টভাবে বিবৃত করেছেন।) সে কারণেই আমি "না" বলি - স্কোপগুলি সম্পূর্ণ আলাদা।
luis.espinal

1
আমার সন্দেহ হয় ওপি কোথা থেকে আসছে। তিনি স্পষ্টভাবে কোডিং শৈলীগুলি উল্লেখ করছেন (পদ্ধতি নয়) এবং বিশেষত একক বনাম একাধিক আয়। একাধিক রিটার্নের স্টেটমেন্ট ব্যবহার করে একাধিক রিটার্ন স্টেটমেন্ট ব্যবহার করে একাধিক রিটার্ন স্টেটমেন্ট দিয়ে আবার সংশ্লেষিত সংস্করণগুলিতে পুনর্লিখন করা (বিশেষত বড় বড় সংস্থাগুলিতে লাল-টেপে বড় আকারে) ব্যবহার করে আমি বেশ কয়েকবার এর সাথে লড়াই করতে হয়েছিল as "প্রক্রিয়া" প্রতি। এবং একটি বিস্ময়কর (এবং প্রমাণ সহ চ্যালেঞ্জ) যেমন স্বেচ্ছাসেবী আদেশের বৈধতা, ব্যবহারযোগ্যতা এবং ব্যয় কার্যকারিতা। এই জাতীয় আদেশ জোর করে এমন লোকেরা এখনও 60 এর দশকে বেঁচে থাকে: /
luis.espinal

1

একটি কোডিং শৈলী নীতি - যেমন একক প্রস্থান নীতি

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

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

আমার বাকী উত্তর সম্পর্কে, এটি সমস্ত আপেক্ষিক (সফ্টওয়্যারটিতে কী নেই?):

  • সত্যিই একটি ভাল জিনিস?

হ্যাঁ। প্রান্তের কেস এবং ভাষা-নির্দিষ্ট প্রোগ্রামিং কন্সট্রাক্টস সম্পর্কিত নির্দিষ্ট ক্যাভ্যাট সহ সাধারণ ক্ষেত্রে বেশিরভাগ সময়।

সবসময়, নাকি ঠিক মাঝে মাঝে?

অধিকাংশ সময়.

এটি কতটা পার্থক্য করে?

নির্ভর করে।

পাঠযোগ্য কোড বনাম অপঠনযোগ্য কোড। জটিলতা বৃদ্ধি (যা এখনই আমাদের জানা উচিত ত্রুটিগুলি প্রবর্তনের সম্ভাবনা বৃদ্ধি করে) বনাম সহজ জটিলতা (এবং ত্রুটিগুলির ছোট সম্ভাবনা।) যার সংকলকগুলি অন্তর্নিহিত রিটার্ন যুক্ত করে না (যেমন, পাস্কাল, জাভা বা সি #) এবং সেগুলি ডিফল্ট ইন ইন (সি এবং সি ++)।

শেষ পর্যন্ত, এটি কোনও কীবোর্ডের পিছনে পুরুষ / ঘন্টা দিয়ে সম্মানিত একটি দক্ষতা। কখনও কখনও, একাধিক রিটার্ন স্টেটমেন্ট যেমন ঠিক আছে (ঠিক তেমনি কিছু পাস্কালেসেক সিউডোকোডে) রাখা ভাল:

function foo() : someType
  begin
  if( test1 == true )
  then
    return x;
  end
  doSomethignElseThatShouldnHappenIfTest1IsTrue();
  return somethingElse();
end;

উদ্দেশ্যটি স্পষ্ট, এবং অ্যালগরিদম যথেষ্ট ছোট এবং যথেষ্ট জটিল নয় যে এটি একটি 'পতাকা' ভেরিয়েবল তৈরির নিশ্চয়তা দেয় না যা একক রিটার্ন পয়েন্টে ব্যবহৃত পরিণামের মান রাখে। অ্যালগরিদম ত্রুটিযুক্ত হতে পারে, তবে এর কাঠামোটি যথেষ্ট সহজ যে কোনও ত্রুটি সনাক্ত করার প্রচেষ্টাটি (সম্ভবত সম্ভবত) তুচ্ছ।

কখনও কখনও এটি হয় না (এখানে সি-এর মতো সিউডোকোড ব্যবহার করা হয়েছে):

switch(someVal)
{
case v1 : return x1;
case v2 : return x2:
case v3 : doSomething(); // fall-through
case v4: // fall-through
case v5: // fall-through
case v6: return someXthingie;
...
...
default:
   doSomething(); // no return statement yet
}

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

হতে পারে অ্যালগরিদম সঠিক, তবে খারাপ লিখেছেন।

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

এটা ভুল হতে পারে।

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

একটি কোড স্নিপেট যা সঠিক বলে ধরে নেওয়া হচ্ছে:

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

  2. একটি একক রিটার্ন বিবৃতি এ জাতীয় কোডের পাঠের সহজলভ্যতা এবং সরলতা বৃদ্ধি করে যদি রিটার্নের মানটি হয় অ্যালগোরিদমের পুরো প্রয়োগের সময় গণনা করা হয় বা যদি গণনার জন্য দায়ী অ্যালগরিদমের পদক্ষেপগুলি অ্যালগোরিদমের কাঠামোর মধ্যে এক জায়গায় একত্রে গ্রুপ করা যায় ।

  3. একটি একক রিটার্ন বিবৃতি যেমন এক বা একাধিক ফ্ল্যাগ ভেরিয়েবলগুলিতে অ্যাসাইনমেন্টের প্রয়োজন হয়, যেমন অ্যাসোসিয়েশনগুলির অবস্থানগুলি অ্যালগোরিদম জুড়ে অভিন্ন অবস্থিত হয় না such

  4. একাধিক রিটার্ন স্টেটমেন্টগুলি এ জাতীয় কোডের পাঠের সহজলভ্যতা এবং সরলতা হ্রাস করে যদি রিটার্নের বিবৃতিগুলি অ্যালগরিদম জুড়ে অভিন্নভাবে বিতরণ না করা হয় এবং যদি তারা পারস্পরিক এক্সক্লুসিভ ব্লকগুলির আকার নির্ধারণ করে যা তাদের মধ্যে আকার বা কাঠামোর মতো নয়।

এটি প্রশ্নের মধ্যে একটি স্নিপেটের জটিলতার সাথে নিবিড়ভাবে সম্পর্কিত। এবং এটি ঘুরে দাঁড়ানোর সাথে সম্পর্কিত চক্রবিজ্ঞান এবং হাল্সস্টিড জটিলতা ব্যবস্থার সাথে। এ থেকে, কেউ নিম্নলিখিতটি পর্যবেক্ষণ করতে পারে:

সাব্রোটিন বা ফাংশনটির আকার যত বড়, এর অভ্যন্তরীণ নিয়ন্ত্রণ প্রবাহ কাঠামো বৃহত্তর এবং জটিল এবং আপনি একাধিক বা একক রিটার্নের বিবৃতি ব্যবহার করবেন কিনা তা নিয়ে একটি প্রশ্নের মুখোমুখি হবেন।

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

তারপরে, এবং কেবলমাত্র তখনই আপনি খুব সহজে এবং খুব বেশি ঘুম না হারিয়েই সিদ্ধান্ত নিতে পারেন যে কোনও একটির পছন্দ অনুসারে ত্রুটিগুলি প্রবর্তনের খুব বেশি ঝুঁকি না চালিয়ে একক রিটার্ন এবং একাধিক রিটার্ন ব্যবহার করবেন কিনা you

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


1
সি ++ রিটার্ন টাইপটি পূর্বনির্ধারিত হয় না: কোনও ডিফল্ট রিটার্ন টাইপ নেই তাই এটি অবশ্যই সব ক্ষেত্রে নির্দিষ্ট করা উচিত।
সুজেয়ার্ড

আমি এই প্রশ্নটি লেখার আগে থেকেই - প্রোগ্রামার.সটাকেক্সচেঞ্জ / প্রশ্ন / 588237/… । মূলত, আমি নীতিটি সম্পর্কে সচেতনতার পক্ষে করছি, তবে কঠোরভাবে এটি অনুসরণ করছি না - যদি সমস্ত প্রস্থান পয়েন্টগুলি সুস্পষ্ট হয় তবে আমি খুশি। আমার বক্তব্য এখানে - কারণ আমি একটি নীতির উদাহরণ হিসাবে উল্লেখ করি তার অর্থ এই নয় যে আমি সেই নীতির পক্ষে করছি, এবং অবশ্যই এটি কঠোর আকারে নেই। আমার বিষয়ভিত্তিক মতামত ঠিক এটি যদিও, - সম্ভবত আমার দৃষ্টিভঙ্গির জন্য আরও শক্তিশালী যুক্তি থাকতে পারে, বা একটি দৃ argument় যুক্তি থাকতে পারে যে আমি ভুল।
স্টিভ 314

"ডিফল্ট থেকে ইন" সম্পর্কে কী?
কৌতূহলী

আমি বলতে চাইছি, এবং আমার এটি যোগ্যতা অর্জন করা উচিত ছিল যে কোডটি যদি একটি এক্সিকিউশন শাখা ডাব্লু / ও এর একটি সুস্পষ্ট রিটার্ন মান হিসাবে ঘটে থাকে তবে বেশিরভাগ সংকলকগণ কেবলমাত্র একটি সঞ্চয়ের নিবন্ধের মানকে "রিভেট" করে দেয় value এর ফলস্বরূপ মানে শেষ পাটিগণিতের অপারেশনের ফলাফল (যা কিছু আবর্জনা হতে পারে) ইনট আকারে ফিরিয়ে দেওয়া returning এবং এটি অবশ্যই আবশ্যক আবর্জনা (এবং এর্গো, অপরিজ্ঞাত আচরণ) প্রথমে ফাংশনটি কী করবে তা নির্বিশেষে। সি এবং সি ++ আপনাকে সতর্ক করতে পারে, তবে আপনি-ওয়ারার বা অনুরূপ কিছু ব্যবহার না করে সংকলন আপনাকে সংকলন করতে দেয়।
luis.espinal
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.