تابع (Function) در واقع یک تکه کد است که فقط وقتی صدا زده شود اجرا می‌شود.

✅ می‌توانیم داده‌هایی را به تابع ارسال کنیم (که به آن پارامتر می‌گویند).
✅ توابع برای انجام کارهای مشخصی استفاده می‌شوند و در برخی موارد، متد (Method) هم نامیده می‌شوند.

1️⃣ توابع از پیش تعریف‌شده در Kotlin

شاید ندانید، ولی از توابع از پیش تعریف‌شده در Kotlin استفاده کرده‌اید! 😎

مثلاً همین ()println که برای نمایش متن روی صفحه استفاده می‌شود، یک تابع است:

fun main() {
  println("سلام دنیا!") // خروجی: سلام دنیا!
}

2️⃣ چطور یک تابع بسازیم؟

برای تعریف تابع در Kotlin، از کلمه‌ی کلیدی fun استفاده می‌کنیم. بعد از آن، نام تابع و پرانتز () می‌آید.

📌 مثال: یک تابع به اسم myFunction بسازیم که یک متن را روی صفحه چاپ کند:

fun myFunction() {
  println("من اجرا شدم!")
}

حالا این تابع آماده است، ولی هنوز اجرا نمی‌شود! باید آن را صدا بزنیم.


3️⃣ چطور یک تابع را اجرا کنیم؟

وقتی تابع را تعریف کردیم، برای اجرای آن کافی است نام تابع را همراه با () بنویسیم:

fun main() {
  myFunction() // صدا زدن تابع
}

🔹 خروجی:

من اجرا شدم!

🔸 می‌توانیم یک تابع را چند بار صدا بزنیم:

fun main() {
  myFunction()
  myFunction()
  myFunction()
}

🔹 خروجی:

من اجرا شدم!
من اجرا شدم!
من اجرا شدم!

4️⃣ ارسال اطلاعات به تابع (پارامترها)

می‌توانیم هنگام صدا زدن تابع، به آن اطلاعات بدهیم. به این اطلاعات پارامتر (Parameter) می‌گوییم.

📌 مثال: تابعی بنویسیم که نام افراد را دریافت کرده و آن‌ها را همراه با “Doe” چاپ کند:

fun myFunction(fname: String) {
  println(fname + " Doe")
}

fun main() {
  myFunction("John")
  myFunction("Jane")
  myFunction("George")
}

🔹 خروجی:

John Doe
Jane Doe
George Doe

🔸 در اینجا، fname پارامتر است و "John"، "Jane" و "George" آرگومان‌هایی هستند که هنگام اجرای تابع به آن ارسال شده‌اند.


5️⃣ ارسال چندین مقدار به تابع

می‌توانیم به یک تابع چندین پارامتر بدهیم. کافی است بین پارامترها از , (ویرگول) استفاده کنیم.

📌 مثال: تابعی که نام و سن را بگیرد و روی صفحه چاپ کند:

fun myFunction(fname: String, age: Int) {
  println(fname + " is " + age)
}

fun main() {
  myFunction("John", 35)
  myFunction("Jane", 32)
  myFunction("George", 15)
}

🔹 خروجی:

John is 35
Jane is 32
George is 15

🔸 دقت کنید که تعداد آرگومان‌ها و نوعشان باید با پارامترهای تابع مطابقت داشته باشد.


6️⃣ مقدار بازگشتی از تابع

گاهی می‌خواهیم یک مقدار از تابع دریافت کنیم و از آن در برنامه استفاده کنیم. برای این کار از return استفاده می‌کنیم.

📌 مثال: تابعی که یک عدد را گرفته و ۵ واحد به آن اضافه کند:

fun myFunction(x: Int): Int {
  return x + 5
}

fun main() {
  var result = myFunction(3)
  println(result)
}

🔹 خروجی:

8

7️⃣ ارسال چند مقدار و دریافت خروجی

📌 مثال: تابعی که دو عدد را بگیرد و مجموع آن‌ها را برگرداند:

fun myFunction(x: Int, y: Int): Int {
  return x + y
}

fun main() {
  var result = myFunction(3, 5)
  println(result)
}

🔹 خروجی:

8

8️⃣ کوتاه‌تر نوشتن توابع در Kotlin

در Kotlin، می‌توانیم کدهای کوتاه‌تر و خواناتری بنویسیم.

📌 مثال: استفاده از = به جای return:

fun myFunction(x: Int, y: Int) = x + y

fun main() {
  var result = myFunction(3, 5)
  println(result)
}

🔹 خروجی:

8

🔸 در این روش، Kotlin خودش نوع خروجی تابع را تشخیص می‌دهد.


🎯 جمع‌بندی

توابع تکه‌ای از کد هستند که فقط هنگام صدا زدن اجرا می‌شوند.
✅ می‌توانیم به توابع پارامتر بدهیم تا با داده‌های مختلف کار کنند.
✅ برخی توابع مقدار بازگشتی دارند و می‌توانند نتیجه‌ای به ما بدهند.
✅ می‌توانیم کوتاه‌تر و خواناتر کد بزنیم! 😍

حالا نوبت توست! یه تابع بنویس که عدد ورودی را دو برابر کند و خروجی را برگرداند! 🚀

🔥 تمرین:

fun doubleNumber(x: Int): Int {
  // کد خودت را اینجا بنویس!
}

fun main() {
  var result = doubleNumber(4)
  println(result) // انتظار می‌رود 8 چاپ شود
}