• बाएँ से दाएँ प्रोग्रामिंग करने का तरीका यह सुनिश्चित करता है कि कोड टाइप करते ही प्रोग्राम वैध स्थिति में बना रहे, जिससे editor autocomplete जैसे tool support का अधिकतम लाभ मिलता है
  • Python के list comprehension में घोषित न किए गए variables और type inference की अनुपस्थिति autocomplete को बाधित करती है
  • Rust और JavaScript में प्रोग्राम को स्वाभाविक रूप से बाएँ से दाएँ बनाया जा सकता है, जिससे variable usage और method discovery अधिक सहज हो जाती है
  • C और Python की functional style में function names या structure की discoverability की कमी efficient coding experience को कमजोर करती है
  • उच्च जटिलता वाले logic में बाएँ से दाएँ unfold होने वाला code अधिक पढ़ने योग्य होता है, और maintenance व extensibility में बेहतर होता है

बाएँ से दाएँ प्रोग्रामिंग करना

कोड टाइप करते ही वैध होना चाहिए


Python list comprehension की सीमाएँ

  • Python का list comprehension syntax words_on_lines = [line.split() for line in text.splitlines()] ऐसी समस्या पैदा करता है जिसमें undeclared variable (line) तक पहुँचना पड़ता है, इसलिए editor autocomplete या type inference ठीक से उपलब्ध नहीं करा पाता
  • कोड को आंशिक रूप से टाइप करने की प्रक्रिया में
    • अगर words_on_lines = [line.sp तक टाइप किया जाए, तो editor line का type नहीं जानता, इसलिए methods सुझा नहीं सकता
    • variable name की typo (lime आदि) जैसी संभावित errors को पकड़ना भी कठिन हो जाता है
  • सही suggestions पाने के लिए incomplete code लिखना पड़ता है, और यह प्रक्रिया गैर-सहज और असुविधाजनक हो जाती है

Rust में बाएँ से दाएँ निर्माण

  • Rust का उदाहरण let words_on_lines = text.lines().map(|line| line.split_whitespace()); यह दिखाता है कि
    • anonymous function की declaration के साथ variable (line) पहली बार आते ही declared माना जाता है, इसलिए तुरंत autocomplete और method suggestions संभव हो जाते हैं
    • वास्तव में split_whitespace method भी autocomplete की मदद से आसानी से मिल गया
  • यह तरीका प्रोग्राम को हमेशा कम से कम आंशिक रूप से वैध स्थिति में रखता है, इसलिए IDE या editor real time में coding support दे सकते हैं

Progressive Disclosure और API usability

  • Progressive Disclosure एक design principle है जिसमें user केवल उतनी ही complexity देखता है जितनी उसे चाहिए, और इसे programming पर भी लागू किया जा सकता है
    • उदाहरण: word processor में image जोड़ने पर ही संबंधित options दिखना, यह उसी तरह का UX है
  • C language में ऐसा support कमज़ोर है
    • FILE *file से जुड़े functions को file. के ज़रिए explore नहीं किया जा सकता, इसलिए fread, fclose जैसे function name patterns याद रखने पड़ते हैं और capabilities खोज पाना कठिन होता है
    • इसके विपरीत, किसी आदर्श language में file. के माध्यम से method suggestions के जरिए संबंधित functionality को आसानी से क्रमिक रूप से खोजा जा सकता है

Functions और methods की discoverability का अंतर

  • Python के map(len, text.split()) और JavaScript के text.split(" ").map(word => word.length) उदाहरणों की तुलना
    • Python में len, length, size जैसे function names का अनुमान लगाना आसान नहीं होता, इसलिए कई बार कोशिश करनी पड़ती है कि वास्तव में क्या काम करेगा
    • JavaScript में word. के बाद सिर्फ .l टाइप करने पर भी editor length जैसी methods सुझा देता है, इसलिए discoverability अधिक होती है
    • map जैसे higher-order functions में भी actual return value और data type तुरंत अधिक स्पष्ट दिखाई देते हैं

Logic जितना जटिल, structured writing के फायदे उतने अधिक

  • अधिक जटिल logic (जैसे filter, lambda वाले nested लंबे Python code) में
    • code की शुरुआत और अंत बार-बार देखना पड़ता है, और condition expressions या parentheses matching जैसी चीज़ों में readability घटती है और समझना कठिन हो जाता है
  • उसी logic के JavaScript version में code को ऊपर से नीचे, बाएँ से दाएँ क्रमवार पढ़ा और समझा जा सकता है

मुख्य सिद्धांत

कोड टाइप करने के हर क्षण वैध होना चाहिए

  • सिर्फ text टाइप करने पर भी प्रोग्राम वैध स्थिति में रहता है
  • text.split(" ") तक लिखने पर भी, और फिर आगे .map(word => word.length) जोड़ते समय भी, पूरा code हमेशा intermediate state में वैध रहता है
  • ऐसा coding pattern editor के real-time support की संभावना बढ़ाता है, और REPL environment में तुरंत परिणाम देखना भी संभव बनाता है

निष्कर्ष

  • API और language design को ऐसा समर्थन देना चाहिए कि code को बाएँ से दाएँ स्वाभाविक रूप से टाइप करते हुए हर intermediate stage पर वैध प्रोग्राम बनाया जा सके
  • अच्छा API design इस coding experience को बेहतर बनाने की कुंजी है

अभी कोई टिप्पणी नहीं है.

अभी कोई टिप्पणी नहीं है.