জেনারেটর - gnarly বিট

ECMAScript 6 খসড়া স্পেসিফিকেশন ইতিমধ্যেই আধুনিক জাভাস্ক্রিপ্ট ডেভেলপারদের জন্য অনেক আনন্দের উৎস এনে দিয়েছে। আমরা আগের পোস্টে কিছু নতুন সংগ্রহের ক্লাস এবং পুনরাবৃত্তি লুপের for..of কভার করেছি। এই পোস্টে, আমরা এমন কিছু সম্পর্কে কথা বলতে যাচ্ছি যেটি লুপগুলির for..of : জেনারেটর ফাংশনগুলির সাথে হাতে-কলমে যায়।

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

বেসিকগুলিকে বাইরে রেখে, আসুন একটি জাভাস্ক্রিপ্ট নমুনার সাথে গভীরভাবে যাই যা জেনারেটরগুলির সাথে কাজ করার কিছু গোটচা বা "গ্নার্লি বিটস" কভার করে। সর্বত্র বিস্তৃত মন্তব্য রয়েছে এবং আপনি কোডটি পড়ার আগে এর লাইভ সংস্করণের সাথে খেলতে পারেন:

তাই কোড থেকে কিছু বড় takeaways কি?

প্রথমত, একটি জেনারেটর নির্মাণের ফলে এটির নিজস্ব স্বতন্ত্র অবস্থার সাথে একটি অনন্য পুনরাবৃত্তিকারী হয় এবং আপনি জেনারেটর কনস্ট্রাক্টরের কাছে প্যারামিটারগুলি প্রেরণ করতে পারেন যা আচরণ নিয়ন্ত্রণ করতে পারে।

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

অবশেষে, জেনারেটরগুলি সসীম বা অসীম পুনরাবৃত্তিকারী তৈরি করতে পারে। আপনি যদি একটি অসীম পুনরাবৃত্তিকারীর সাথে কাজ করছেন, তাহলে নিশ্চিত করুন যে আপনার মান yield ED-এর উপর ভিত্তি করে কিছু ধরণের টার্মিনাল অবস্থা রয়েছে—এটা ভুলবশত অসীম লুপ লেখা খুব সহজ, বিশেষ করে যখন পুনরাবৃত্তির জন্য for..of ব্যবহার করা হয়। আপনি যদি একটি সীমিত পুনরাবৃত্তিকারীর সাথে next() কলের মাধ্যমে কাজ করছেন, তাহলে বস্তুর .done প্রপার্টি যা রিটার্ন করা সম্পূর্ণ হয়েছে কিনা তা নির্দেশ করে।

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

এই নিবন্ধটি পর্যালোচনা করার জন্য তার সাহায্যের জন্য এরিক আরভিডসনকে ধন্যবাদ।