মিক্সড জুস

মিক্সড জুস

লার্নিং অনুশীলনী

ভূমিকা

while লুপ

যতক্ষণ একটি নির্দিষ্ট শর্ত পূরণ হয়, ততক্ষণ আপনি একটি while লুপ দিয়ে কোড বারবার চালাতে পারেন। এটি লেখা হয় while কিওয়ার্ড দিয়ে, তারপর প্রথম বন্ধনীতে মোড়া একটি শর্ত এবং দ্বিতীয় বন্ধনীতে মোড়া একটি কোড ব্লক, যেখানে লুপের বডি থাকে।

while (condition) {
  // code that is executed repeatedly as long as the condition is true
}

JavaScript-এ ডু-হোয়াইল লুপও আছে। এখানে লুপের বডি চালানোর পরে শর্তটি যাচাই করা হয়। শর্তটি যখন বডিতে করা গণনার ওপর নির্ভর করে, তখন এটি কাজে লাগে।

do {
  // The code here will always be executed once and then
  // repeatedly while the condition is true.
} while (condition);

লুপের বডির ভেতরে আপনি break কিওয়ার্ড ব্যবহার করে লুপের এক্সিকিউশন সম্পূর্ণ থামাতে পারেন। এর বিপরীতে, continue কিওয়ার্ড কেবল বর্তমান ইটারেশনের এক্সিকিউশন থামায় এবং পরের ইটারেশনে চলে যায়। continue ব্যবহার করে আপনি প্রায়ই লুপের বডির বড় অংশকে একটি if স্টেটমেন্টে মোড়ানো এড়াতে পারেন।

let i = 0;

while (i < 100) {
  i = i + 2;

  if (i % 3 === 0) {
    continue;
  }

  // The code here will only be executed when i was not divisible
  // by 3 in the check above.
}

switch স্টেটমেন্ট

if স্টেটমেন্টের পাশাপাশি JavaScript-এ শর্তসাপেক্ষে লজিক চালানোর জন্য switch স্টেটমেন্টও আছে। এটি ব্যবহার করা হয় যখন একটি ভ্যারিয়েবলকে একাধিক বিকল্পের সঙ্গে তুলনা করতে হয়। তুলনাটি করা হয় কঠোর সমতা (===) যাচাই করে, দেখুন তুলনা ধারণা। কোনো ভ্যারিয়েবল x-এর জন্য JavaScript-এ switch স্টেটমেন্টের সিনট্যাক্স নিচের মতো।

switch (x) {
  case option1:
    // code that is executed when "x === option1" is true
    break;
  case option2:
    // code that is executed when "x === option2" is true
    break;
  default:
    // code that is executed when x does not equal any of the options
}

default কেসটি ঐচ্ছিক; অন্য কোনো অপশন ভ্যারিয়েবলের সঙ্গে না মিললে আপনি যদি কিছু কোড চালাতে চান, সেক্ষেত্রে এটি ব্যবহার করা হয়।

উপরের break স্টেটমেন্টগুলো দরকার, কারণ JavaScript-এ ডিফল্টভাবে সব কেস "ফলথ্রু"। এর মানে হলো, কোনো break স্টেটমেন্ট না থাকলে প্রথম যে অপশনটি মিলেছে তার নিচের সব কেসের কোডই চালানো হবে, যদিও x ওই অপশনগুলোর সঙ্গে মেলেনি। JavaScript-এ switch ব্যবহার করার সময় এই "ডিফল্টভাবে ফলথ্রু" আচরণ একটি কমন বিপদ। একটি ফাংশনের ভেতরে এই সমস্যা এড়াতে break-এর বদলে return-ও ব্যবহার করা যায়।

নির্দেশনা

আপনার বন্ধু লি মেই একটি জুস বার চালান, যেখানে তিনি সুস্বাদু মিশ্র ফলের জুস বিক্রি করেন। আপনি তাঁর দোকানের একজন নিয়মিত ক্রেতা, এবং বুঝতে পারেন যে আপনি আপনার বন্ধুর জীবন সহজ করে তুলতে পারেন। আপনি সিদ্ধান্ত নেন যে আপনার কোডিং দক্ষতা দিয়ে লি মেই-এর কাজে সাহায্য করবেন।

1. একটি জুস মেশাতে কত সময় লাগে তা নির্ধারণ করুন

লি মেই তাঁর ক্রেতাদের আগেই বলে দিতে ভালোবাসেন যে মেনু থেকে অর্ডার করা জুসের জন্য তাদের কতক্ষণ অপেক্ষা করতে হবে। জুস মেশাতে যত সময় লাগে তা ভিন্ন হয়, তাই সঠিক সংখ্যাগুলো তাঁর মনে রাখতে অসুবিধা হয়। 'Pure Strawberry Joy' নিতে ০.৫ মিনিট, 'Energizer' ও 'Green Garden' প্রতিটি ১.৫ মিনিট, 'Tropical Island' ৩ মিনিট এবং 'All or Nothing' ৫ মিনিট সময় নেয়। অন্য সব পানীয়ের (যেমন বিশেষ অফার) জন্য আপনি ২.৫ মিনিট প্রস্তুতির সময় ধরে নিতে পারেন।

আপনার বন্ধুকে সাহায্য করতে একটি ফাংশন timeToMixJuice লিখুন, যা আর্গুমেন্ট হিসেবে মেনু থেকে একটি জুস নেয় এবং সেই পানীয়টি মেশাতে কত মিনিট লাগে তা রিটার্ন করে।

timeToMixJuice('Tropical Island');
// => 3

timeToMixJuice('Berries & Lime');
// => 2.5

2. লাইমের টুকরোর সরবরাহ আবার ভরে তুলুন

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

limesToCut ফাংশনটি ইমপ্লিমেন্ট করুন, যা লি মেই-এর কাটতে প্রয়োজনীয় লাইমের টুকরোর সংখ্যা এবং তাঁর হাতের কাছে থাকা গোটা লাইমের সরবরাহ বোঝানো একটি অ্যারে নেয়। একটি 'small' লাইম থেকে তিনি ৬ টুকরো পেতে পারেন, একটি 'medium' লাইম থেকে ৮ টুকরো এবং একটি 'large' লাইম থেকে ১০ টুকরো। তিনি সবসময় তালিকায় যে ক্রমে লাইমগুলো আছে সেই ক্রমেই সেগুলো কাটেন, প্রথমটি দিয়ে শুরু করে। তিনি প্রয়োজনীয় সংখ্যক টুকরো না হওয়া পর্যন্ত বা লাইম ফুরিয়ে না যাওয়া পর্যন্ত কাটতে থাকেন।

লি মেই আগেই জানতে চান তাঁর কতটি লাইম কাটতে হবে। limesToCut ফাংশনটি কাটতে হবে এমন লাইমের সংখ্যা রিটার্ন করবে।

limesToCut(25, ['small', 'small', 'large', 'medium', 'small']);
// => 4

3. শিফটের কাজ শেষ করুন

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

দায়িত্ব হস্তান্তর সহজ করতে remainingOrders ফাংশনটি ইমপ্লিমেন্ট করুন, যা লি মেই-এর শিফটে বাকি মিনিটের সংখ্যা এবং অর্ডার করা কিন্তু এখনো তৈরি না হওয়া জুসের একটি অ্যারে নেয়। ফাংশনটি সেই অর্ডারগুলো রিটার্ন করবে যা লি মেই তাঁর কাজের দিন শেষ হওয়ার আগে তৈরি শুরু করতে পারবেন না।

শিফটে বাকি সময় সবসময় ০ থেকে বেশি হবে। তৈরির জন্য জুসের অ্যারে কখনো খালি থাকবে না। এছাড়া অর্ডারগুলো অ্যারেতে যে ক্রমে আছে সেই ক্রমেই তৈরি করা হয়। লি মেই কোনো জুস মেশানো শুরু করলে সেটি তিনি সবসময় শেষ করেন, এমনকি একটু বেশি সময় কাজ করতে হলেও। দিমিত্রিকে দেখতে হবে এমন কোনো অর্ডার বাকি না থাকলে একটি খালি অ্যারে রিটার্ন করতে হবে।

remainingOrders(5, ['Energizer', 'All or Nothing', 'Green Garden']);
// => ['Green Garden']
GitHub-এর মাধ্যমে সম্পাদনা করুন লিংকটি একটি নতুন উইন্ডো বা ট্যাবে খোলে
JavaScript Exercism

মিক্সড জুস শুরু করতে প্রস্তুত?

Exercism-এ সাইন আপ করুন, JavaScript ট্র্যাকের 37টি কনসেপ্ট159টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।