Swift-এ Bool নামে একটি বিল্ট-ইন টাইপ আছে, যা দিয়ে সত্য মান বোঝানো হয়: true এবং false।
বুলিয়ান এক্সপ্রেশন একত্রে জুড়তে ও মূল্যায়ন করতে Swift তিনটি লজিক্যাল অপারেটর (!, && এবং ||) দেয়।
&&)and অপারেটর (&&) true রিটার্ন করে কেবল তখনই, যখন দুই অপারেন্ডই true।
যেকোনো একটি অপারেন্ড false হলে এটি false রিটার্ন করে।
&& চিহ্নের দুই পাশে একটি এক্সপ্রেশন বা বুলিয়ান মান বসান:
true && true // true
true && false // false
||)or অপারেটর (||) true রিটার্ন করে যদি অপারেন্ডগুলোর অন্তত একটি true হয়।
দুই অপারেন্ডই false হলে এটি কেবল তখনই false রিটার্ন করে।
|| চিহ্নের দুই পাশে একটি এক্সপ্রেশন বা বুলিয়ান মান বসান:
true || true // true
true || false // true
false || false // false
!)not অপারেটর (!) একটি বুলিয়ান মান উল্টে দেয়।
মানটি false হলে এটি true রিটার্ন করে, আর মানটি true হলে false।
! অপারেটরটি মান বা এক্সপ্রেশনের ঠিক আগে বসান:
!true // false
!false // true
()) ব্যবহারএক্সপ্রেশনগুলো গ্রুপ করতে এবং মূল্যায়নের ক্রম নিয়ন্ত্রণ করতে আপনি বন্ধনী ব্যবহার করতে পারেন। Swift-এ বন্ধনীর ভেতরের এক্সপ্রেশনগুলো আগে মূল্যায়ন করা হয়:
true && false && false || true // true
true && false && (false || true) // false
বন্ধনী দিয়ে গ্রুপ করলে এটিও নির্ধারিত হয়, জটিল এক্সপ্রেশনে NOT অপারেটর কীভাবে প্রয়োগ হবে:
!true && false // false (evaluates (!true) first, then false && false)
!(true && false) // true (evaluates (true && false) first to false, then !false)
মূল্যায়নের ক্রম স্পষ্ট করতে বা জটিল শর্তগুলো পড়তে সহজ করতে বন্ধনী ব্যবহার করুন। ডিফল্ট অগ্রাধিকার আগে থেকেই স্পষ্ট হলে অপ্রয়োজনীয় বন্ধনী যোগ করা এড়িয়ে চলুন।
আপনি এখন নতুন, অত্যন্ত সমাদৃত গেম উইংস কোয়েস্ট তৈরির কাজে নেমেছেন। গেমটিতে আপনি একটি পাখি, যিনি এদিক-ওদিক ঘুরে বীজ সংগ্রহ করেন। খেলোয়াড় সব বীজ কুড়িয়ে নিলে জিতে যায়। খেলোয়াড় যদি কোনো ঈগলের সংস্পর্শে আসে, তাহলে সে তার সব বীজ হারাবে এবং খেলাটি হারবে। এই নিয়মের একটি ব্যতিক্রম আছে: খেলোয়াড়ের একটি সক্রিয় পাওয়ার-আপ থাকতে পারে, যা তাকে অন্য পাখিদের চেয়ে উঁচুতে উড়তে দেয়।
আপনার লক্ষ্য হলো গেমটিতে ব্যবহার হবে এমন কিছু নিয়ম লেখা।
গেমটিতে পাখি যদি পাওয়ার-আপ থাকা অবস্থায় কোনো ঈগল স্পর্শ করে, তবে সে বোনাস পয়েন্ট পাবে।
bonusPoints(powerUpActive:touchingEagle:) ফাংশনটি ডিফাইন করুন, যা দুটি আর্গুমেন্ট নেয়: powerUpActive, যেখানে থাকে পাখির একটি সক্রিয় পাওয়ার-আপ আছে কি না, এবং touchingEagle, যেখানে থাকে পাখিটি কোনো ঈগল স্পর্শ করছে কি না।
ফাংশনটি true রিটার্ন করবে কেবল তখনই, যখন পাখির একটি সক্রিয় পাওয়ার-আপ আছে এবং সে কোনো ঈগল স্পর্শ করছে; অন্যথায় false রিটার্ন করবে।
bonusPoints(powerUpActive: false, touchingEagle: true)
// Returns false
গেমটিতে খেলোয়াড় একটি বীজ বা একটি পাওয়ার-আপ কুড়িয়ে নিলে পয়েন্ট পায়।
score(touchingPowerUp:touchingSeed:) ফাংশনটি ডিফাইন করুন, যা দুটি আর্গুমেন্ট নেয়: touchingPowerUp, যেখানে থাকে পাখিটি একটি পাওয়ার-আপ স্পর্শ করছে কি না, এবং touchingSeed, যেখানে থাকে পাখিটি একটি বীজ স্পর্শ করছে কি না।
পাখি যদি একটি পাওয়ার-আপ বা একটি বীজ স্পর্শ করে, তবে ফাংশনটি true রিটার্ন করবে; অন্যথায় false রিটার্ন করবে।
score(touchingPowerUp: true, touchingSeed: true)
// Returns true
lose(powerUpActive:touchingEagle:) ফাংশনটি ডিফাইন করুন, যা দুটি আর্গুমেন্ট নেয়: powerUpActive, যেখানে থাকে পাখির একটি সক্রিয় পাওয়ার-আপ আছে কি না, এবং touchingEagle, যেখানে থাকে পাখিটি কোনো ঈগল স্পর্শ করছে কি না।
ক্যারেক্টারটি যদি কোনো ঈগল স্পর্শ করে এবং তার কোনো সক্রিয় পাওয়ার-আপ না থাকে, তবে ফাংশনটি true রিটার্ন করবে; অন্যথায় false রিটার্ন করবে।
lose(powerUpActive: false, touchingEagle: true)
// Returns true
win(hasPickedUpAllSeeds:powerUpActive:touchingEagle:) ফাংশনটি ডিফাইন করুন, যা এই আর্গুমেন্টগুলো নেয়:
hasPickedUpAllSeeds, যদি পাখি সব বীজ কুড়িয়ে নিয়ে থাকে।powerUpActive, যদি পাখির একটি সক্রিয় পাওয়ার-আপ থাকে।touchingEagle, যদি পাখি কোনো ঈগল স্পর্শ করছে।পাখি যদি সব বীজ সংগ্রহ করে থাকে এবং ৩ নম্বর অংশে নির্ধারিত আর্গুমেন্ট অনুযায়ী না হারে, তবে ফাংশনটি true রিটার্ন করবে; অন্যথায় false রিটার্ন করবে।
win(hasPickedUpAllSeeds: false, powerUpActive: true, touchingEagle: false)
// Returns false
Exercism-এ সাইন আপ করুন, Swift ট্র্যাকের 35টি কনসেপ্ট116টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।