জাভাস্ক্রিপ্ট দক্ষতা: 'বনাম' forEach জন্য '[বন্ধ]


108

() লুপ বনাম এ .এফইচ সহ জাভাস্ক্রিপ্টে 2017 এর বর্তমান মানটি কী।

আমি বর্তমানে অশ্বশাবক Steeles "ওয়েব দেব Bootcamp" Udemy মাধ্যমে আমার পথ কাজ করছি এবং তিনি উপযোগী forEachউপর forতাঁর অধ্যয়ন করেন। আমি অবশ্য কোর্সের কাজের অংশ হিসাবে অনুশীলনের সময় বিভিন্ন জিনিস সন্ধান করেছি এবং এর চেয়ে আরও বেশি কিছু করার জন্য আমি আরও বেশি সুপারিশ forপেয়েছি forEach। বেশিরভাগ লোক লুপের জন্য আরও কার্যকরী বলে জানিয়েছে।

কোর্সটি লেখার পর থেকেই এটি কি এমন কিছু পরিবর্তিত হয়েছে (প্রায় 2015) বা তাদের প্রতিটিের পক্ষে সত্যই ভাল-বোধ হয়, যা আরও অভিজ্ঞতার সাথে শিখবে।

যেকোন উপদেশ সাদরে গ্রহণ করা হবে।


11
কেন নিজেকে 2017 স্ট্যান্ডার্ডের কারও বিষয়গত ধারণার সাথে বেঁধে রাখবেন? নির্বিঘ্ন মান গ্রহণ করুন, যেমন পরিষ্কার, রক্ষণাবেক্ষণযোগ্য কোড লেখার মতো, ইঞ্জিনিয়াররা সর্বাধিক ব্যবহৃত কনস্ট্রাক্টসকে খুব দক্ষ করে তুলতে কঠোর পরিশ্রম করছেন এবং তার পরে যখন আপনার নির্দিষ্ট পারফরম্যান্স সমস্যা রয়েছে তখন পারফরম্যান্সের জন্য

4
forখাঁটি গতির জন্য কোনও নেটিভ শক্তিশালী। forEach()প্রতিটি পুনরাবৃত্তির জন্য একটি কলব্যাক আহ্বান; সুতরাং এটি স্পষ্টতই কিছুটা ওভারহেডের সাথে বহন করে।
ক্যানন

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

13
@AT যতক্ষণ না আপনি সেই ছেলেদের একজন না যারা mapপুনরাবৃত্তির জন্য নিখুঁতভাবে ব্যবহার করে এবং এটি তৈরি করে এমন নতুন অ্যারে বাতিল করে দেয়। আমি জানি না যে এই সাইটের একমাত্র বিশেষ ফাংশন পছন্দটিতে আমাকে কত লোককে সংশোধন করতে হয়েছিল।
ক্যানন

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

উত্তর:


214

জন্য

forলুপগুলি আরও বেশি দক্ষ। এটি একটি লুপিং কন্সট্রাক্ট যা বিশেষত পুনরুক্ত করার জন্য ডিজাইন করা হয়েছে যখন কোনও শর্ত সত্য হলে একই সময়ে একটি স্টেপিং মেকানিজম সরবরাহ করে (সাধারণত আয়রক বাড়ানোর জন্য)। উদাহরণ:

for (var i=0, n=arr.length; i < n; ++i ) {
   ...
}

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

উপকারিতা:

  • দক্ষ
  • প্রারম্ভিক লুপ সমাপ্তি (সম্মান breakএবং continue)
  • শর্ত নিয়ন্ত্রণ ( i<nযে কোনও কিছু হতে পারে এবং অ্যারের আকারের সাথে আবদ্ধ নয়)
  • পরিবর্তনশীল scoping ( var iপাতা iলুপ শেষ হওয়ার পরে উপলব্ধ)

প্রতিটির জন্য, প্রত্যেকটির জন্য

.forEachহ'ল এমন পদ্ধতি যা প্রাথমিকভাবে অ্যারেতে পুনরাবৃত্তি হয় (অন্যান্য সংখ্যাগরিষ্ঠ, যেমন Mapএবং Setবস্তুগুলির উপরেও )। এগুলি আরও নতুন এবং এমন কোড সরবরাহ করে যা বিষয়গতভাবে পড়া সহজ easier উদাহরণ:

[].forEach((val, index)=>{
   ...
});

উপকারিতা:

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

কর্মক্ষমতা

পারফরম্যান্স একটি কৌতূহলোদ্দীপক বিষয়, যা পূর্বাভাস বা দৃষ্টিভঙ্গির ক্ষেত্রে সাধারণত কিছু অভিজ্ঞতা প্রয়োজন। সময়ের পূর্বে (বিকাশকালে) কতটা অপ্টিমাইজেশনের প্রয়োজন হতে পারে তা নির্ধারণ করার জন্য, একজন প্রোগ্রামারকে অবশ্যই সমস্যা কেসের সাথে অতীতের অভিজ্ঞতার একটি ভাল ধারণা থাকতে হবে, পাশাপাশি সম্ভাব্য সমাধানগুলির একটি ভাল বোঝা থাকতে হবে।

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

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

পন্থা

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

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

for (var i=0; i < arr.length; ++i ){}

লুপের প্রতিটি পুনরাবৃত্তির জন্য, জাভাস্ক্রিপ্ট arr.lengthপ্রতিটি চক্রের একটি মূল-অনুসন্ধান ব্যয় ক্রিয়াকলাপটি পুনরুদ্ধার করছে । এটি না হওয়ার কোনও কারণ নেই:

for (var i=0, n=arr.length; i < n; ++i){}

এটি একই কাজ করে তবে কেবল arr.lengthএকবার পরিবর্তন করে, ভেরিয়েবলটি ক্যাশে করে এবং আপনার কোডটি অনুকূল করে optim


27
সময়, বাস্তবায়ন বা মাইক্রো-বেঞ্চমার্ক পরীক্ষার একক পয়েন্টের সাথে আবদ্ধ নয়, দুর্দান্ত, পুঙ্খানুপুঙ্খ, অহঙ্কারী উত্তর।

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

4
ডিবাগিংয়ের ক্ষেত্রে ফোর-লুপের প্রায়শই একটি সুবিধা থাকে: এগুলি breakোকা, ব্রেকপয়েন্ট এবং পরিদর্শন করতে ত্রয়ী। ForEach () এর মাধ্যমে অতিরিক্ত কলব্যাক স্তর কিছুটা জটিল করে তুলতে পারে।
এরিক গ্রেঞ্জ

6
আমি এই উত্তর এবং বাক্যাংশের ব্যাখ্যাটি সত্যই উপভোগ করছি [...], if performance and optimization was everything, there would be no other code than machine or assembly.। আমি বিশ্বাস করি যে letএকটি ব্লক স্কোপ স্থানীয় ভেরিয়েবল ঘোষণার জন্য বিবৃতি দিয়ে, সমর্থন ছাড়া পরিবেশে না থাকলে লুপের উপরের দ্বিতীয় সুবিধাটি forEachআর লাভ হবে forনা let
ব্যবহারকারী7393973

4
আমি যুক্ত করব যে এই উত্তরটি কিছু সংশোধন আপডেট বা সংযোজন ব্যবহার করতে পারে। উদাহরণস্বরূপ, আজকাল অনেকগুলি ব্রাউজার অভ্যন্তরীণভাবে বাইটকোডে অনুকূলিত হয়, তাই নির্দিষ্ট শর্তগুলি পূরণ হলে একবারে পুনরাবৃত্তি অপারেশন করা হয়। আমি মনে করি যদি লুপের শরীরে অ্যারেটি অচ্ছুত থাকে তবে এটি কেবল arr.lengthএকবার পুনরুদ্ধার করবে । আমি আরো পরিচিত সঙ্গে স্বাগত কেউ চাই মধ্যে তৌল করা।
vol7ron
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.