সাধারণ "গতিশীল ভাষার ভুল" কীভাবে এড়ানো যায়?


42

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

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

এটি আরও সংক্ষিপ্তভাবে বলতে:

  • আপনি কীভাবে একটি জাভাস্ক্রিপ্ট (বা সেই বিষয়ে কোনও অন্যান্য গতিশীল ভাষা) প্রকল্পের কাছে ~ 2000 এলওসি ব্যবহার করবেন?
  • আমাকে এই ভুলগুলি করতে বাধা দেওয়ার জন্য কি কোনও সরঞ্জাম রয়েছে? আমি ফেসবুক এবং জেএসহিন্টের মাধ্যমে প্রবাহের চেষ্টা করেছি যা কিছুটা সহায়তা করে তবে টাইপগুলি ধরেন না।

2
যদিও সেখানে খরচ প্রশমিত করার উপায় আছে, সেখানে হয় খরচ
ড্যাসট্রো

29
আমি আপনার প্রোগ্রামটি স্ট্যাটিকালি টাইপ করা ভাষায় লেখার চেষ্টা করব যা জাভাস্ক্রিপ্টের সাথে সংকলিত, টাইপসক্রিপ্ট, স্কেলা.জেএস বা এলমের মতো।
ড্যাসট্রো

6
পরীক্ষা, পরীক্ষা, আরও টেস্টিং এবং কভারেজ রিপোর্ট।
njzk2

7
~ 2000 এলওসি একটি ছোট প্রকল্প। গতিশীল ভাষা কী সহজে এবং ভাল করে তার মধ্যে এটি সহজেই মাপসই করা উচিত। আপনি যদি সেই ধরণের আকারের প্রকল্পের সাথে লড়াই করে থাকেন তবে আপনার প্রোগ্রামিং দক্ষতাগুলির সাথে বিশেষত গতিশীল ভাষার সাথে প্রাসঙ্গিক যে কোনও বিষয় রয়েছে তার চেয়ে আপনার আরও মৌলিক সমস্যা রয়েছে।
জ্যাক এইডলি

5
পুনঃটুইট করেছেন ওপি হ'ল উচ্চ-স্তরের সমস্যার উপর ফোকাস দেওয়ার জন্য ব্যবহৃত হয় এবং সনাক্তকারী সঠিকভাবে বানান হয় কিনা তা নয়। তা হচ্ছে প্রোগ্রামিং দক্ষতা। মধ্যবর্তী গ্রেডার এবং / অথবা সরঞ্জাম সমর্থন দ্বারা সঠিক বানান নিশ্চিত করা যায়।
মুচাহো

উত্তর:


37

বিশেষত জাভাস্ক্রিপ্টের কথা বললে আপনি এর পরিবর্তে টাইপস্ক্রিপ্ট ব্যবহার করতে পারেন । এটি আপনি উল্লেখ করছেন এমন কিছু জিনিস সরবরাহ করে। ওয়েবসাইট উদ্ধৃত:

প্রকারভেদ জাভাস্ক্রিপ্ট বিকাশকারীদের উচ্চ-উত্পাদনশীল বিকাশ সরঞ্জাম এবং জাভাস্ক্রিপ্ট অ্যাপ্লিকেশনগুলির বিকাশকালে স্ট্যাটিক চেকিং এবং কোড রিফ্যাক্টরিংয়ের মতো অনুশীলনগুলি ব্যবহার করতে সক্ষম করে।

এবং এটি জেএসের একটি সুপারস্টার, অর্থাত আপনার বিদ্যমান কিছু কোড টিএস নিয়ে ঠিক কাজ করবে:

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


11
... এবং টাইপসক্রিপ্টটি মূলত ইকোমাস্ক্রিপ্ট
রবার্ট হার্ভে

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

5
টাইপসক্রিপ্টটি নিজেরাই একটি দুর্দান্ত ভাষা, আপনি কেন চেষ্টা করে এ জাতীয় বাজে তা দিয়ে চাপ দিতে হবে?
জার্গ ডব্লু মিট্টাগ

29
@ জার্গ আমি স্মার্টটাক সম্পর্কে যথেষ্ট জানিনা, তবে জাভা স্ক্রিপ্ট বা পাইথনের প্রতিটি আইডিই জাভা বা সি # এর জন্য ভাল আইডিই কি করতে পারে তার পিছনে কয়েক মাইল পিছনে। এছাড়াও কিছু জিনিস রয়েছে যা গতিশীল ভাষায় করা অসম্ভব সহজ (বেশ কয়েকটি জনপ্রিয় রিফ্যাক্টরিংস সত্যই): বলুন আপনার একটি সার্বজনীন ক্রিয়াকলাপ foo(x) { return x.bar;}বা এর মতো কিছু রয়েছে। যেহেতু কোনও ধরণের তথ্য নেই এবং ফাংশনটি সর্বজনীন (সুতরাং আপনি সমস্ত কলারকে জানতে পারবেন না) যদি আপনি কোনও শ্রেণির নাম পরিবর্তন করেন তবে বারটির নাম বাজে রাখা উচিত কিনা তা নির্ধারণ করা আপনার পক্ষে অসম্ভব।
ভু

10
এই উত্তর বলে যে "গতিশীল ভাষার ভুল" এর সমাধান হ'ল গতিময় ভাষা ব্যবহার করা মোটেই নয়।
বিগুসাচ

19

কিছু উপায় আছে যা সাহায্য করতে পারে:

অংশ পরিক্ষাকরণ

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

ফ্রেমওয়ার্ক ব্যবহার করুন

আপনার নিজের ঘূর্ণায়মান এবং বাগের প্রবণতা ঝুঁকিপূর্ণ করার পরিবর্তে যেখানে সম্ভব সেখানে প্রতিষ্ঠিত ফ্রেমওয়ার্ক ব্যবহার করুন।

সিএসএস / উচ্চ-স্তরের ভাষা পছন্দ করুন

যেখানে আপনি সিএসএসে বা আপনি যে উচ্চ-স্তরের ভাষায় লিখছেন তাতে কার্যকারিতা সীমাবদ্ধ করতে পারেন।

Refactor

কোডের পরিমাণ হ্রাস করতে রিফ্যাক্টর। জিনিসগুলি ভুল হওয়ার জন্য কম কোড = কম জায়গা।

পুনঃব্যবহার

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

IDEs

আধুনিক আইডিইগুলিতে সাধারণত কমপক্ষে কিছু জাভাস্ক্রিপ্ট সমর্থন থাকে। কিছু পাঠ্য সম্পাদকও সচেতন জাভাস্ক্রিপ্ট।


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

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

4
"সিএসএস / উচ্চ-স্তরের ভাষাগুলি পছন্দ করুন" - জাভাস্ক্রিপ্টের সাথে এই বিটের অর্থ কী তা আমি সত্যিই বুঝতে পারি না: আপনি কি জেএস কোডের পরিবর্তে উপাদানগুলি (সম্ভবত অ্যানিমেশন,?) স্টাইলশিটে স্থানান্তরিত করতে বলছেন? সিএসএস কীভাবে উচ্চ স্তরের ভাষার সাথে সম্পর্কিত?
ডেভ

@ এ্যানডোরডেভ জাভাস্ক্রিপ্টের ডোমেন হিসাবে দৃ .়ভাবে ব্যবহৃত হত যা এখন CSS3 এ অর্জন করা যেতে পারে। কিছু কার্যকারিতা সম্ভবত উচ্চ স্তরের ভাষায় স্থানান্তরিত হতে পারে যা আরও কঠোর নিয়ন্ত্রণের সাপেক্ষে।
রবি ডি

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

2

একটি সরঞ্জাম যা এখনও উল্লেখ করা হয়নি তা হ'ল সরল, ফাইল-স্থানীয় বা প্রকল্প-প্রশস্ত পাঠ্য অনুসন্ধান

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

এটি আমার জন্য কার্যকর সরঞ্জাম হয়ে দাঁড়িয়েছে (স্থির বিশ্লেষক ছাড়াও) এবং আপনার প্রকল্পের আকারটি 2 কে এলওসি দিয়ে দেওয়া হয়েছে, যা আমার মতে বিশেষত বড় নয়, আশা করি আশ্চর্য কাজ করা উচিত।


2
grepঅনেক দূরে যায় আপনি যদি খুব অদ্ভুত গতিশীল জিনিস না করেন তবে এটি কৌশলটি করে। তবে, আপনি যদি স্ট্যাটিক টাইপড ভাষার জন্য আইডিই ব্যবহার করেন তবে এটি খুব ম্যানুয়াল অনুভব করে।
বিগুসাচ

1

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

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

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

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

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

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


0

"আপনি কীভাবে একটি জাভাস্ক্রিপ্ট (বা সেই বিষয়ে অন্য কোনও গতিশীল ভাষা) প্রকল্পের কাছে ~ 2000 এলওসি দিয়ে প্রকল্পের কাছে যাবেন?" এই প্রশ্নের উত্তর আমার?

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

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

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

আমিও ইভাল ব্যবহার করি। এটি সোর্স কোডের আকারকে হ্রাস করতে পারে। পারফরম্যান্স সমস্যার কারণে, আমি আমার অ্যাপ্লিকেশনটির শুরু বা প্রারম্ভিক অংশে eval ব্যবহার করি; আমি কখনই এটি "রানটাইম যুক্তি" ব্যবহার করি না - এটি আমি অনুসরণ করি এমন অন্য কোডিং কনভেনশন।

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