पीईपी 8 में इसमें कई अच्छे विचार हैं, लेकिन मैं व्हाइटस्पेस के बारे में इस तरह के सवाल का फैसला करने के लिए इस पर भरोसा नहीं करता। जब मैंने व्हाइटस्पेस पर पीईपी 8 की सिफारिशों का अध्ययन किया, तो मैंने उन्हें असंगत और यहां तक कि विरोधाभासी पाया।
इसके बजाय, मैं सामान्य सिद्धांतों को देखता हूं जो लगभग सभी प्रोग्रामिंग भाषाओं पर लागू होते हैं, न केवल पायथन।
पहले उदाहरण में दिखाए गए कॉलम संरेखण में कई नुकसान हैं, और मैं इसे किसी भी परियोजना में उपयोग या अनुमति नहीं देता हूं।
नुकसान में से कुछ:
- आप समारोह नाम बदलते हैं तो इसकी लंबाई अलग है, आप मापदंडों के सभी फिर से संगठित करना चाहिए।
- जब आप यह रियलिगमेंट करते हैं, तो आपके स्रोत नियंत्रण भिन्नता अनावश्यक सफेद जगहों के परिवर्तनों से अव्यवस्थित होते हैं।
- जैसे ही कोड अपडेट और रखरखाव किया जाता है, यह संभावना है कि जब आप वैरिएबल का नाम बदलते हैं तो आपको कुछ संरेखण याद आएगा, जिससे गलत तरीके से कोड किया जा सकता है।
- आपको लंबी लाइन लंबाई मिलती है।
- संरेखण एक आनुपातिक फ़ॉन्ट में काम नहीं करता है। (हाँ, कुछ डेवलपर्स आनुपातिक फोंट पसंद करते हैं, और यदि आप स्तंभ संरेखण से बचने के लिए अपने कोड प्रयुक्त होते या आनुपातिक फोंट में समान रूप से पढ़ा जा सके।)
यह भी बदतर यदि आप अधिक जटिल मामलों में स्तंभ संरेखण का उपयोग हो जाता है। इस उदाहरण पर विचार:
let mut rewrites = try_opt!(subexpr_list.iter()
.rev()
.map(|e| {
rewrite_chain_expr(e,
total_span,
context,
max_width,
indent)
})
.collect::<Option<Vec<_>>>());
इस सर्वो ब्राउज़र, जिसकी शैली जनादेश स्तंभ संरेखण इस तरह की कोडिंग से जंग कोड है। हालांकि यह पायथन कोड नहीं है, वही सिद्धांत पाइथन या लगभग किसी भी भाषा में लागू होते हैं।
यह कोड कोड संरेखण का उपयोग कैसे खराब स्थिति की ओर जाता है इस कोड नमूना में स्पष्ट होना चाहिए। क्या होगा यदि आपको किसी अन्य फ़ंक्शन को कॉल करने की आवश्यकता है, या उस घोंसला वाले rewrite_chain_expr
कॉल के अंदर एक लंबा चर नाम था? आप केवल कमरे से बाहर हैं जब तक कि आप बहुत लंबी लाइनें चाहते हैं।
इन संस्करणों जो अपने दूसरे अजगर उदाहरण की तरह एक विशुद्ध रूप से खरोज आधारित शैली का उपयोग से किसी के साथ ऊपर की तुलना करें:
let mut rewrites = try_opt!(
subexpr_list
.iter()
.rev()
.map(|e| {
rewrite_chain_expr(e, total_span, context, max_width, indent)
})
.collect::<Option<Vec<_>>>()
);
या, यदि rewrite_chain_expr
के मानकों लंबे समय तक थे या तुम सिर्फ छोटी लाइनों चाहते थे:
let mut rewrites = try_opt!(
subexpr_list
.iter()
.rev()
.map(|e| {
rewrite_chain_expr(
e,
total_span,
context,
max_width,
indent
)
})
.collect::<Option<Vec<_>>>()
);
स्तंभ गठबंधन शैली के विपरीत, इस शुद्ध खरोज शैली के कई फायदे हैं और सभी में कोई नुकसान है।