Codeit Mobile
94 subscribers
3 photos
1 video
244 links
📱 آموزش برنامه‌نویسی موبایل

Kotlin • Android

🚀 آموزش ساده، کاربردی و پروژه‌محور
💡 مخصوص توسعه‌دهندگان موبایل
Download Telegram
📊 انواع داده در کاتلین رو قورت بده! 🚀
🔹 Int برای اعداد صحیح
🔹 Double و Float برای اعشار
🔹 Boolean برای true/false
🔹 String برای متن
🔹 Char برای یک کاراکتر
🔹 Array و List برای مجموعه‌ها
🔹 متغیرها با var و val تعریف میشن
🔹 نوع داده رو کامپایلر خودش حدس میزنه 😎
با این مفاهیم پایه، مسیر برنامه‌نویسی رو شروع کن!
🌐 Codeit → https://code-it.ir

━━━━━━━━━━━━━━━
@CodeitMobile
🔤 رشته‌ها در کاتلین: جادوی متن‌ها!
🧵 هر رشته یک شیء از کلاس String است.
با + یا $ به‌راحتی ترکیبش کن.
📏 طول رشته رو با .length بگیر.
🔍 کاراکتر خاص رو با [] دسترسی پیدا کن.
🔄 با trim() فضای خالی رو حذف کن.
🎯 مقایسه با == انجام بده (نه equals).
🆕 رشته‌های خام با """ برای متن‌های چندخطی.
🚀 تو کاتلین رشته‌ها immutable هستن!
🌐 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
🧵 اپراتور 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
عملگر الویس (?:) در 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
🔥1
🔹 تو کاتلین دو نوع Type Cast داریم: safe cast با 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
🚀 تو کاتلین، 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 در کاتلین، یه جایگزین قدرتمند برای 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
🔥1
🔁 حلقه 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 شروع میشه:
fun greet(): String { return "Hello" }

2️⃣ نوع برگشتی رو مشخص کن، حتی اگه Unit (void) باشه! 🎯

3️⃣ پارامترها رو با اسم و نوع بنویس:
fun sum(a: Int, b: Int): Int = a + b

4️⃣ توابع تک‌خطی رو با = بنویس، نیازی به 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 ساده‌اش: fun name() { ... } 😎
🔹 می‌تونه ورودی بگیره (param) و خروجی بده (return).
🔹 حتی می‌تونه یه مقدار پیش‌فرض به پارامترها بده!
🔹 مثال: fun greet(name: String = "World")
🔹 توابع خط‌تکی با = هم مینویسی: fun sum(a: Int, b: Int) = a + b
🔹 اینطوری کدت جمع‌وجورتر و خواناتر میشه.
🌐 Codeit → https://code-it.ir

━━━━━━━━━━━━━━━
@CodeitMobile
1
🔷 کلاس‌ها در کاتلین 🚀

🔹 کلاس‌ها قلب برنامه‌نویسی شی‌گرا در کاتلین هستند.
🔹 فرق بین 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
🔵 آبجکت‌ها در کاتلین؛ فراتر از کلاس‌های معمولی!

۱️⃣ 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
اشیاء در کاتلین فراتر از اشیاء ساده هستند! 🎯
🔹 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، کلاس‌ها به‌طور پیش‌فرض 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 کار کردی، نصف راه رو رفتی!

اینترفیس‌ها قراردادهای قدرتمندی هستن که بدون وابستگی به سلسله‌مراتب، رفتار رو تعریف می‌کنن.
💡 توی یک اپ واقعی، مثلاً می‌خوای انواع مختلف پرداخت (کارت، کیف پول، رمزارز) رو مدیریت کنی.

📌 هر سرویس پرداخت باید متد 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 در کاتلین چیزی فراتر از یک کلاس ساده است!
وقتی از 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
🔹 تا حالا خواستی یه مجموعه ثابت از مقادیر رو توی کاتلین مدیریت کنی؟
🔸 Enum Class دقیقاً برای همینه! یه نوع خاص از کلاس که مقادیر از پیش تعریف‌شده داره و می‌تونه رفتار اختصاصی هم داشته باشه.

🔹 فرض کن قراره وضعیت‌های یه سفارش رو مدل کنی: Pending, Shipped, Delivered.
🔸 بدون Enum مجبوری از String یا Int استفاده کنی و خطاهای انسانی زیاد میشه. اما Enum کلاس اون رو تایپ-سیف و خواناتر می‌کنه.

🔹 Enum توی کاتلین خیلی فراتر از یه لیست ساده‌ست:
🔸 می‌تونه پراپرتی داشته باشه، متد داشته باشه، حتی اینترفیس implement کنه.

🔹 مثال عملی: یه ماشین‌حالت ساده برای پردازش سفارش با انتقال بین وضعیت‌ها:

enum class OrderStatus(val label: String) {
Pending("در انتظار تأیید"),
Shipped("ارسال شده"),
Delivered("تحویل داده شده"),
Cancelled("لغو شده");

fun canTransitionTo(next: OrderStatus): Boolean {
return when (this) {
Pending -> next == Shipped || next == Cancelled
Shipped -> next == Delivered
else -> false
}
}
}

fun main() {
val current = OrderStatus.Pending
println(current.label) // در انتظار تأیید
println(current.canTransitionTo(OrderStatus.Shipped)) // true
}


🔹 این کد نشون میده که هر وضعیت یه label (برچسب فارسی) داره و منطق انتقال مجاز بین وضعیت‌ها رو توی متد canTransitionTo تعریف کردیم.
🔸 مزیت: خطای انسانی کم میشه، کد خوانا و قابل نگهداری‌ست.

🔹 یه نکته حرفه‌ای: از Enum برای ثابت‌هایی که رفتار متفاوت دارن استفاده کن (مثل Strategy Pattern ساده).
🔸 از when به جای if-های طولانی استفاده کن تا کد تمیز بمونه.

#EnumClass #Kotlin #کاتلین #برنامه‌نویسی #Android #Codeit #کدایت #Android #Kotlin #Jetpack
🌐 Codeit → https://code-it.ir

━━━━━━━━━━━━━━━
@CodeitMobile
🔥1