পাইথনের `truthy` এবং `falsy`

পাইথনের `truthy` এবং `falsy`

এই প্রবন্ধে পাইথনের truthy এবং falsy ব্যাখ্যা করা হয়েছে।

YouTube Video

পাইথনের truthy এবং falsy

truthy এবং falsy-এর সংজ্ঞা

পাইথনে, শর্তগত এক্সপ্রেশনে মূল্যায়িত বস্তুদের 'True' বা 'False' হিসাবে বিবেচনা করা হয়। Truthy বলতে বোঝায় যেগুলি 'True' হিসেবে মূল্যায়িত হয়, এবং falsy বলতে বোঝায় যেগুলি 'False' হিসেবে মূল্যায়িত হয়। এই মূল্যায়ন প্রায়শই শর্তাধীন শাখায় যেমন if স্টেটমেন্ট বা while লুপে ব্যবহৃত হয়। এছাড়াও, bool() ফাংশনটি যেকোনো অবজেক্ট নেয় এবং তার বুলিয়ান মান রিটার্ন করে।

Falsy (যেসব বস্তু 'False' হিসেবে মূল্যায়িত হয়)

পাইথনে, নিম্নলিখিত অবজেক্টগুলোকে falsy হিসাবে বিবেচনা করা হয়:।

  • মিথ্যা

  • কিছুই নয়

  • সংখ্যাগত শূন্য মানসমূহ

    • উদাহরণ: 0, 0.0
  • ফাঁকা সিকোয়েন্স টাইপ (যেমন ফাঁকা লিস্ট, টিউপল, বা স্ট্রিং)

    • উদাহরণ: [], (), ""
  • শূন্য ডিকশনারি

    • উদাহরণ: {}
  • শূন্য সেট

    • উদাহরণ: set()

এই বস্তুগুলি একটি if বিবৃতির শর্তে ব্যবহৃত হলে 'মিথ্যা' হিসেবে মূল্যায়িত হয়। উদাহরণস্বরূপ, আপনি এই রকম কোড লিখতে পারেন।

1if not []:
2    print("The list is falsy.")
  • এই কোডে, তালিকা [] শূন্য, তাই এটি মিথ্যা হিসেবে মূল্যায়িত হয়, এবং print বিবৃতি কার্যকর হয়।

Truthy (যেসব বস্তু 'True' হিসেবে মূল্যায়িত হয়)

falsy হিসেবে ধরা হয় না এমন অবজেক্টগুলোকে truthy হিসেবে গণ্য করা হয়।

  • শূন্য নয় এমন সংখ্যা (ইন্টিজার, ফ্লোটিং পয়েন্ট সংখ্যা)

    • উদাহরণ: 1, 3.14, -100
  • ফাঁকা নয় এমন সিকোয়েন্স টাইপ (লিস্ট, টিউপল, স্ট্রিং ইত্যাদি)

    • উদাহরণ: [1, 2, 3], (1, 2), "Hello"
  • ফাঁকা নয় এমন ডিকশনারি

    • উদাহরণ: {"key": "value"}
  • ফাঁকা নয় এমন সেট

    • উদাহরণ: {1, 2, 3}

truthy হিসেবে বিবেচিত অবজেক্টগুলো if শর্তে ব্যবহৃত হলে 'True' হিসেবে মূল্যায়িত হয়। উদাহরণস্বরূপ, আপনি এই রকম কোড লিখতে পারেন।

1if [1, 2, 3]:
2    print("The list is truthy.")
  • উপরের কোডে, কারণ লিস্ট [1, 2, 3] ফাঁকা নয়, এটি truthy হিসাবে মূল্যায়িত হয় এবং print স্টেটমেন্টটি কার্যকর হয়।

bool() ফাংশন দিয়ে বুলিয়ান মান মূল্যায়ন

আপনি bool() ফাংশন ব্যবহার করে অবজেক্টগুলোর বুলিয়ান মান মূল্যায়ন করতে পারেন।

 1# Examples of falsy values
 2print("False is", "truthy" if bool(False) else "falsy")
 3print("0 is", "truthy" if bool(0) else "falsy")
 4print('"" is', "truthy" if bool("") else "falsy")
 5print("None is", "truthy" if bool(None) else "falsy")
 6print("[] is", "truthy" if bool([]) else "falsy")
 7
 8# Examples of truthy values
 9print("1 is", "truthy" if bool(1) else "falsy")
10print('"hello" is', "truthy" if bool("hello") else "falsy")
11print('" " (space) is', "truthy" if bool(" ") else "falsy")
12print('"0" is', "truthy" if bool("0") else "falsy")
  • এই কোডটি প্রদর্শন করে কীভাবে বিভিন্ন মানের সত্য-মূল্য মূল্যায়ন করা হয়। উদাহরণস্বরূপ, সংখ্যাগত মান 0 এবং একটি ফাঁকা স্ট্রিংকে False বলে গণ্য করা হয়, যেখানে একটি স্পেস বা স্ট্রিং "0"-কে True বলে গণ্য করা হয়।

truthy এবং falsy এর ব্যবহার

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

1my_list = [1]
2
3# Explicit comparison
4if my_list != []:
5    print("The list is not empty.")
6
7# Using truthy/falsy
8if my_list:
9    print("The list is not empty.")

উপরে দেওয়া উদাহরণে, আপনি দেখতে পাচ্ছেন যে তালিকা my_list শূন্য না থাকলে এটিকে truthy হিসেবে মূল্যায়িত করা হয়, যা স্পষ্ট তুলনার প্রয়োজনীয়তা দূর করে।

truthy এবং falsy দিয়ে ডিজাইন করা

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

1def process_data(data=None):
2    data = data or []
3    print(data)
4
5process_data()  # An empty list is used by default.
  • এই কোডে, যদি data None হয়, তাহলে ডিফল্ট মান হিসেবে ফাঁকা লিস্ট [] সেট করা হয়। এই পদ্ধতিতে, truthy এবং falsy ব্যবহার করে আপনি সংক্ষেপে ডিফল্ট মান সেট করতে পারেন।

অপ্রত্যাশিত আচরণ এড়াতে লক্ষ্য করার বিষয়বস্তু

তবে, truthy এবং falsy মান ব্যবহারকারী কোড সংক্ষিপ্ত ও সুবিধাজনক হলেও, এটি কখনও কখনও অপ্রত্যাশিত আচরণের কারণ হতে পারে তা মনে রাখা দরকার। উদাহরণস্বরূপ, এই কোডে শুধু data যখন None সেটি নয়, বরং যখন এটিকে False হিসাবে মূল্যায়ন করা হয় (যেমন ফাঁকা স্ট্রিং বা 0), তখনও এটি ডিফল্ট ফাঁকা লিস্ট [] দিয়ে প্রতিস্থাপিত হবে। এই কারণে, যখন একটি কঠোর শর্ত প্রয়োজন, যেমন কেবলমাত্র মানটি None হলে ইনিশিয়ালাইজ করা, তখন value is None: এর মত স্পষ্ট শর্ত ব্যবহার করার পরামর্শ দেওয়া হয়। পরিস্থিতির উপর নির্ভর করে, সংক্ষিপ্ততা ও কঠোরতার মধ্যে ভারসাম্য রেখে ডিজাইন করা গুরুত্বপূর্ণ।

1def process_data(data=None):
2    if data is None:
3        data = []
4    print(data)
5
6process_data()   # An empty list is used by default.
7process_data(0)  # 0 is printed because it's not None.
  • এই কোডে, data-কে শুধুমাত্র তখনই ফাঁকা তালিকা হিসেবে নির্ধারণ করা হয় যখন এটি None, যখন অন্য ভুল (Falsy) মান যেমন 0 অপরিবর্তিত থাকে।

কাস্টম অবজেক্টে বুলিয়ান মান নিয়ন্ত্রণ

আপনার নিজের ক্লাসেও, __bool__() অথবা __len__() ডিফাইন করে একটি ইনস্ট্যান্সের বুলিয়ান মান নিয়ন্ত্রণ করতে পারেন।

 1class MyContainer:
 2    def __init__(self, items):
 3        self.items = items
 4
 5    def __len__(self):
 6        return len(self.items)
 7
 8box = MyContainer([])
 9print(bool(box))  # False
10
11box.items.append("item")
12print(bool(box))  # True
  • এই কোডে, __len__() মেথড কনটেইনারটি ফাঁকা হলে False এবং উপাদান থাকলে True হিসেব মূল্যায়ন করে।

উপসংহার

Python-এ truthy এবং falsy ধারণাগুলি সংক্ষিপ্ত শর্তযুক্ত বিবৃতি লেখার এবং কোডকে আরও স্বচ্ছন্দ করার জন্য অত্যন্ত গুরুত্বপূর্ণ। এগুলিকে বোঝা এবং সঠিকভাবে ব্যবহার করা কোডের পাঠযোগ্যতা এবং দক্ষতা ব্যাপকভাবে বৃদ্ধি করতে পারে।

আপনি আমাদের ইউটিউব চ্যানেলে ভিজ্যুয়াল স্টুডিও কোড ব্যবহার করে উপরের নিবন্ধটি অনুসরণ করতে পারেন। দয়া করে ইউটিউব চ্যানেলটিও দেখুন।

YouTube Video