লুপের মধ্যে লুপ থাকা কোন সময়ে নিষিদ্ধ?


23

উৎসুক. লুপের মধ্যে একটি লুপের মধ্যে আমার সবচেয়ে বেশিটি ছিল, কারণ লিনাস টরভাল্ডস থেকে এটি পড়ে :

ট্যাবগুলি 8 টি অক্ষর এবং সুতরাং ইনডেন্টেশনগুলিও 8 টি অক্ষর। এখানে ধর্মবিরোধী গতিবিধিগুলি রয়েছে যা 4 (বা এমনকি 2!) অক্ষরগুলি গভীরভাবে ইনডেন্টেশন করার চেষ্টা করে এবং এটি পিআইয়ের মান 3 হওয়ার সংজ্ঞা দেওয়ার মতো kin

যুক্তি: ইন্ডেন্টের পিছনে পুরো ধারণাটি হ'ল নিয়ন্ত্রণের কোন ব্লক শুরু হয় এবং শেষ হয় তা স্পষ্টভাবে সংজ্ঞায়িত করা। বিশেষত যখন আপনি আপনার স্ক্রিনটি সরাসরি 20 ঘন্টা ধরে দেখছেন, আপনি বড় ইন্ডেন্টেশন থাকলে ইন্ডেন্টেশন কীভাবে কাজ করে তা দেখতে আপনি এটি অনেক সহজ পাবেন।

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

https://www.kernel.org/doc/Documentation/CodingStyle

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

লিনাস কি মজা করছিল?

এটি কি ভাষা বা প্রয়োগের উপর নির্ভর করে?

এমন কিছু জিনিস রয়েছে যার জন্য তিন বা ততোধিক মাত্রার লুপিং প্রয়োজন?


8
আমি বিভ্রান্ত হয়ে পড়েছি কেন আপনি ইন্ডেন্টেশন থেকে লুপিংয়ের স্তরে ঝাঁপ দেন? আপনার ইন্ডেন্টেশন নিয়ে আলোচনা করার একটি বিশাল উক্তি রয়েছে এবং হঠাৎ সেখান থেকে নেস্টেড লুপগুলি সম্পর্কে একটি প্রশ্ন অনুসরণ করা হয়েছে।
পিটার বি

5
লিনাস সম্ভবত (বিভাগে)। বিভাগে ঠাট্টা করছেন না, তবে মনে রাখবেন যে এটি কেবল একটি স্টাইল গাইড এবং একই স্টাইল গাইড জোর দিয়ে বলেছেন যে "কার্নেল কোডিং স্টাইলটি অত্যন্ত সাধারণ", অর্থাৎ অন্যান্য স্টাইলের চেয়ে বেশি।

5
@ আকিভা আপনি 4 নেস্ট লুপ না করে 4-মাত্রিক ম্যাট্রিক্সের মধ্য দিয়ে যেতে পারবেন না। আমি এটি উন্মাদ বলে মনে করি যে কেউ আপনার থাকতে পারে এমন নেস্টেড লুপের পরিমাণ সীমাবদ্ধ করে। লিনাস স্পষ্টতই খুব সাধারণ ছিলেন এবং আপনি যা পড়েন তা পবিত্র ধর্মগ্রন্থ হিসাবে গ্রহণ করা উচিত নয়।
অল্টারনেটেক্স

9
@Alternatex আপনি 4 লুপ প্রয়োজন যে মানে এই নয় তারা হবে আভিধানিক নেস্টেড। উক্ত উদ্ধৃতি থেকে এটি স্পষ্টভাবে স্পষ্ট যে আমরা কোডটি কীভাবে সংগঠিত করব তা কার্যকর করার বিষয়ে নয়।

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

উত্তর:


19

কার্নেল দৃ simple়ভাবে সাধারণ অ্যালগরিদম পছন্দ করে

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

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


সুতরাং আপনি কি মনে করেন যে সি এর মতো নিম্ন স্তরের ভাষাগুলির সাথে গভীরভাবে নেস্ট করা লুপগুলি সাধারণত becauseনিম্ন স্তরের ভাষা ব্যবহার করে আরও নিষিদ্ধ প্রকল্পগুলি কোনও কোডিং শৈলী থেকে সরল অ্যালগরিদমে ফোকাস করে?
আকিভা

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

একটি খুব অন্তর্দৃষ্টিপূর্ণ এবং দরকারী মন্তব্য / উত্তর। উৎসুক; আজ এমন কোন প্রকল্প কী করেছে যা নিম্ন স্তরের ভাষা ব্যবহার করে, শক্তিশালী, নিরীক্ষণ-সক্ষম এবং সুরক্ষিত হওয়ার দিকে মনোনিবেশ করবে না?
আকিভা

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

49

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

যাইহোক, খাঁজ আপনার মাত্রা সীমিত হয় সাধারণ একটি যুক্তিসঙ্গত প্রস্তাবনায় যে আপনার কাছে একটি বিস্ময় হিসেবে আসা উচিত, এবং।

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

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


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

6
@ লাইআরয়ান: তারপরেও এটি টশ - কোনও কিছুর কোডিং গাইডলাইনে কোনও ব্যবসায়িক নির্দেশ নেই যে আমি আমার ট্যাবগুলি কতটা প্রশস্ত করে রেখেছি! তবে আমার সন্দেহ লিনাস সেটা জানে।
মনিকার সাথে লাইটনেস রেস

6
এবং অবশ্যই এটি ভাষা-নির্ভর - সি # তে সাধারণ আপনি নিজের নামের জায়গার ভিতরে, আপনার শ্রেণিতে এবং আপনার পদ্ধতিতে ইনডেন্ট করে ফেলেছেন .. আপনি এমনকি নিয়ন্ত্রণ প্রবাহের বিবৃতি দেহের বিষয়ে কথা বলার আগে আপনি ইতিমধ্যে 3 টি ইন্ডেন্টেশনের স্তরে রয়েছেন ইন্ডেন্টযুক্ত।
পিটারএল

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

4
@ মাউন্ডস__ডি: মনে হচ্ছে যে আমি ভুল: Outside of comments, documentation and except in Kconfig, spaces are never used for indentation, and the above example is deliberately broken.- ওপিতে উদ্ধৃতি থেকে 6 অনুচ্ছেদ নিচে।
slebetman

16

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


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

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

1
@ মাস্টার এই মুহূর্তে প্রসঙ্গে ধন্যবাদ! আপনার প্রশ্নের জবাবে, আমি খুব কমই গুরুত্ব সহকারে কিছু নিচ্ছি। ;)
স্ক্যান্ট রজার

2
@ মাস্টার এবং তারপরে একজন গিথুব পুল অনুরোধ এবং কমিট বার্তাগুলির লাইন দৈর্ঘ্যে তার প্রতিক্রিয়াগুলি পড়েন। তিনি মোট নট-কেস।
গাসডোর

3
আনুষ্ঠানিকভাবে GNU কোডিং গাইডলাইনগুলি বার্ন করা আসলে প্রয়োজন নাও হতে পারে তবে এটি যে কোনও সময় পুরোপুরি ক্রমযুক্ত।
ডিএমকেকে

13

লিনাস কি মজা করছিল?

টুকরাটি একটি কৌতুকপূর্ণ স্টাইলে লেখা হয়েছে যা পরামর্শ দেয় যে লেখক গুরুতর অনুশীলনকারীদের মধ্যে কোডিং শৈলীর যেভাবে আলোচনা করা হয়েছে তার সাথে পরিচিত: আমাদের সকলের আমাদের পছন্দ আছে, এবং আমরা এগুলিকে কঠোরভাবে রক্ষা করি তবে অন্তত গালে জিহবা দিয়ে with আমরা পুরোপুরিভাবে বুঝতে পারি যে এর বেশিরভাগটি কেবল ব্যক্তিগত স্বাদের বিষয়। তিনি অনেক কথায় বলেছিলেন "Coding style is very personal, and I won't _force_ my views on anybody"- অন্তত কোডের বাইরে তিনি ব্যক্তিগতভাবে রক্ষণ করেন। তবে প্রদত্ত প্রকল্পে শৈলীর ধারাবাহিকতা খুব ভাল ধারণা। প্রদত্ত ফাংশনে একাধিক শৈলীর সাথে চুক্তি করার চেয়ে আমি পছন্দ করি না এমন একটি শৈলীতে আমি কোড করতে চাই।

এখানে স্পষ্টভাবে ক্রীড়নশীল লেখার একটি উদাহরণ:

However, there is one special case, namely functions: they have the
opening brace at the beginning of the next line, thus:

int function(int x)
{
    body of function
}

Heretic people all over the world have claimed that this inconsistency
is ...  well ...  inconsistent, but all right-thinking people know that
(a) K&R are _right_ and (b) K&R are right.  Besides, functions are
special anyway (you can't nest them in C).

কৌতুকপূর্ণ (1)।

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

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

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

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

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

(২) আপনি যদি " উত্স নিয়ন্ত্রণ ব্যবস্থা কীভাবে নকশা করবেন " বোঝার বিষয়ে কথা বলতে চান , তবে বিতর্কের কিছু জায়গা থাকতে পারে।

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

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


3
ওয়ান্ডারফুল জবাব। .
কেসগুলির

2
লিনাসের ইন্ট্রো অনুচ্ছেদে আপনি যে বিষয়টি উল্লেখ করেছেন তা অত্যন্ত গুরুত্বপূর্ণ তাই এটি করার জন্য আপনাকে ধন্যবাদ! আমি মনে করি প্রথম বাক্যটি প্রসঙ্গেও খুব গুরুত্বপূর্ণ, বিশেষত preferred coding styleপাশাপাশিbut this is what goes for anything that I have to be able to maintain
ক্রিস হাস

9

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

বিকল্প পদ্ধতির কয়েকটি উদাহরণের জন্য, আপনি পুনরাবৃত্তি ব্যবহার করতে পারেন, নিজের ফাংশনে অভ্যন্তরীণ লুপগুলি বিভক্ত করতে পারেন বা মধ্যবর্তী ডেটা স্ট্রাকচার তৈরি করতে পারেন।

অতিরিক্ত বাসা বাঁধাই সেই ক্ষেত্রেগুলির মধ্যে একটি যা সহজেই লিখতে সহজ তবে পড়া শক্ত read একটি বড় ট্যাব গভীরতা নির্ধারণ করা লিনাসকে এটিকে লিখতে আরও বিরক্তিকর করার উপায়।


3

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


1

এটি কুকুরটিকে দুলিয়ে রাখার পাঠ্যপুস্তকের ক্ষেত্রে উপস্থিত হতে পারে।

তারপর আপনি 80 অক্ষর প্রদর্শন থাকে তাহলে অবশ্যই আপনি চেষ্টা এবং কোড হইয়া সেরা হিসাবে আপনি করতে পারেন করতে যাচ্ছি যদিও তা কোডের জন্য শ্রেষ্ঠ গঠন উত্পাদন না

আপনার পয়েন্টের বাকী অংশটি মোকাবেলা করুন:

আমি অনুভব করেছি যে এটি একটি অগ্রহণযোগ্য অনুশীলন।

আমি মনে করি আপনি এটি খুব বেশি পড়ছেন। প্রবন্ধটি সঠিকভাবে না বুঝে আপনি যা কিছু পড়েন তা সুসমাচার হিসাবে নেওয়ার তাগিদ প্রতিরোধ করুন।

তিনি কি রসিকতা করছেন?

প্রসঙ্গটি নির্ধারণ করা শক্ত, তবে উপরে আমার মূল বিষয়টি দেখুন।

এটি কি ভাষা বা প্রয়োগের উপর নির্ভর করে?

খুব বেশী তাই. যে কোনও মেইনফ্রেম / মিডরেঞ্জ ভাষা গ্রহণ করুন যেখানে আপনি সম্ভবত টার্মিনাল (বা টার্মিনাল এমুলেটর) এ কোডিং করছেন।

এমন কিছু জিনিস রয়েছে যার জন্য তিন বা ততোধিক মাত্রার লুপিং প্রয়োজন?

হ্যাঁ, কিছু জন্তু বলের অ্যালগরিদমে এটি খুব সাধারণ। প্রকল্পের ইউলারে 31 টি সমস্যা দেখুন । এটি এমন একটি সমস্যার একটি ক্লাসিক উদাহরণ যা বেশ কয়েকটি লুপ ব্যবহার করে নিষ্ঠুর বলের সাথে সমাধান করা যেতে পারে (8 সঠিক হতে হবে)।


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

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

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

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

1
লিনাসের উদ্ধৃতিটি বেশ স্পষ্টভাবে বলেছে যে কিছু কোডের জন্য যদি সমস্যা -১১ হিসাবে ব্রুটফোর্ডিংয়ের মতো কিছু দরকার হয় তবে আপনি যেভাবেই ছাঁটাচ্ছেন - এটি দ্রুত বা সহজ হবে না এবং কার্নেলের ক্রিয়াকলাপগুলি দ্রুত এবং সহজ হতে হবে । কার্নেলের মধ্যে যে কোনও ও (এন ^ 4) অ্যালগরিদম অন্তর্ভুক্ত করা পরিষেবা কার্যকারিতা বা অস্বীকারের একটি উল্লেখযোগ্য ঝুঁকি, তাই এই প্রসঙ্গে সুপারিশটি কেবল সতর্ক করে যে এটি কোডের একটি চিহ্ন যা লিনাক্সে মৌলিকভাবে অনুপযুক্ত এবং চেয়েছিল।
পিটারিস

0

লিনাস কি মজা করছিল?

না, সেগুলি সরকারী নির্দেশিকা।

এটি কি ভাষা বা প্রয়োগের উপর নির্ভর করে?

কোডিং নির্দেশিকা সাধারণত ভাষা এবং প্রয়োগের উপর নির্ভরশীল, তবে গভীরভাবে নেস্ট করা কোড সর্বদা পাঠককে কর দেয়।

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

তাহলে 3 কেন? একটি বিষয়গত কোডিং গাইডলাইন উভয়ই প্রয়োগ করা শক্ত এবং স্বয়ংক্রিয়ভাবে প্রয়োগ করা অসম্ভব। সর্বাধিক মাত্রায় ইন্ডেন্টেশন সম্পর্কিত কোডিং গাইডলাইন স্থাপনের জন্য একটি সংখ্যার সাথে একমত হওয়া দরকার: লিনাক্স কার্নেলে তারা বেছে নিয়েছিল।

এটি নির্বিচারে এবং তাদের জন্য দৃশ্যত যথেষ্ট।

এমন কিছু জিনিস রয়েছে যার জন্য তিন বা ততোধিক মাত্রার লুপিং প্রয়োজন?

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

আপনি স্পষ্টতই অল্প সংক্ষিপ্ত বাসা এবং খুব ছোট ছোট ফাংশন দিয়ে একে অপরকে তাদের চুক্তিটি বানান ছাড়াই কল করে অবিচ্ছিন্ন কোড লিখতে পারেন ...

... তবে, স্পষ্ট চুক্তিযুক্ত ছোট ফাংশনগুলি সাধারণভাবে পরিষ্কার চুক্তিযুক্ত বৃহত ফাংশনের চেয়ে নিরীক্ষণ করা অনেক সহজ।


2
যদিও এটি সরকারী গাইডলাইন হতে পারে তবে কার্নেল কোডে যেখানে গাইডলাইনটি প্রয়োগ করা হয়নি সেখানে এমন জায়গাগুলি খুঁজে পাওয়া তুচ্ছ।
মাইকেবি

1
@ মাইকবি: নির্দেশাবলী স্বয়ংক্রিয়ভাবে প্রয়োগ করার আরও আরও সমস্ত কারণ ...
ম্যাথিউ এম।

1
@MatthieuM। আপনি কি নিশ্চিত যে আপনি গাইডলাইন এবং বাধ্যতামূলক প্রয়োজনীয়তার মধ্যে পার্থক্যটি বুঝতে পেরেছেন? সাধারণ "থাম্বের নিয়ম" হিসাবে (যদি আপনি পছন্দ করেন তবে একটি গাইডলাইন), নির্দেশিকাগুলি আরও সুপারিশের মতো এবং প্রয়োগ করা হয় না।
ব্রেন্ডন 10
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.