۴

توابع (Functions)

تایپ‌بندی پارامترهای ورودی و مقادیر خروجی توابع.

تایپ‌بندی توابع

در تایپ‌اسکریپت، می‌تونیم به طور دقیق مشخص کنیم که یه تابع چه نوع پارامترهایی رو قبول می‌کنه و چه نوع مقداری رو برمی‌گردونه. این کار خوانایی و اطمینان کد رو به شدت بالا می‌بره.

// پارامترها و مقدار خروجی، هر دو تایپ‌بندی شده‌اند
function add(num1: number, num2: number): number {
  return num1 + num2;
}

// اگه تابع چیزی برنگردونه، از void استفاده می‌کنیم
function logMessage(message: string): void {
  console.log(message);
}

let result: number = add(10, 20);
// let wrongResult: string = add(5, 5); // Error! Type 'number' is not assignable to type 'string'.

پارامترهای اختیاری و پیش‌فرض

می‌تونیم بعضی از پارامترهای تابع رو اختیاری کنیم (با `?`) یا براشون یه مقدار پیش‌فرض در نظر بگیریم.

// lastName اختیاری است
function buildName(firstName: string, lastName?: string): string {
    if (lastName) {
        return firstName + " " + lastName;
    } else {
        return firstName;
    }
}

// system دارای مقدار پیش‌فرض است
function logIn(username: string, system: string = "Main Server"): void {
    console.log(`${username} logged into ${system}`);
}

let name1 = buildName("علی"); // "علی"
let name2 = buildName("علی", "رضایی"); // "علی رضایی"

logIn("admin"); // "admin logged into Main Server"

تمرین! 🧠

یه تابع به اسم `calculateArea` بنویس که طول و عرض (هر دو از نوع عدد) رو بگیره و مساحت رو برگردونه. کاری کن که اگه عرض داده نشد، شکل رو مربع فرض کنه و از مقدار طول برای عرض هم استفاده کنه (پارامتر اختیاری).

جواب تمرین

function calculateArea(length: number, width?: number): number {
  // اگه عرض وجود نداشت، اون رو برابر با طول قرار بده
  const finalWidth = width ?? length;
  return length * finalWidth;
}

const rectangleArea = calculateArea(10, 5); // 50
const squareArea = calculateArea(7); // 49

console.log(`مساحت مستطیل: ${rectangleArea}`);
console.log(`مساحت مربع: ${squareArea}`);