python-basic

⌘K
  1. Home
  2. python-basic
  3. ফাংশন
  4. Decorator

Decorator

ডেকোরেটর (Decorator) পাইথনের একটি উন্নত ফিচার, যা একটি ফাংশন বা মেথডকে মোডিফাই (পরিবর্তন) করতে ব্যবহৃত হয়। ডেকোরেটরের মাধ্যমে আমরা নতুন ফিচার যোগ করতে পারি কোনো ফাংশনের মূল কোড পরিবর্তন না করেই। Django-তে ডেকোরেটর অনেক বেশি ব্যবহৃত হয়, যেমনঃ @login_required ডেকোরেটর ব্যবহার করা হয় নিশ্চিত করার জন্য যে, শুধুমাত্র লগ-ইন করা ইউজাররা কোনো নির্দিষ্ট পেজ বা ভিউ অ্যাক্সেস করতে পারবে।

ডেকোরেটর কীভাবে কাজ করে তা সহজ উদাহরণের মাধ্যমে দেখা যাক:

১. ফাংশনের ভেতর ফাংশন ও ডেকোরেটরের ধারণা

def simple_decorator(func):
    def wrapper():
        print("ফাংশনের আগে কিছু হচ্ছে")
        func()  # আসল ফাংশন কল করা হচ্ছে
        print("ফাংশনের পরে কিছু হচ্ছে")
    return wrapper  # wrapper ফাংশন রিটার্ন করা হচ্ছে

@simple_decorator  # ফাংশনের আগে ডেকোরেটর ব্যবহার করা হচ্ছে
def greet():
    print("Hello, World!")

# ফাংশন কল করলে ডেকোরেটরের কার্যক্রম দেখা যাবে
greet()

# Output:
# ফাংশনের আগে কিছু হচ্ছে
# Hello, World!
# ফাংশনের পরে কিছু হচ্ছে

ব্যাখ্যা:

  1. simple_decorator(func): এই ফাংশনটি একটি ফাংশনকে আর্গুমেন্ট হিসেবে গ্রহণ করে এবং wrapper নামক একটি নতুন ফাংশন তৈরি করে।
  2. wrapper(): এখানে ফাংশনের আগে এবং পরে কিছু প্রিন্ট করা হচ্ছে, এবং এরপর আসল ফাংশন func() কল করা হচ্ছে।
  3. @simple_decorator: এই ডেকোরেটরটি greet ফাংশনের ওপরে বসে, যাতে greet() ফাংশনকে কল করলে আগে ডেকোরেটরের কাজ সম্পন্ন হয়, তারপর আসল ফাংশনের কাজ হয়।

২. প্র্যাকটিকাল উদাহরণ: লগ ফাংশন

ধরা যাক আমরা এমন একটি ফাংশন তৈরি করতে চাই, যা কোনো ফাংশন কখন চালানো হচ্ছে এবং এর ফলাফল কী তা লগ করবে।

def log_decorator(func):
    def wrapper(*args, **kwargs):
        print(f"Function '{func.__name__}' called with arguments: {args} {kwargs}")
        result = func(*args, **kwargs)  # আসল ফাংশন চালানো হচ্ছে
        print(f"Function '{func.__name__}' returned: {result}")
        return result
    return wrapper

@log_decorator
def add(a, b):
    return a + b

@log_decorator
def subtract(a, b):
    return a - b

# ফাংশনগুলো কল করা
add(5, 3)
subtract(10, 7)

# Output:
# Function 'add' called with arguments: (5, 3) {}
# Function 'add' returned: 8
# Function 'subtract' called with arguments: (10, 7) {}
# Function 'subtract' returned: 3

Django-তে ডেকোরেটর ব্যবহারের উদাহরণ

Django-তে ডেকোরেটর খুবই দরকারী, যেমন @login_required ডেকোরেটর। এটি ব্যবহার করে আমরা নির্দিষ্ট ভিউতে শুধু লগ-ইন করা ইউজারদের এক্সেস দিতে পারি।

from django.contrib.auth.decorators import login_required
from django.shortcuts import render

@login_required
def dashboard(request):
    return render(request, 'dashboard.html')

# এই ভিউতে শুধু লগ-ইন করা ইউজাররাই এক্সেস করতে পারবে।

ব্যাখ্যা:

  • @login_required: এই ডেকোরেটরটি নিশ্চিত করে যে ইউজার লগ-ইন করা আছে কিনা। যদি না থাকে, তবে এটি ইউজারকে লগ-ইন পেজে পাঠিয়ে দেয়।

ডেকোরেটরের উপকারিতা:

  1. কোড পুনঃব্যবহারযোগ্যতা: একাধিক ফাংশনে ডেকোরেটর ব্যবহার করা যায়, যা কোডের পুনঃব্যবহারযোগ্যতা বাড়ায়।
  2. ফাংশনের কোড পরিবর্তন না করেই নতুন ফিচার যোগ করা: ডেকোরেটর ব্যবহার করে ফাংশনের ভেতরের কোড স্পর্শ না করেই এর কার্যক্ষমতা বাড়ানো যায়।
  3. কোডকে পরিষ্কার রাখা: ডেকোরেটর ব্যবহার করলে লজিকগুলো পৃথক করা যায়, যার ফলে মূল কোড পরিষ্কার থাকে।

উপসংহার:

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

How can we help?