Inherited from v1.0.0

চলক কীওয়ার্ড

var কারেন্ট স্কোপে একটি নতুন ভ্যারিয়েবল পরিচয় করায়। এটি Bnlang-এর একমাত্র ভ্যারিয়েবল-ডিক্লেয়ারেশন কীওয়ার্ড — কোনো let বা const নেই।

বাংলা রূপ চলকধরি সম্পূর্ণ সমার্থক — যেটা স্বাভাবিক মনে হয় সেটাই ব্যবহার করুন।

সিনট্যাক্স

var <name> = <expression>;
var <name>;              // ডিক্লেয়ার্ড, মান null

উদাহরণ

var greeting = "Hello";
var count    = 0;
var items    = [1, 2, 3];
var user     = { name: "আলিস" };

// initializer ছাড়া ভ্যারিয়েবল null হয়।
var pending;
print(pending);   // null

বাংলা রূপ একই ভাবে পার্স হয়:

চলক অভিবাদন = "হ্যালো";
চলক গণনা   = 0;

print(অভিবাদন, গণনা);   // হ্যালো 0

পুনঃঅ্যাসাইনমেন্ট

ভ্যারিয়েবল mutable। = দিয়ে অ্যাসাইন করুন:

var x = 1;
x = x + 1;
print(x);    // 2

কোনো compound অ্যাসাইনমেন্ট অপারেটর (+=, -=, ইত্যাদি) নেই। পূর্ণ রূপ লিখুন: x = x + 1

স্কোপ

var ডিক্লেয়ারেশন যে ব্লকে ({ ... } বডি) লেখা হয়, সেখানেই স্কোপড। লুকআপ বাইরের ফাংশনে, তারপর মডিউল টপ-লেভেলে পৌঁছায়।

var outer = "module";

function demo() {
    var outer = "function";   // মডিউল-লেভেল outer-কে shadow করে
    if (true) {
        var outer = "block";  // ফাংশন-লেভেল outer-কে shadow করে
        print(outer);         // "block"
    }
    print(outer);             // "function"
}

demo();
print(outer);                 // "module"

ক্লোজার

ইনার ফাংশন আউটার ভ্যারিয়েবল রেফারেন্স দিয়ে ক্যাপচার করে — মিউটেশন ক্লোজার থেকে দেখা যায়:

function make_counter() {
    var n = 0;
    return function () {
        n = n + 1;
        return n;
    };
}

var c = make_counter();
print(c());   // 1
print(c());   // 2
print(c());   // 3

যা এখানে নেই

  • কোনো let বা const নেই। সবকিছুর জন্য var ব্যবহার করুন। "এটি পরিবর্তন হওয়া উচিত নয়" বোঝাতে চাইলে নামকরণ কনভেনশন ব্যবহার করুন (UPPER_CASE কনস্ট্যান্ট একটি কমন কনভেনশন)।
  • কোনো destructuring নেই। প্রতিটি var ঠিক একটি নাম ডিক্লেয়ার করে। ফিল্ড এক্সট্রাক্ট করতে var x = obj.x; var y = obj.y; লিখুন।
  • কোনো multi-declare নেই। var a, b, c; সাপোর্টেড নয় — প্রতিটি ভ্যারিয়েবলের জন্য আলাদা স্টেটমেন্ট।