শ্রেণী / প্রসারিত / উপরের

একটি class মেথড ও ফিল্ডসহ একটি টাইপ ডিফাইন করে। extends একটি প্যারেন্ট ক্লাস থেকে inheritance ঘোষণা করে। super প্যারেন্টে chain করে (constructor বা method)। বাংলা রূপ শ্রেণী, প্রসারিত, এবং উপরের

একটি ক্লাস ডিফাইন

মেথড তাদের প্রথম parameter হিসেবে স্পষ্টভাবে self নেয় — কোনো implicit this নেই। init মেথড থাকলে, construction-এ চলে।

class Counter {
    function init(self, start) {
        self.value = start;
    }
    function increment(self) {
        self.value = self.value + 1;
    }
    function get(self) {
        return self.value;
    }
}

var c = Counter(10);     // কোনো `new` কীওয়ার্ড নেই
c.increment();
c.increment();
print(c.get());          // 12

নোট:

  • Construction হলো ClassName(args)কোনো new কীওয়ার্ড নেই
  • Method কল (c.increment()) স্বয়ংক্রিয়ভাবে instance-কে self হিসেবে পাস করে।
  • যদি ক্লাসে init না থাকে, zero-arg construction কাজ করে: Bag()
  • ফিল্ড সেট হয় self.field = value দিয়ে এবং পড়া হয় self.field (অথবা বাইরে থেকে obj.field)।

extends দিয়ে inheritance

class Animal {
    function init(self, name) {
        self.name = name;
    }
    function speak(self) {
        return self.name + " makes a sound";
    }
}

class Dog extends Animal {
    function init(self, name, breed) {
        super(name);              // প্যারেন্টের init chain
        self.breed = breed;
    }
    function speak(self) {        // override
        return self.name + " barks";
    }
}

var d = Dog("Rex", "labrador");
print(d.speak());                 // Rex barks

init-এর ভেতরে super(...) প্যারেন্টের constructor কল করে।

প্যারেন্ট মেথড কল

প্যারেন্টের method-এর version-এ delegate করতে super.method(args) ব্যবহার করুন:

class Dog extends Animal {
    function describe(self) {
        return super.describe() + " breed=" + self.breed;
    }
}

আপনি একাধিক লেভেল চেইন করতে পারেন — একটি subclass-এর super.x() এর সরাসরি প্যারেন্টের বিপরীতে resolve হয়।

Multi-level inheritance

class Puppy extends Dog {
    function speak(self) {
        return super.speak() + " (puppy yip!)";
    }
}

var p = Puppy("Buddy", "poodle");
print(p.speak());    // Buddy barks (puppy yip!)

যা এখানে নেই

  • কোনো this নেই। সবসময় self ব্যবহার করুন, method-এর প্রথম parameter হিসেবে।
  • কোনো new নেই। শুধু ক্লাস কল করুন: Counter(10)
  • কোনো static মেথড নেই। Module-level হেল্পার দরকার হলে একটি top-level ফাংশন লিখুন।
  • কোনো access modifier নেই। private / protected / public নেই — সব ফিল্ড ও মেথড অ্যাক্সেসযোগ্য।
  • কোনো multiple inheritance নেই। একটি ক্লাস সর্বাধিক একটি প্যারেন্ট extend করে।

বাংলা রূপ

শ্রেণী Counter {
    ফাংশন init(self, start) {
        self.value = start;
    }
    ফাংশন increment(self) {
        self.value = self.value + 1;
    }
}

চলক c = Counter(10);
c.increment();
print(c.value);   // 11