string
API summary (generated from the Beans source by npm run coverage): 28 instance methods.
string হলো immutable UTF-8 text। একবার string বানালে সেটা আর কখনো বদলায় না।
যে method একটা string “বদলায়” বলে মনে হয়, সেটা একটা নতুন string ফেরত দেয়।
string byte-ভিত্তিক। len() byte-এর সংখ্যা দেয়, character-এর না, আর এটা কখনো
বদলায় না। string-এর মধ্যে index হলো byte-এর অবস্থান।
string type একটা native builtin, যেটাতে পৌঁছানো হয় runtime ABI table দিয়ে —
compiler/beans/expression.b-তে।
string বানানো আর জোড়া লাগানো
“string বানানো আর জোড়া লাগানো” সেকশনstring-এ কোনো + নেই। কয়েক টুকরা থেকে string বানাতে interpolation ব্যবহার করা হয়:
let name: string = "beans"let greeting: string = "hi {name}"একটা List<string>-কে separator দিয়ে জোড়া লাগাতে List.join ব্যবহার করা হয়।
দেখুন Collections।
Size আর খালি কিনা
“Size আর খালি কিনা” সেকশনstring.len() -> intstring.is_empty() -> boollen()হলো byte-এর সংখ্যা, character-এর না।len()যখন 0, তখনis_empty()true।
টুকরা নেওয়া
“টুকরা নেওয়া” সেকশনstring.first(int) -> stringstring.last(int) -> stringstring.slice(int, int) -> stringstring.byte_at(int) -> intfirst(n)প্রথমnbyte দেয়;last(n)শেষnbyte দেয়।slice(from, to)[from, to)byte-range টা দেয় (to বাদ)। range যদি সীমার বাইরে যায়, panic হয়।byte_at(i)iindex-এর byte value দেয়, আরiসীমার বাইরে হলে panic হয়।
let s: string = "hello"let h: string = s.first(1)let lo: string = s.slice(3, 5)খোঁজা
“খোঁজা” সেকশনstring.contains(string) -> boolstring.starts_with(string) -> boolstring.ends_with(string) -> boolstring.find(string) -> Option<int>string.rfind(string) -> Option<int>contains,starts_with, আরends_withহ্যাঁ/না ধরনের প্রশ্নের উত্তর দেয়।findপ্রথম match-এর byte index দেয়,rfindদেয় শেষটার। খোঁজা জিনিসটা না থাকলে দুইটাইnoneদেয়।- খালি needle-এর বেলায়
findদেয়0, আরrfindদেয়len।
match "hello".find("ll") { some(i) => io.println("found at {i}"), none => io.println("not found"),}পরিষ্কার করা আর case
“পরিষ্কার করা আর case” সেকশনstring.trim() -> stringstring.trim_start() -> stringstring.trim_end() -> stringstring.to_upper() -> stringstring.to_lower() -> stringtrimদুই পাশ থেকে ASCII whitespace সরায়;trim_startআরtrim_endএক পাশ থেকে সরায়।to_upperআরto_lowerশুধু ASCII অক্ষর বদলায়। non-ASCII byte যেমন ছিল তেমনই থাকে।
নতুন string বানানো
“নতুন string বানানো” সেকশনstring.replace(string, string) -> stringstring.repeat(int) -> stringreplace(old, new)old-এর প্রতিটা match বদলে দেয়।oldখালি হলে কিছুই বদলায় না।repeat(n)string-টাnবার পুনরাবৃত্তি করে, আরnnegative হলে panic হয়।
ভাগ করা
“ভাগ করা” সেকশনstring.split(string) -> List<string>string.lines() -> List<string>split(sep)sep-এর ওপর ভাগ করে আর খালি টুকরাগুলোও রাখে।sepখালি হলে পুরো string-টাকেই একটা টুকরা হিসেবে দেয়।lines()string-টাকে লাইনে লাইনে ভাগ করে।
let parts: List<string> = "a,b,,c".split(",")// ["a", "b", "", "c"]number-এ parse করা
“number-এ parse করা” সেকশনstring.to_int() -> Result<int>string.to_float() -> Result<float>string.to_decimal() -> Result<decimal>প্রতিটা Result দেয়, কারণ text-টা হয়তো number নয়। দেখুন
Option, Result, আর Error।
Character (UTF-8)
“Character (UTF-8)” সেকশনlen() byte গোনে। নিচের দুইটা method গোটা UTF-8 character নিয়ে কাজ করে।
string.chars() -> List<string>string.count_chars(int, int) -> intchars()প্রতিটা UTF-8 character-কে নিজের একটা এক-character string হিসেবে দেয়।count_chars(from, to)[from, to)byte-range-এ কতগুলো character আছে তা দেয়।
নিচু-স্তরের সাহায্যকারী
“নিচু-স্তরের সাহায্যকারী” সেকশনএগুলো সরাসরি byte নিয়ে কাজ করে, আর সাধারণ return value দেয়, Option না।
string.find_byte(int, int) -> intstring.range_equals(int, int, string) -> boolstring.parse_int_range_or(int, int, int) -> intfind_byte(byte, from)fromবা তার পরেbyte-টা কোথায় আছে তার index দেয়, আর না থাকলে-1দেয়।range_equals(from, to, other)true হয় যখন[from, to)byte-range টাother-এর সমান।parse_int_range_or(from, to, fallback)byte-range-টাকে একটা int হিসেবে parse করে, আর number না হলেfallbackফেরত দেয়।
এক ঝলক ঘুরে দেখা
“এক ঝলক ঘুরে দেখা” সেকশনimport std.io
fn main() { let s: string = " Beans Language " let t: string = s.trim() io.println("{t.len()} bytes, empty {t.is_empty()}") io.println("{t.to_upper()} / {t.to_lower()}") io.println("{t.starts_with("Beans")} {t.contains("Lang")}")
match t.find("Lang") { some(i) => io.println("Lang at byte {i}"), none => io.println("not found"), }
let parts: List<string> = "a,b,,c".split(",") io.println("{parts.len()} parts, third is \"{parts[2]}\"")
let n: int = " 42 ".trim().to_int().expect("a number") io.println("{n + 1}")}আরও দেখুন
“আরও দেখুন” সেকশন- Bytes, বদলানো যায় এমন byte buffer।
- Numbers আর decimal, parse-এর target গুলো।
- Collections,
List<string>আরjoin।