Crystal-এ Bool নামে একটি টাইপ আছে।
এটি true এবং false মান নির্দেশ করে।
Crystal-এ তিনটি লজিক্যাল অপারেটর আছে (!, ||, &&), যেগুলো বুলিয়ান মান একসাথে যুক্ত করে এমন এক্সপ্রেশন তৈরি করে যার ফলাফল ভিন্ন ভিন্ন হতে পারে।
&&)Crystal-এ অ্যান্ড অপারেটর && দিয়ে প্রকাশ করা হয় এবং উভয় মান true হলে এটি true রিটার্ন করে; অন্যথায় false রিটার্ন করে।
অ্যান্ড অপারেটর ব্যবহার করার সময় একটি বুলিয়ান মান &&-এর ডান দিকে এবং অন্যটি বাম দিকে বসানো হয়।
true && true
# => true
true && false
# => false
||)Crystal-এ অর অপারেটর || দিয়ে প্রকাশ করা হয় এবং প্রদত্ত মানগুলোর অন্তত একটি true হলে এটি true রিটার্ন করে।
উভয় মানই false হলে এটি false রিটার্ন করে।
অর অপারেটর ব্যবহার করার সময় একটি বুলিয়ান মান ||-এর ডান দিকে এবং অন্যটি বাম দিকে বসানো উচিত।
true || true
# => true
true || false
# => true
false || false
# => false
!)Crystal-এ নট অপারেটর ! দিয়ে প্রকাশ করা হয় এবং প্রদত্ত বুলিয়ানটি false হলে true রিটার্ন করে, আর true দিলে false রিটার্ন করে।
নট অপারেটর ব্যবহার করার সময় বুলিয়ান মানটি অপারেটরের (!) পরে বসানো উচিত।
!true
# => false
!false
# => true
()) ব্যবহারবুলিয়ান নিয়ে কাজ করার সময়, কোন বুলিয়ানটি আগে মূল্যায়ন হবে তা ঠিক করতে আপনি বন্ধনী ব্যবহার করতে পারেন। বন্ধনী কীভাবে ব্যবহার করা হয়েছে তার উপর নির্ভর করে ফলাফল ভিন্ন হতে পারে। Crystal-এ বন্ধনীর ভেতরের অংশ আগে মূল্যায়ন করা হয়।
true && false && false || true
# => true
true && false && (false || true)
# => false
যেহেতু বন্ধনীর ভেতরের অংশ আগে মূল্যায়ন করা হয়, তাই নিচের উদাহরণে নট অপারেটরটি বন্ধনীর ভেতরের এক্সপ্রেশনের উপর প্রযোজ্য হবে।
!true && false
# => false
!(true && false)
# => true
বন্ধনী কেবল তখনই ব্যবহার করা উচিত যখন সেগুলো ফলাফলকে প্রভাবিত করে; অন্যথায় সেগুলো বাদ দেওয়া উচিত।
আপনি এখন নতুন ও বহুল প্রশংসিত গেম ক্রিস্টাল হান্টার তৈরির কাজ করছেন। গেমটিতে আপনি এমন একটি চরিত্র, যে এদিক-ওদিক ঘোরে আর ক্রিস্টাল সংগ্রহ করে। খেলোয়াড় সব ক্রিস্টাল তুলে নিলে জিতে যায়। খেলোয়াড় কোনো ডাকাতের সংস্পর্শে এলে তার সব ক্রিস্টাল হারিয়ে যায় এবং খেলাটিও হেরে যায়। এই নিয়মের একটি ব্যতিক্রম আছে: খেলোয়াড়ের একটি সক্রিয় পাওয়ার-আপ থাকতে পারে, যা তাকে ডাকাতদের কাছে অদৃশ্য করে দেয়।
আপনার লক্ষ্য হলো গেমে ব্যবহৃত কিছু নিয়ম লেখা।
গেমে চরিত্রটি পাওয়ার-আপ সক্রিয় থাকা অবস্থায় কোনো ডাকাতকে স্পর্শ করলে বোনাস পয়েন্ট পায়।
Rules#bonus_points? মেথডটি ডিফাইন করুন, যা দুটি আর্গুমেন্ট নেয় (চরিত্রটির সক্রিয় পাওয়ার-আপ আছে কি না এবং চরিত্রটি কোনো ডাকাতকে স্পর্শ করছে কি না) এবং একটি বুলিয়ান মান রিটার্ন করে, যা জানায় চরিত্রটি বোনাস পয়েন্ট পাবে কি না। মেথডটি true রিটার্ন করবে কেবল তখনই, যখন চরিত্রটির একটি পাওয়ার-আপ সক্রিয় থাকে এবং সে একটি ডাকাতকে স্পর্শ করছে, অন্যথায় false।
Rules.new.bonus_points?(false, true)
# => false
খেলোয়াড় কোনো ক্রিস্টাল বা পাওয়ার-আপ তুলে নেওয়ার সময় পয়েন্ট পায়।
Rules#score? মেথডটি ডিফাইন করুন, যা দুটি আর্গুমেন্ট নেয় (চরিত্রটি কোনো পাওয়ার-আপ স্পর্শ করছে কি না এবং চরিত্রটি কোনো ক্রিস্টাল স্পর্শ করছে কি না) এবং একটি বুলিয়ান মান রিটার্ন করে, যা জানায় চরিত্রটি পয়েন্ট পেয়েছে কি না। মেথডটি true রিটার্ন করবে যদি চরিত্রটি কোনো পাওয়ার-আপ বা ক্রিস্টাল স্পর্শ করে, আর অন্যথায় false রিটার্ন করবে।
Rules.new.score?(true, true)
# => true
Rules#lose? মেথডটি ডিফাইন করুন, যা দুটি আর্গুমেন্ট নেয় (চরিত্রটির সক্রিয় পাওয়ার-আপ আছে কি না এবং চরিত্রটি কোনো ডাকাতকে স্পর্শ করছে কি না) এবং একটি বুলিয়ান মান রিটার্ন করে, যা জানায় চরিত্রটি হারে কি না। মেথডটি true রিটার্ন করবে যদি চরিত্রটি কোনো ডাকাতকে স্পর্শ করে এবং তার কোনো সক্রিয় পাওয়ার-আপ না থাকে, আর অন্যথায় false রিটার্ন করবে।
Rules.new.lose?(false, true)
# => true
Rules#win? মেথডটি ডিফাইন করুন, যা তিনটি আর্গুমেন্ট নেয় (চরিত্রটি সব ক্রিস্টাল তুলে নিয়েছে কি না, চরিত্রটির সক্রিয় পাওয়ার-আপ আছে কি না, এবং চরিত্রটি কোনো ডাকাতকে স্পর্শ করছে কি না) এবং একটি বুলিয়ান মান রিটার্ন করে, যা জানায় চরিত্রটি জেতে কি না। মেথডটি true রিটার্ন করবে যদি চরিত্রটি সব ক্রিস্টাল সংগ্রহ করে থাকে এবং ৩ নম্বর অংশে বর্ণিত আর্গুমেন্টের ভিত্তিতে না হারে, আর অন্যথায় false রিটার্ন করবে।
Rules.new.win?(false, true, false)
# => false
Exercism-এ সাইন আপ করুন, Crystal ট্র্যাকের 26টি কনসেপ্ট142টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।