📱 کاتلین یا جاوا؟ کدوم رو برای اندروید انتخاب کنیم؟ 🤔
✅ کاتلین مدرنتر، خلاصهتر و خواناتر از جاواس ✨
✅ خبری از NullPointerException نیست با سیستم null safety کاتلین 🛡️
✅ کد کمتر، باگ کمتر، سرعت توسعه بیشتر 🚀
❌ جاوه هنوز محبوب و پایدار هست ولی کاتلین انتخاب اول گوگله 💪
✅ کاملاً با جاوا همخونیه، میتونی از هر دو استفاده کنی 🤝
💡 برای شروع، کاتلین رو یاد بگیر؛ آینده اندرویده! 🔥
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
✅ کاتلین مدرنتر، خلاصهتر و خواناتر از جاواس ✨
✅ خبری از NullPointerException نیست با سیستم null safety کاتلین 🛡️
✅ کد کمتر، باگ کمتر، سرعت توسعه بیشتر 🚀
❌ جاوه هنوز محبوب و پایدار هست ولی کاتلین انتخاب اول گوگله 💪
✅ کاملاً با جاوا همخونیه، میتونی از هر دو استفاده کنی 🤝
💡 برای شروع، کاتلین رو یاد بگیر؛ آینده اندرویده! 🔥
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
❤1
📊 انواع داده در کاتلین رو قورت بده! 🚀
🔹
🔹
🔹
🔹
🔹
🔹
🔹 متغیرها با
🔹 نوع داده رو کامپایلر خودش حدس میزنه 😎
✅ با این مفاهیم پایه، مسیر برنامهنویسی رو شروع کن!
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
🔹
Int برای اعداد صحیح 🔹
Double و Float برای اعشار 🔹
Boolean برای true/false 🔹
String برای متن 🔹
Char برای یک کاراکتر 🔹
Array و List برای مجموعهها 🔹 متغیرها با
var و val تعریف میشن 🔹 نوع داده رو کامپایلر خودش حدس میزنه 😎
✅ با این مفاهیم پایه، مسیر برنامهنویسی رو شروع کن!
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
🔤 رشتهها در کاتلین: جادوی متنها!
🧵 هر رشته یک شیء از کلاس
✨ با
📏 طول رشته رو با
🔍 کاراکتر خاص رو با
🔄 با
🎯 مقایسه با
🆕 رشتههای خام با
🚀 تو کاتلین رشتهها immutable هستن!
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
🧵 هر رشته یک شیء از کلاس
String است. ✨ با
+ یا $ بهراحتی ترکیبش کن. 📏 طول رشته رو با
.length بگیر. 🔍 کاراکتر خاص رو با
[] دسترسی پیدا کن. 🔄 با
trim() فضای خالی رو حذف کن. 🎯 مقایسه با
== انجام بده (نه equals). 🆕 رشتههای خام با
""" برای متنهای چندخطی. 🚀 تو کاتلین رشتهها immutable هستن!
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
🚀 تو کاتلین دیگه نیازی به "+" برای چسبوندن رشتهها نداری!
🧵 String Templates یه قابلیت فوقالعادهست که متغیرها رو مستقیم توی متن میذاره.
💡 فقط کافیه قبل اسم متغیر از
✏️ برای عبارتهای پیچیده از
⚡️ حتی میتونی متد هم صدا بزنی:
🛠️ این قابلیت کدت رو خواناتر و تمیزتر میکنه.
🧩 حواست باشه برای کاراکتر
✅ پس دیگه از concatenation های قدیمی خداحافظی کن!
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
🧵 String Templates یه قابلیت فوقالعادهست که متغیرها رو مستقیم توی متن میذاره.
💡 فقط کافیه قبل اسم متغیر از
$ استفاده کنی: val name = "Ali"
println("Hello $name")
✏️ برای عبارتهای پیچیده از
${} استفاده کن: println("Sum = ${a + b}")
⚡️ حتی میتونی متد هم صدا بزنی:
println("Uppercase: ${name.uppercase()}")
🛠️ این قابلیت کدت رو خواناتر و تمیزتر میکنه.
🧩 حواست باشه برای کاراکتر
$ خودش از \$ استفاده کنی. ✅ پس دیگه از concatenation های قدیمی خداحافظی کن!
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
❤1
🚫 تو کاتلین، null دیگه ترسناک نیست! 😎
با سیستم Null Safety، دیگه خبری از NullPointerException های ناگهانی نیست.
? یا !! بهت کمک میکنه با خیال راحت با nullها کار کنی.
? با استفاده از ?. میتونی فقط در صورت non-null بودن عملیات رو انجام بدی.
? اپراتور elvis (?:) مقدار پیشفرض رو برمیگردونه اگه null باشه.
? اگه مطمئنی null نیستی، !! میتونه اونو به non-null تبدیل کنه (با ریسک خودت!).
? شروع کن با Safe Calls و Elvis، بعداً سراغ !! برو.
? کدهای کاتلینت دیگه کرش نمیکنه، مگه خودت بخوای!
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
با سیستم Null Safety، دیگه خبری از NullPointerException های ناگهانی نیست.
? یا !! بهت کمک میکنه با خیال راحت با nullها کار کنی.
? با استفاده از ?. میتونی فقط در صورت non-null بودن عملیات رو انجام بدی.
? اپراتور elvis (?:) مقدار پیشفرض رو برمیگردونه اگه null باشه.
? اگه مطمئنی null نیستی، !! میتونه اونو به non-null تبدیل کنه (با ریسک خودت!).
? شروع کن با Safe Calls و Elvis، بعداً سراغ !! برو.
? کدهای کاتلینت دیگه کرش نمیکنه، مگه خودت بخوای!
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
🧵 اپراتور Safe Call در Kotlin چیه؟
وقتی متغیر nullable داریم، بهجای if(!=null) میایم از ?. استفاده میکنیم! 🎯
🔹 اگه null باشه، کد ادامه پیدا میکنه بدون ارور
🔹 مثلاً: str?.length → اگه str=null باشه، نتیجه null هستش
🔹 با این کار از NPE در امان میمونیم ✅
⚠️ یادتون باشه: Safe Call فقط روی nullable ها کار میکنه
💡 ترکیبش با let خیلی کاربردی میشه: str?.let { print(it) }
🛠️ یه مثال سریع:
val name: String? = null
println(name?.uppercase()) // خروجی: null
📌 نکته: برای زنجیرش هم میشه استفاده کرد: a?.b?.c?.d
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
وقتی متغیر nullable داریم، بهجای if(!=null) میایم از ?. استفاده میکنیم! 🎯
🔹 اگه null باشه، کد ادامه پیدا میکنه بدون ارور
🔹 مثلاً: str?.length → اگه str=null باشه، نتیجه null هستش
🔹 با این کار از NPE در امان میمونیم ✅
⚠️ یادتون باشه: Safe Call فقط روی nullable ها کار میکنه
💡 ترکیبش با let خیلی کاربردی میشه: str?.let { print(it) }
🛠️ یه مثال سریع:
val name: String? = null
println(name?.uppercase()) // خروجی: null
📌 نکته: برای زنجیرش هم میشه استفاده کرد: a?.b?.c?.d
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
✅ عملگر الویس (?:) در Kotlin جایگزین کوتاه برای if-else است.
🔹 کاربرد: وقتی یک مقدار nullable داریم، اگر نال نبود استفاده میشود وگرنه مقدار پیشفرض.
🔸 مثال:
val name: String? = null
val result = name ?: "مهمان"
✅ نتیجه: "مهمان" (چون name نال بود).
🔹 نکته: عملگر الویس همیشه مقدار غیرنال برمیگرداند.
🔸 ترکیب با let:
name?.let { print(it) } ?: print("نال")
📌 مناسب برای زنجیرهسازی و کاهش کد.
💡 بهجای if-else طولانی از این عملگر استفاده کن.
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
🔹 کاربرد: وقتی یک مقدار nullable داریم، اگر نال نبود استفاده میشود وگرنه مقدار پیشفرض.
🔸 مثال:
val name: String? = null
val result = name ?: "مهمان"
✅ نتیجه: "مهمان" (چون name نال بود).
🔹 نکته: عملگر الویس همیشه مقدار غیرنال برمیگرداند.
🔸 ترکیب با let:
name?.let { print(it) } ?: print("نال")
📌 مناسب برای زنجیرهسازی و کاهش کد.
💡 بهجای if-else طولانی از این عملگر استفاده کن.
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
🔥1
🔹 تو کاتلین دو نوع Type Cast داریم: safe cast با
🔹 اگه از
🔹 اما
🔹 برای چک کردن نوع از
🔹 بعد از چک با
🔹 مثال:
🔹 از
🔹 همیشه قبل از cast مطمئن شو نوع درسته یا از safe cast استفاده کن
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
as? و unsafe با as 🔹 اگه از
as استفاده کنی و نوع نادرست باشه، برنامه کرش میکنه! 💥 🔹 اما
as? اگه نادرست باشه، null برمیگردونه و خطا نمیده ✅ 🔹 برای چک کردن نوع از
is و !is استفاده کن 🔹 بعد از چک با
is، نیازی به cast مجدد نداری (Smart Cast) 🤖 🔹 مثال:
val x: Any = "Hello"
if (x is String) println(x.length) // Smart Cast
🔹 از
as? برای جلوگیری از ClassCastException استفاده کن 🔹 همیشه قبل از cast مطمئن شو نوع درسته یا از safe cast استفاده کن
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
🔥1
🚀 تو کاتلین،
یه عبارت (Expression) هست که میتونه مقدار برگردونه.
🔹 مثلاً به جای نوشتن if-else جدا، مستقیم مقدار توی متغیر ذخیره کن:
🔸 دیگه نیاز به عملگر سهتایی (ternary) نداری!
🔹
📌 نکته: برای شروط چندبخشی، از
✅ کد خواناتر و جمعوجورتر از جاوا میشه.
🎯 یه نکته حرفهای: ترکیب
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
if دیگه فقط یه شرط ساده نیست! یه عبارت (Expression) هست که میتونه مقدار برگردونه.
🔹 مثلاً به جای نوشتن if-else جدا، مستقیم مقدار توی متغیر ذخیره کن:
val max = if (a > b) a else b
🔸 دیگه نیاز به عملگر سهتایی (ternary) نداری!
🔹
if میتونه چند خط بدنه داشته باشه و آخرین خط رو برمیگردونه. 📌 نکته: برای شروط چندبخشی، از
if-else if به صورت زنجیرهای استفاده کن. ✅ کد خواناتر و جمعوجورتر از جاوا میشه.
🎯 یه نکته حرفهای: ترکیب
if با functionها برای منطق پیچیدهتر عالیه. 🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
❤1
🔥 When Expression در کاتلین، یه جایگزین قدرتمند برای
💡 میتونه بهعنوان یه عبارت (Expression) استفاده بشه و مقدار برگردونه.
✅ سینتکس ساده و خوانا:
⚡ بدون نیاز به
🔍 حتی میتونه بازهها (Range) رو هم چک کنه:
🎯 برای مبتدیها سوئیچینگ منطقی رو سادهتر و خواناتر میکنه.
🚀 همین حالا تو پروژههات ازش استفاده کن!
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
switch جاواست! 💡 میتونه بهعنوان یه عبارت (Expression) استفاده بشه و مقدار برگردونه.
✅ سینتکس ساده و خوانا:
val result = when (x) {
1 -> "One"
2 -> "Two"
else -> "Unknown"
}
⚡ بدون نیاز به
break، فقط شرطها رو بررسی میکنه. 🔍 حتی میتونه بازهها (Range) رو هم چک کنه:
when (score) {
in 90..100 -> "A"
in 80..89 -> "B"
else -> "C"
}
🎯 برای مبتدیها سوئیچینگ منطقی رو سادهتر و خواناتر میکنه.
🚀 همین حالا تو پروژههات ازش استفاده کن!
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
🔥1
🔁 حلقه for در کاتلین، سادهترین راه برای تکرار یه بلوک کده 😎
📌 ساختار پایه: for (item in collection) { ... }
🎯 میتونی از range استفاده کنی: for (i in 1..5)
💡 حتی میتونی مرحله رو تنظیم کنی: for (i in 1..10 step 2)
🧩 تکرار روی لیست یا آرایه هم مثل آب خوردن: for (name in names)
🔥 با destructing declaration هم جفت میشه: for ((index, value) in list.withIndex())
🛠️ while و do-while هم هست، ولی for خواناترین گزینهست
📚 یادش بگیر، بعد تو پروژههات ازش استفاده کن
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
📌 ساختار پایه: for (item in collection) { ... }
🎯 میتونی از range استفاده کنی: for (i in 1..5)
💡 حتی میتونی مرحله رو تنظیم کنی: for (i in 1..10 step 2)
🧩 تکرار روی لیست یا آرایه هم مثل آب خوردن: for (name in names)
🔥 با destructing declaration هم جفت میشه: for ((index, value) in list.withIndex())
🛠️ while و do-while هم هست، ولی for خواناترین گزینهست
📚 یادش بگیر، بعد تو پروژههات ازش استفاده کن
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
🔥1
🔁 حلقه
✅ وقتی تعداد تکرار نامشخصه،
📝 ساختار ساده:
🔄 تا وقتی شرط true باشه، بدنه اجرا میشه
⚠️ حواست به بینهایت شدن loop باشه!
💡 میتونی از
🎯 مثال واقعی: منتظر ورود کاربر موندن تا شرط برآورده بشه
📌 مبحث پایه ولی فوقالعاده کاربردی برای کنترل جریان برنامه
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
while در کاتلین – تکرار تا وقتی که شرط درسته!✅ وقتی تعداد تکرار نامشخصه،
while رو استفاده کن 📝 ساختار ساده:
var i = 0
while (i < 5) {
println(i)
i++
}
🔄 تا وقتی شرط true باشه، بدنه اجرا میشه
⚠️ حواست به بینهایت شدن loop باشه!
💡 میتونی از
do-while هم استفاده کنی که حداقل یک بار اجرا بشه 🎯 مثال واقعی: منتظر ورود کاربر موندن تا شرط برآورده بشه
📌 مبحث پایه ولی فوقالعاده کاربردی برای کنترل جریان برنامه
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
❤1
🔹 توابع در Kotlin – اولین قدم برای کد نویسی تمیز! 🚀
1️⃣ تعریف تابع با fun شروع میشه:
2️⃣ نوع برگشتی رو مشخص کن، حتی اگه Unit (void) باشه! 🎯
3️⃣ پارامترها رو با اسم و نوع بنویس:
4️⃣ توابع تکخطی رو با = بنویس، نیازی به return نیست! ✨
5️⃣ آرگومانهای پیشفرض (default) خیلی بهدردبخورن:
6️⃣ توابع رو میتونی داخل کلاس یا مستقل تعریف کنی – انعطافپذیر 😎
7️⃣ یادت باشه: هر تابع یه کار خاص انجام بده (SRP) ⚡
8️⃣ مثال سریع:
🔥 همین الان تمرین کن و کد مرتبتر بنویس!
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
1️⃣ تعریف تابع با fun شروع میشه:
fun greet(): String { return "Hello" }2️⃣ نوع برگشتی رو مشخص کن، حتی اگه Unit (void) باشه! 🎯
3️⃣ پارامترها رو با اسم و نوع بنویس:
fun sum(a: Int, b: Int): Int = a + b4️⃣ توابع تکخطی رو با = بنویس، نیازی به return نیست! ✨
5️⃣ آرگومانهای پیشفرض (default) خیلی بهدردبخورن:
fun greet(name: String = "User") { ... }6️⃣ توابع رو میتونی داخل کلاس یا مستقل تعریف کنی – انعطافپذیر 😎
7️⃣ یادت باشه: هر تابع یه کار خاص انجام بده (SRP) ⚡
8️⃣ مثال سریع:
fun isEven(n: Int) = n % 2 == 0🔥 همین الان تمرین کن و کد مرتبتر بنویس!
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
🔥1
🔹 توابع در کاتلین قلب برنامهنویسیاند! 🚀
🔹 یه تابع کار خاصی رو انجام میده و کدت رو خواناتر و قابل استفادهتر میکنه.
🔹 syntax سادهاش:
🔹 میتونه ورودی بگیره (param) و خروجی بده (return).
🔹 حتی میتونه یه مقدار پیشفرض به پارامترها بده!
🔹 مثال:
🔹 توابع خطتکی با
🔹 اینطوری کدت جمعوجورتر و خواناتر میشه.
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
🔹 یه تابع کار خاصی رو انجام میده و کدت رو خواناتر و قابل استفادهتر میکنه.
🔹 syntax سادهاش:
fun name() { ... } 😎 🔹 میتونه ورودی بگیره (param) و خروجی بده (return).
🔹 حتی میتونه یه مقدار پیشفرض به پارامترها بده!
🔹 مثال:
fun greet(name: String = "World") 🔹 توابع خطتکی با
= هم مینویسی: fun sum(a: Int, b: Int) = a + b 🔹 اینطوری کدت جمعوجورتر و خواناتر میشه.
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
❤1
🔷 کلاسها در کاتلین 🚀
🔹 کلاسها قلب برنامهنویسی شیگرا در کاتلین هستند.
🔹 فرق بین
🔹
🔹
🔹 از
🔹 کلاسهای تو در تو (
🔹
🔹 حواست به visibility modifiers (private, internal) باشه.
🐍 کلاسهای کاتلین رو قورت بده!
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
🔹 کلاسها قلب برنامهنویسی شیگرا در کاتلین هستند.
🔹 فرق بین
data class و sealed class رو میدونی؟ 🧐 🔹
data class خودش toString، equals و hashCode رو میسازه! 🔹
sealed class برای محدود کردن سلسلهمراتب کلاسها عالیه. 🔹 از
object برای singletonهای ساده استفاده کن. 🔹 کلاسهای تو در تو (
nested class) با inner class فرق دارن. 🔹
companion object جایگزین static memberهای جاواست. 🔹 حواست به visibility modifiers (private, internal) باشه.
🐍 کلاسهای کاتلین رو قورت بده!
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
🔵 آبجکتها در کاتلین؛ فراتر از کلاسهای معمولی!
۱️⃣
۲️⃣
۳️⃣
۴️⃣ داخل companion میتونی از const val برای ثابتها استفاده کنی 🧮
۵️⃣ با
۶️⃣ همچنین میشه از آبجکتها به عنوان delegate برای delegation استفاده کرد 🧠
۷️⃣ نکته: companion object میتونه نام داشته باشه یا anonymous باشه 📌
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
۱️⃣
object یعنی تعریف یک singleton بدون دردسر 🧩 ۲️⃣
companion object جایگزین اعضای static در جاوا 🚀 ۳️⃣
object expression ساخت anonymous object در لحظه 🎯 ۴️⃣ داخل companion میتونی از const val برای ثابتها استفاده کنی 🧮
۵️⃣ با
object دیگه نیازی به الگوی Singleton نخواهی داشت 🙌 ۶️⃣ همچنین میشه از آبجکتها به عنوان delegate برای delegation استفاده کرد 🧠
۷️⃣ نکته: companion object میتونه نام داشته باشه یا anonymous باشه 📌
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
🔥1
✅ اشیاء در کاتلین فراتر از اشیاء ساده هستند! 🎯
🔹
🔹
🔹
🔹 همه اینها در سطح باینری بهینه و thread-safe هستند
🔹 مثال:
🔹 نکته: companion object در واقع یک شیء تو در توست، نه static واقعی
🔹 اشیاء میتوانند از کلاسها و اینترفیسها ارث برند
⚡️ با این ابزارها کد تمیزتر و بدون boilerplate مینویسید
📚 این مبحث پایهای برای الگوهای طراحی در کاتلینه
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
🔹
object برای تعریف singleton بدون نیاز به کلاس اضافی 🔹
companion object برای اعضای استاتیک مثل جاوا، اما خواناتر 🔹
object expression برای ایجاد anonymous object درجا 🔹 همه اینها در سطح باینری بهینه و thread-safe هستند
🔹 مثال:
object NetworkConfig { ... } یک نمونه سراسری 🔹 نکته: companion object در واقع یک شیء تو در توست، نه static واقعی
🔹 اشیاء میتوانند از کلاسها و اینترفیسها ارث برند
⚡️ با این ابزارها کد تمیزتر و بدون boilerplate مینویسید
📚 این مبحث پایهای برای الگوهای طراحی در کاتلینه
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
🔥1
🔷 مفهوم ارثبری (Inheritance) در Kotlin – سطح متوسط 🧬
ارثبری یکی از مفاهیم اصلی شیءگراییه که به شما اجازه میده کلاسهای جدیدی بر پایه کلاسهای موجود بسازید.
در Kotlin، کلاسها بهطور پیشفرض
مثال عملی: فرض کنید یک کلاس پایه
حالا یک کلاس
✅ در اینجا
✅ سازنده کلاس والد با
🔸 نکات مهم:
- برای override حتماً از
- اگر کلاس والد سازنده بدون پارامتر نداره، باید پارامترها رو پاس بدید.
- ارثبری چندگانه نداریم (ترجیحاً از interface استفاده کنید).
🔹 مثال پیشرفتهتر: استفاده از
این کد نشون میده که با
📌 ارثبری رو در پروژههای واقعی برای باز استفاده از کد و اعمال چندریختی (Polymorphism) به کار ببرید.
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
ارثبری یکی از مفاهیم اصلی شیءگراییه که به شما اجازه میده کلاسهای جدیدی بر پایه کلاسهای موجود بسازید.
در Kotlin، کلاسها بهطور پیشفرض
final هستند و برای ارثبری باید با کلیدواژه open مشخص بشن. مثال عملی: فرض کنید یک کلاس پایه
Animal داریم:open class Animal(val name: String) {
open fun sound() = "Some sound"
}
حالا یک کلاس
Cat از آن ارث میبریم: class Cat(name: String) : Animal(name) {
override fun sound() = "Meow"
}
✅ در اینجا
open اجازه override متد sound رو میده. ✅ سازنده کلاس والد با
: Animal(name) صدا زده میشه. 🔸 نکات مهم:
- برای override حتماً از
override استفاده کنید. - اگر کلاس والد سازنده بدون پارامتر نداره، باید پارامترها رو پاس بدید.
- ارثبری چندگانه نداریم (ترجیحاً از interface استفاده کنید).
🔹 مثال پیشرفتهتر: استفاده از
super برای دسترسی به متد والد: open class Dog(name: String) : Animal(name) {
final override fun sound() = "Woof" // متد نهایی
}
این کد نشون میده که با
final میشه از override مجدد جلوگیری کرد. 📌 ارثبری رو در پروژههای واقعی برای باز استفاده از کد و اعمال چندریختی (Polymorphism) به کار ببرید.
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
📌 اینترفیسهای Kotlin رو جدی بگیر؛ اگه فقط با کلاسهای abstract کار کردی، نصف راه رو رفتی!
✅ اینترفیسها قراردادهای قدرتمندی هستن که بدون وابستگی به سلسلهمراتب، رفتار رو تعریف میکنن.
💡 توی یک اپ واقعی، مثلاً میخوای انواع مختلف پرداخت (کارت، کیف پول، رمزارز) رو مدیریت کنی.
📌 هر سرویس پرداخت باید متد
👇 نمونه کد ساده اما کاربردی:
✅ اینترفیس بهت انعطاف میده: میتونی هر کلاس جدیدی بدون تغییر کد قبلی اضافه کنی.
💡 بهترین تمرین: برای هر «قابلیت» در اپت یه اینترفیس در نظر بگیر، بعد dependency injection رو استفاده کن.
#Kotlin #Interface #AndroidDev #CleanArchitecture #Codeit #کدایت #Android #Kotlin #Jetpack
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
✅ اینترفیسها قراردادهای قدرتمندی هستن که بدون وابستگی به سلسلهمراتب، رفتار رو تعریف میکنن.
💡 توی یک اپ واقعی، مثلاً میخوای انواع مختلف پرداخت (کارت، کیف پول، رمزارز) رو مدیریت کنی.
📌 هر سرویس پرداخت باید متد
pay(amount) رو داشته باشه. با اینترفیس یه قرارداد میبندی و پیادهسازی رو به کلاسها میسپاری.👇 نمونه کد ساده اما کاربردی:
interface PaymentService {
fun pay(amount: Double): String
fun validate(): Boolean
}
class CardPayment : PaymentService {
override fun pay(amount: Double): String {
return "پرداخت $amount با کارت انجام شد."
}
override fun validate(): Boolean {
// اعتبارسنجی شماره کارت
return true
}
}
class WalletPayment : PaymentService {
override fun pay(amount: Double): String {
return "پرداخت $amount از کیف پول انجام شد."
}
override fun validate(): Boolean {
// بررسی موجودی
return true
}
}
✅ اینترفیس بهت انعطاف میده: میتونی هر کلاس جدیدی بدون تغییر کد قبلی اضافه کنی.
💡 بهترین تمرین: برای هر «قابلیت» در اپت یه اینترفیس در نظر بگیر، بعد dependency injection رو استفاده کن.
#Kotlin #Interface #AndroidDev #CleanArchitecture #Codeit #کدایت #Android #Kotlin #Jetpack
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
❤1
📦 Data Class در کاتلین چیزی فراتر از یک کلاس ساده است!
وقتی از
🧩 مشکل: تو پروژههای بزرگ مجبوری بارها کد تکراری برای مدلها بنویسی.
✅ راهحل:
🔄 یک مثال واقعی: مدل کاربر با فیلدهای
🧪 کد عملی:
📋 توضیح:
-
- Destructuring به کمک
🚀 نکته حرفهای:
از
برای حفظ immutability فیلدها رو با
#DataClass #KotlinTips #CleanCode #Destructuring #Model #Codeit #کدایت #Android #Kotlin #Jetpack
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
وقتی از
data class استفاده میکنی، کاتلین خودش متدهای toString، equals، hashCode، copy و componentN رو میسازه. 🧩 مشکل: تو پروژههای بزرگ مجبوری بارها کد تکراری برای مدلها بنویسی.
✅ راهحل:
data class با یه خط کد تمام این کارها رو برات انجام میده. 🔄 یک مثال واقعی: مدل کاربر با فیلدهای
nullable و نیاز به کپی کردن یه مقدار تغییر یافته. 🧪 کد عملی:
data class User(
val id: Int,
val name: String,
val email: String?,
val isActive: Boolean = true
)
fun main() {
val original = User(1, "Ali", "ali@example.com", true)
val updated = original.copy(email = null, isActive = false)
println(original) // User(id=1, name=Ali, email=ali@example.com, isActive=true)
println(updated) // User(id=1, name=Ali, email=null, isActive=false)
// Destructuring
val (id, name, email) = updated
println("$id - $name - $email") // 1 - Ali - null
}
📋 توضیح:
-
copy() بدون تغییر فیلدهای دیگه، یه نمونه جدید با فیلدهای دلخواه میسازه. - Destructuring به کمک
componentN کار میکنه و کد خوندنیتری میده. 🚀 نکته حرفهای:
از
data class فقط برای نگهداری داده استفاده کن (نه منطق سنگین). برای حفظ immutability فیلدها رو با
val تعریف کن. #DataClass #KotlinTips #CleanCode #Destructuring #Model #Codeit #کدایت #Android #Kotlin #Jetpack
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
❤1