শ্রেণী / প্রসারিত / উপরের
একটি 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