Bnlang এ কমান্ড লাইন থেকে ইনপুট নেওয়া

Bnlang-এ কমান্ড লাইন আর্গুমেন্ট পড়ার দু'টি লেয়ার আছে:

  • sys.arg(i) — কাঁচা, লো-লেভেল অ্যাক্সেসর। এক-দু'টি পজিশনাল ইনপুটের জন্য ভালো।
  • cli মডিউল — ফ্ল্যাগ, অপশন এবং পজিশনাল আর্গুমেন্টের জন্য একটি ডিক্লেয়ারেটিভ পার্সার। যখন আপনার আরো স্ট্রাকচার্ড কিছু থাকে তখন ভালো।

Raw Access with sys.arg

sys.argc() ফেরত দেয় স্ক্রিপ্ট কত আর্গুমেন্ট পেয়েছে; sys.arg(i) ফেরত দেয় i-তম টা (0-ইনডেক্সড)। স্ক্রিপ্ট পাথ নিজেকে গণনা করা হয় না

// file: greet.bnl
import "sys" as sys;

var name = "Guest";
if (sys.argc() > 0) { name = sys.arg(0); }

print("Hello,", name);
bnl greet.bnl Alice
# Output: Hello, Alice

Structured Parsing with the cli Library

এক-দু'টা পজিশনাল ইনপুটের বাইরে যাকিছু, cli লাইব্রেরি দিয়ে আপনার CLI শেপ ডিক্লেয়ার করুন। ফ্ল্যাগ, অপশন (মান-সহ), পজিশনাল আর্গুমেন্ট, এবং একটি অটো-জেনারেটেড --help স্ট্রিং পাবেন।

// file: greet.bnl
import "cli" as cli;

var p = cli.parser("greet");
p.description = "Print a greeting.";
cli.flag    (p, {name: "shout",  short: "s", help: "Use upper case"});
cli.option  (p, {name: "lang",   short: "l", help: "en or bn", default: "en"});
cli.positional(p, {name: "name", help: "Who to greet"});

var args = cli.parse(p);

var msg = "Hello, ";
if (args.lang == "bn") { msg = "হ্যালো, "; }
msg = msg + args.name + "!";

if (args.shout) { msg = msg.to_upper(); }
print(msg);
bnl greet.bnl Alice
# Hello, Alice!

bnl greet.bnl -l bn আলিস
# হ্যালো, আলিস!

bnl greet.bnl -s Alice
# HELLO, ALICE!

Showing Help

cli.usage(p) অটো-জেনারেটেড হেল্প টেক্সট ফেরত দেয়। নিজের --help ফ্ল্যাগ ডিফাইন করুন এবং পার্সিং-এর পরে চেক করুন:

cli.flag(p, {name: "help", short: "h", help: "Show usage"});
var args = cli.parse(p);
if (args.help) {
    print(cli.usage(p));
    return;
}

Best Practices

  • দু'টার বেশি ইনপুট, বা কোনো অপশনাল ফ্ল্যাগ থাকলে সাথে সাথে cli ব্যবহার করুন। হ্যান্ডরিটেন পার্সিং-এর চেয়ে এটা মেইনটেন করা অনেক সহজ।
  • যুক্তিসঙ্গত ডিফল্ট দিন, যাতে কোনো আর্গুমেন্ট ছাড়াই স্ক্রিপ্ট কিছু কাজের কাজ করে।
  • ভুল ইনপুটে একটি usage hint প্রিন্ট করুন এবং non-zero কোড দিয়ে এক্সিট করুন।