Function
ফাংশন
এমন একটা relation যেখানে প্রতিটা input-এর ঠিক একটা output — total এবং deterministic। প্রোগ্রামিং-এর অধিকাংশ 'function' গাণিতিক অর্থে function নয়।
f : A → B ⟺ ∀a ∈ A, ∃! b ∈ B : (a,b) ∈ f
দুইটা শর্ত: total (সব input-এ উত্তর আছে) আর deterministic (একই input, একই output)।
তিনটা শব্দ আলাদা রাখুন:
| মানে | |
|---|---|
| Domain | input কোথা থেকে আসে |
| Codomain | output কোথায় থাকতে পারে (type যা বলে) |
| Range | output-এ আসলে যা আসে |
Type system codomain বলে, range বলে না — আর এই ফাঁকেই type-correct কিন্তু ভুল কোড বাস করে।
প্রোগ্রামিং-এ প্রায়ই ভাঙে:
def f(x): return 10 / x # x=0 → total নয়
def g(): return random() # deterministic নয়
def h(x): counter += 1; return x # side effect
যেগুলো দুইটা শর্তই মানে তাদের বলে pure function — memoize করা যায়, সমান্তরালে চালানো যায়, পুনর্বিন্যাস করা যায়।
Partial function (domain-এর সব জায়গায় সংজ্ঞায়িত নয়) সামলানোর
সেরা উপায় domain সংকুচিত করা — NonZeroU32 -এর মতো — তখন ভুল
অবস্থাটা compile-time-এ অসম্ভব হয়ে যায়।