Block এর ব্যবহারিক উদাহরণ

Blocks এবং Closures (ব্লক এবং ক্লোজার) - অবজেক্টিভ-সি (Objective-C) - Computer Programming

400

Objective-C তে Block হলো একটি anonymous function (নামহীন ফাংশন) যা কোডের একটি ব্লক হিসেবে কাজ করে এবং এটি একটি first-class object (প্রথম শ্রেণির অবজেক্ট)। ব্লকগুলি সাধারণত ফাংশন বা মেথডের মধ্যে ব্যবহার করা হয়, যাতে অ্যাসিনক্রোনাস বা ডেলিগেট ভিত্তিক কার্যকলাপ সম্পাদন করা যায়।

Block এর মৌলিক সিনট্যাক্স:

returnType (^blockName)(parameterTypes) = ^returnType(parameters) {
    // কোড ব্লক
};
  • returnType: ব্লকের রিটার্ন টাইপ।
  • blockName: ব্লকের নাম।
  • parameterTypes: ব্লকের প্যারামিটারগুলির টাইপ।
  • parameters: ব্লকের প্যারামিটার।

Block এর উদাহরণ

1. বেসিক ব্লক উদাহরণ

এখানে একটি সহজ ব্লক তৈরি করা হয়েছে যা দুটি সংখ্যার যোগফল রিটার্ন করবে।

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // একটি ব্লক ডিফাইন করা হচ্ছে
        int (^addBlock)(int, int) = ^(int a, int b) {
            return a + b;  // দুটি সংখ্যার যোগফল
        };
        
        // ব্লক কল করা হচ্ছে
        int result = addBlock(5, 3);  // 5 এবং 3 এর যোগফল
        NSLog(@"Result: %d", result);  // আউটপুট: 8
    }
    return 0;
}

ব্যাখ্যা:

  • addBlock হলো একটি ব্লক যা দুটি ইনটিজার প্যারামিটার গ্রহণ করে এবং তাদের যোগফল রিটার্ন করে।
  • ব্লকটি কল করা হচ্ছে addBlock(5, 3) এর মাধ্যমে এবং ফলাফলটি result তে সংরক্ষিত হচ্ছে।

2. Block এ ফাংশন প্যারামিটার হিসেবে ব্যবহার

ব্লককে ফাংশনের প্যারামিটার হিসেবে ব্যবহার করা হয় অনেক সময়, যেখানে ফাংশন একটি ব্লক গ্রহণ করে এবং সেটি এক্সিকিউট করে।

#import <Foundation/Foundation.h>

void performCalculation(int a, int b, int (^operationBlock)(int, int)) {
    int result = operationBlock(a, b);  // ব্লক কল
    NSLog(@"Calculation Result: %d", result);
}

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // একটি ব্লক ডিফাইন করা হচ্ছে
        int (^multiplyBlock)(int, int) = ^(int a, int b) {
            return a * b;  // দুটি সংখ্যার গুণফল
        };

        // ব্লকটি ফাংশনে পাঠানো হচ্ছে
        performCalculation(5, 4, multiplyBlock);  // আউটপুট: 20
    }
    return 0;
}

ব্যাখ্যা:

  • performCalculation একটি ফাংশন যা একটি ব্লক প্যারামিটার হিসেবে গ্রহণ করে এবং সেই ব্লকটি a এবং b মানের উপর কার্যকরী হয়।
  • এখানে multiplyBlock নামক ব্লকটি গুণফল বের করার জন্য ব্যবহার করা হচ্ছে।

3. Block এবং Memory Management

Objective-C তে ব্লক ব্যবহারের সময় memory management গুরুত্বপূর্ণ। বিশেষ করে, ব্লক যদি stack এ তৈরি হয়, তবে এটি যখন ব্যবহার না হয় তখন memory leak হতে পারে। আপনি ব্লকটি heap এ রাখতে পারেন এবং তারপর copy করে মেমরি ম্যানেজমেন্টের সমস্যা এড়িয়ে চলতে পারেন।

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // একটি ব্লক ডিফাইন করা হচ্ছে এবং এটি heap এ কপি করা হচ্ছে
        void (^block)(void) = ^{
            NSLog(@"This is a block!");
        };
        
        // block কে heap এ কপি করা হচ্ছে
        block = [block copy]; // block now lives on the heap
        
        // ব্লক কল করা হচ্ছে
        block();
    }
    return 0;
}

ব্যাখ্যা:

  • [block copy] এই লাইনে ব্লকটি heap এ কপি হচ্ছে। এটি মেমরি ম্যানেজমেন্টে সাহায্য করে যাতে ব্লকটি heap এ সংরক্ষিত থাকে এবং সঠিকভাবে রিলিজ করা যায়।

4. Global Variables এবং Block এর ব্যবহার

Bloks সাধারণত তাদের কাছের local variables এর মান অ্যাক্সেস করতে পারে। এই উপকারিতাটি "capturing" বলে পরিচিত। ব্লক কোন প্রকার ম্যানিপুলেশন না করেও, তার বাইরের local variable এর মান পরিবর্তন করতে সক্ষম।

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        int number = 5;
        
        // ব্লক যা local variable কে ক্যাপচার করছে
        void (^printBlock)(void) = ^{
            NSLog(@"Captured value: %d", number);  // ব্লক এর মধ্যে local variable ব্যবহৃত হচ্ছে
        };
        
        printBlock();  // আউটপুট: Captured value: 5
        
        number = 10;   // Local variable পরিবর্তন
        
        printBlock();  // আউটপুট: Captured value: 10
    }
    return 0;
}

ব্যাখ্যা:

  • ব্লকটি number নামে একটি লোকাল ভেরিয়েবল ক্যাপচার করছে এবং পরবর্তী সময়ে এই ভেরিয়েবলের মান পরিবর্তন করার পরও ব্লকটি তার নতুন মান অ্যাক্সেস করতে সক্ষম।

Block এর মূল বৈশিষ্ট্য:

  1. Anonymous Function: ব্লকগুলি সাধারণত নামহীন ফাংশন (Anonymous Functions) হিসাবে ব্যবহৃত হয়।
  2. Memory Management: ব্লকগুলো সাধারণত স্ট্যাক (stack) তে তৈরি হয়, তবে copy কিওয়ার্ড ব্যবহার করলে এগুলি heap এ চলে আসে।
  3. Capturing Variables: ব্লকগুলি তার আশেপাশের লোকাল ভেরিয়েবলগুলির মান ক্যাপচার করে ব্যবহার করতে পারে।
  4. Asynchronous Operations: ব্লকগুলি অ্যাসিনক্রোনাস কাজের জন্য যেমন GCD (Grand Central Dispatch), NSTimer ইত্যাদিতে ব্যবহার করা হয়।

Conclusion

Objective-C তে ব্লকগুলি শক্তিশালী এবং নমনীয় ফিচার, যা কোডের কার্যক্ষমতা বৃদ্ধি করতে এবং কোডকে আরও পাঠযোগ্য করতে সাহায্য করে। ব্লকগুলি সাধারণত অ্যাসিনক্রোনাস কার্যক্রম, callback functions, এবং ফাংশনাল প্রোগ্রামিং কৌশলে ব্যবহৃত হয়।

Content added By
Promotion

Are you sure to start over?

Loading...