📂 «Portfolio»ای که واقعاً استخدامت کند، فقط لیست پروژه نیست.
یک داستان حرفهای از مهارتهای توست. 🚀
بسیاری از اندروید دولوپرها کلی پروژه میسازند اما استخدام نمیشوند.
علت؟ «Portfolio» مثل ویترین مغازه است؛ اگر مرتب و هدفمند نباشد، مشتری (کارفرما) رد میشود.
نکات کلیدی که «Portfolio» تو رو از بقیه جدا میکنه:
۱. کیفیت به جای کمیت – یک پروژه کامل با «Clean Architecture» و تست، بهتر از ده تا پروژه ناقصه.
۲. تمرکز روی مشکلات واقعی – اپلیکیشنی که یه نیاز روزمره رو حل کنه، جذابتر از یه «To‑Do List» تکراریه.
۳. مستندسازی درست – حتماً هر پروژه رو با «README» حرفهای، توضیح معماری و «Screenshots» همراه کن.
۴. حضور در «GitHub» – کد تمیز و «Commit»های معنادار نشوندهنده نظم ذهنیته.
یکی از بهترین راهها مشارکت در پروژههای «Open Source» یا فورک یه «Library» معروف و اضافه کردن قابلیت جدیده.
این کار اعتماد کارفرما رو جلب میکنه.
اگر «Portfolio» نداری، همین حالا یکی از اپهای روزمره مثل «مدیریت هزینه» یا «یادآور دارو» رو با «Jetpack Compose» و «Room» بساز و تو «GitHub» منتشر کن.
یادت باشه: «Portfolio» نباید صرفاً لینک باشه، بلکه باید نشون بده چطور فکر میکنی. 💡
#Codeit #Android #Kotlin #Jetpack #PortfolioTips #CareerGrowth #AndroidDev
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
یک داستان حرفهای از مهارتهای توست. 🚀
بسیاری از اندروید دولوپرها کلی پروژه میسازند اما استخدام نمیشوند.
علت؟ «Portfolio» مثل ویترین مغازه است؛ اگر مرتب و هدفمند نباشد، مشتری (کارفرما) رد میشود.
نکات کلیدی که «Portfolio» تو رو از بقیه جدا میکنه:
۱. کیفیت به جای کمیت – یک پروژه کامل با «Clean Architecture» و تست، بهتر از ده تا پروژه ناقصه.
۲. تمرکز روی مشکلات واقعی – اپلیکیشنی که یه نیاز روزمره رو حل کنه، جذابتر از یه «To‑Do List» تکراریه.
۳. مستندسازی درست – حتماً هر پروژه رو با «README» حرفهای، توضیح معماری و «Screenshots» همراه کن.
۴. حضور در «GitHub» – کد تمیز و «Commit»های معنادار نشوندهنده نظم ذهنیته.
یکی از بهترین راهها مشارکت در پروژههای «Open Source» یا فورک یه «Library» معروف و اضافه کردن قابلیت جدیده.
این کار اعتماد کارفرما رو جلب میکنه.
اگر «Portfolio» نداری، همین حالا یکی از اپهای روزمره مثل «مدیریت هزینه» یا «یادآور دارو» رو با «Jetpack Compose» و «Room» بساز و تو «GitHub» منتشر کن.
یادت باشه: «Portfolio» نباید صرفاً لینک باشه، بلکه باید نشون بده چطور فکر میکنی. 💡
#Codeit #Android #Kotlin #Jetpack #PortfolioTips #CareerGrowth #AndroidDev
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
❤1
🔹 تابع «run» یکی از کاربردیترین «Scope Functions» در «Kotlin» هست که همزمان دو کار مفید انجام میده: اجرای یک بلاک کد روی یک آبجکت و برگردوندن نتیجهی آخرین عبارت داخل بلاک.
🔸 «run» دو شکل داره: یکی به عنوان extension function روی هر نوعی و دیگری به صورت standalone که مستقیماً صدا زده میشه. تفاوتش با «let» و «apply» اینه که درون بلاک به آبجکت با کلمهی «this» دسترسی داری و در نهایت نتیجه رو برمیگردونه.
🔹 کِی به کار میاد؟ وقتی میخوایم یک آبجکت رو مقداردهی اولیه کنیم، چند عملیات روش انجام بدیم و در نهایت یک مقدار جدید برگردونیم. مثلاً پر کردن یک آبجکت «User» از دیتابیس و برگردوندن نام کامل کاربر.
🔸 مثال عملی: فرض کن یک کلاس «User» داری که فیلدهای «firstName» و «lastName» داره. میخوای ازش یک «String» به صورت اسم کامل بسازی و برگردونی.
کد مربوطه رو ببین:
🔹 داخل «run» با «this» به آبجکت «user» دسترسی داری و میتونی مستقیماً فیلدها رو مقداردهی کنی. در نهایت عبارت «"$firstName $lastName"» به عنوان نتیجه برگردونده میشه.
🔸 این تابع برای زمانی عالیه که هم نیاز به تغییر وضعیت آبجکت داری و هم میخوای یک خروجی مشخص ازش بگیری.
🎯 نکته مهم: «run» با «with» تفاوت داره: «with» غیرextension هست و آبجکت رو به عنوان آرگومان میگیره. ولی «run» معمولاً روی null safety بهتر کار میکنه.
✨ خلاصه: از «run» برای زنجیرهای از عملیات روی یک آبجکت و برگردوندن نتیجه استفاده کن.
#Codeit #Android #Kotlin #ScopeFunctions #RunFunction #Jetpack
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
🔸 «run» دو شکل داره: یکی به عنوان extension function روی هر نوعی و دیگری به صورت standalone که مستقیماً صدا زده میشه. تفاوتش با «let» و «apply» اینه که درون بلاک به آبجکت با کلمهی «this» دسترسی داری و در نهایت نتیجه رو برمیگردونه.
🔹 کِی به کار میاد؟ وقتی میخوایم یک آبجکت رو مقداردهی اولیه کنیم، چند عملیات روش انجام بدیم و در نهایت یک مقدار جدید برگردونیم. مثلاً پر کردن یک آبجکت «User» از دیتابیس و برگردوندن نام کامل کاربر.
🔸 مثال عملی: فرض کن یک کلاس «User» داری که فیلدهای «firstName» و «lastName» داره. میخوای ازش یک «String» به صورت اسم کامل بسازی و برگردونی.
کد مربوطه رو ببین:
data class User(var firstName: String? = null, var lastName: String? = null)
fun getFullName(user: User): String {
return user.run {
firstName = "Ali"
lastName = "Rezaei"
"$firstName $lastName" // آخرین عبارت برگردونده میشه
}
}
fun main() {
val user = User()
val fullName = getFullName(user)
println(fullName) // خروجی: Ali Rezaei
}
🔹 داخل «run» با «this» به آبجکت «user» دسترسی داری و میتونی مستقیماً فیلدها رو مقداردهی کنی. در نهایت عبارت «"$firstName $lastName"» به عنوان نتیجه برگردونده میشه.
🔸 این تابع برای زمانی عالیه که هم نیاز به تغییر وضعیت آبجکت داری و هم میخوای یک خروجی مشخص ازش بگیری.
🎯 نکته مهم: «run» با «with» تفاوت داره: «with» غیرextension هست و آبجکت رو به عنوان آرگومان میگیره. ولی «run» معمولاً روی null safety بهتر کار میکنه.
✨ خلاصه: از «run» برای زنجیرهای از عملیات روی یک آبجکت و برگردوندن نتیجه استفاده کن.
#Codeit #Android #Kotlin #ScopeFunctions #RunFunction #Jetpack
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
🔥1
✅ در «Kotlin» یکی از کاربردیترین ابزارها برای کاهش کدهای تکراری، توابع Scope هستند. امروز سراغ «with» میرویم؛ تابعی که یک شیء را به عنوان receiver در اختیار میگذارد و نیازی به تکرار نام آن ندارید. 😎
📌 «with» یک تابع استاندارد است که شیء مورد نظر را به عنوان آرگومان میگیرد و داخل بلاک، مستقیماً به اعضای آن دسترسی دارید. خروجی بلاک، مقدار آخرین عبارت خواهد بود.
💡 کجا به کار میآید؟ وقتی میخواهید چندین عملیات روی یک شیء واحد انجام دهید – مثلاً تنظیمات یک ویو یا پر کردن یک شیء داده – بدون اینکه بارها اسم شیء را بنویسید.
یک مثال عملی: تنظیم یک «TextView» در اندروید:
🔍 در این کد، «with» به ما اجازه میدهد مستقیماً روی «TextView» کار کنیم. داخل بلاک هر بار «textView.» را نمینویسیم. مقدار بازگشتی در اینجا «Unit» است (چون آخرین عبارت «visibility» از نوع «Int» نیست؟ در واقع آخرین «visibility = ...» یک «Unit» برمیگرداند). اما اگر بخواهید مقداری برگردانید، میتوانید.
🌟 نکته: «with» برخلاف «apply» یا «run» یک extension function نیست و receiver را به عنوان آرگومان میگیرد. برای مواقعی که یک شیء از قبل دارید عالی است.
📈 در پروژههای واقعی، «with» را در ابتدای «Activity» برای پیکربندی گروهی ویوها، یا در «ViewModel» برای تنظیم یک شیء «StateFlow» میبینید. استفاده از آن کدتان را خواناتر و حرفهایتر میکند.
#Codeit #Android #Kotlin #Jetpack #ScopeFunctions #With #KotlinTips
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
📌 «with» یک تابع استاندارد است که شیء مورد نظر را به عنوان آرگومان میگیرد و داخل بلاک، مستقیماً به اعضای آن دسترسی دارید. خروجی بلاک، مقدار آخرین عبارت خواهد بود.
💡 کجا به کار میآید؟ وقتی میخواهید چندین عملیات روی یک شیء واحد انجام دهید – مثلاً تنظیمات یک ویو یا پر کردن یک شیء داده – بدون اینکه بارها اسم شیء را بنویسید.
یک مثال عملی: تنظیم یک «TextView» در اندروید:
val textView = findViewById<TextView>(R.id.myTextView)
with(textView) {
text = "سلام دنیا!"
textSize = 18f
setTextColor(Color.BLUE)
visibility = View.VISIBLE
}
🔍 در این کد، «with» به ما اجازه میدهد مستقیماً روی «TextView» کار کنیم. داخل بلاک هر بار «textView.» را نمینویسیم. مقدار بازگشتی در اینجا «Unit» است (چون آخرین عبارت «visibility» از نوع «Int» نیست؟ در واقع آخرین «visibility = ...» یک «Unit» برمیگرداند). اما اگر بخواهید مقداری برگردانید، میتوانید.
🌟 نکته: «with» برخلاف «apply» یا «run» یک extension function نیست و receiver را به عنوان آرگومان میگیرد. برای مواقعی که یک شیء از قبل دارید عالی است.
📈 در پروژههای واقعی، «with» را در ابتدای «Activity» برای پیکربندی گروهی ویوها، یا در «ViewModel» برای تنظیم یک شیء «StateFlow» میبینید. استفاده از آن کدتان را خواناتر و حرفهایتر میکند.
#Codeit #Android #Kotlin #Jetpack #ScopeFunctions #With #KotlinTips
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
🔥1
🔹 تابع «also» در کاتلین مثل یه دستیار عمل میکنه که بدون تغییر شیء اصلی، یه عملیات جانبی روش انجام میده 😎
🔹 فرقش با «apply» اینه: «apply» روی خود شیء کار میکنه و نتیجه رو برمیگردونه، ولی «also» شیء رو همونطور بهت پس میده تا بتونی بعدش ادامه بدی.
🔹 مثال واقعی: فرض کن داری یه لیست از کاربران میسازی و میخوای موقع اضافه کردن هر کاربر، لاگ بگیری و تعدادش رو هم چاپ کنی.
🔹 با «also» میتونی این کار رو تمیز و خوانا انجام بدی:
🔹 کد بالا: اول یه شیء «User» میسازه، بعد توی بلاک «also» لاگ میگیره و به لیست اضافه میکنه، در نهایت خود شیء رو برمیگردونه برای استفاده بعدی.
🔹 مزیت: بدون قطع زنجیره عملیات، کارهای جانبی مثل لاگ، ذخیره موقت یا اعتبارسنجی رو انجام میدی.
🔹 نتیجه: هر وقت خواستی روی یه شیء عملیات حاشیهای انجام بدی بدون اینکه مقدارش عوض بشه، «also» بهترین انتخابه 🚀
#Codeit #Android #Kotlin #Jetpack #ScopeFunctions #CleanCode #KotlinTips
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
🔹 فرقش با «apply» اینه: «apply» روی خود شیء کار میکنه و نتیجه رو برمیگردونه، ولی «also» شیء رو همونطور بهت پس میده تا بتونی بعدش ادامه بدی.
🔹 مثال واقعی: فرض کن داری یه لیست از کاربران میسازی و میخوای موقع اضافه کردن هر کاربر، لاگ بگیری و تعدادش رو هم چاپ کنی.
🔹 با «also» میتونی این کار رو تمیز و خوانا انجام بدی:
data class User(val name: String, val age: Int)
fun main() {
val users = mutableListOf<User>()
val user = User("Ali", 25).also {
println("Adding user: ${it.name}")
users.add(it)
println("Total users: ${users.size}")
}
println("User created: $user")
}
🔹 کد بالا: اول یه شیء «User» میسازه، بعد توی بلاک «also» لاگ میگیره و به لیست اضافه میکنه، در نهایت خود شیء رو برمیگردونه برای استفاده بعدی.
🔹 مزیت: بدون قطع زنجیره عملیات، کارهای جانبی مثل لاگ، ذخیره موقت یا اعتبارسنجی رو انجام میدی.
🔹 نتیجه: هر وقت خواستی روی یه شیء عملیات حاشیهای انجام بدی بدون اینکه مقدارش عوض بشه، «also» بهترین انتخابه 🚀
#Codeit #Android #Kotlin #Jetpack #ScopeFunctions #CleanCode #KotlinTips
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
❤1
🚀 تنها کد نویسی کافی نیست!
اگه میخوای یه «اندروید دولوپر» واقعی باشی، باید روی مهارتهای نرم هم سرمایهگذاری کنی.
🧠 ارتباط مؤثر
بتونی ایدههات رو ساده و شفاف به بقیه انتقال بدی. تو تیمهای حرفهای، کسی که خوب توضیح میده ارزشش از صرفاً کد زدن بیشتره.
🤝 همکاری تیمی
با «Git» کار میکنی، کد队友 رو ریویو میکنی، از بازخورد استقبال میکنی.
یادت باشه: «Code Review» یه فرصته برای یادگیری، نه حمله شخصی.
⏳ مدیریت زمان و اولویتبندی
همیشه تسکهای بیاهمیت رو نذار جلوی کارهای حیاتی. از «MVP» (حداقل محصول قابل ارائه) استفاده کن و اول چیز اصلی رو تحویل بده.
🧩 حل مسئله و تفکر انتقادی
قبل از نوشتن کد، مشکل رو خوب تحلیل کن. گاهی جواب درست توی سادهترین راهحلهاست.
📖 یادگیری مستمر
تکنولوژی سریع عوض میشه. هر هفته یه پست بخون، یه «کاتلین کوروتین» جدید یاد بگیر، یا یه «Jetpack Compose» رو عمیقتر بکاو.
🔥 مدیریت انتقاد و استرس
باگ میدی؟ اشکال نداره. همه دولوپرها این مسیر رو رفتن. مهم اینه که از شکست یاد بگیری و ادامه بدی.
💡 خلاصهاش
مهارت نرم، اون چیزیه که یه برنامهنویس خوب رو از یه دولوپر حرفهای واقعی جدا میکنه.
#Codeit #Android #Kotlin #Jetpack #SoftSkills #DeveloperGrowth #CareerAdvice
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
اگه میخوای یه «اندروید دولوپر» واقعی باشی، باید روی مهارتهای نرم هم سرمایهگذاری کنی.
🧠 ارتباط مؤثر
بتونی ایدههات رو ساده و شفاف به بقیه انتقال بدی. تو تیمهای حرفهای، کسی که خوب توضیح میده ارزشش از صرفاً کد زدن بیشتره.
🤝 همکاری تیمی
با «Git» کار میکنی، کد队友 رو ریویو میکنی، از بازخورد استقبال میکنی.
یادت باشه: «Code Review» یه فرصته برای یادگیری، نه حمله شخصی.
⏳ مدیریت زمان و اولویتبندی
همیشه تسکهای بیاهمیت رو نذار جلوی کارهای حیاتی. از «MVP» (حداقل محصول قابل ارائه) استفاده کن و اول چیز اصلی رو تحویل بده.
🧩 حل مسئله و تفکر انتقادی
قبل از نوشتن کد، مشکل رو خوب تحلیل کن. گاهی جواب درست توی سادهترین راهحلهاست.
📖 یادگیری مستمر
تکنولوژی سریع عوض میشه. هر هفته یه پست بخون، یه «کاتلین کوروتین» جدید یاد بگیر، یا یه «Jetpack Compose» رو عمیقتر بکاو.
🔥 مدیریت انتقاد و استرس
باگ میدی؟ اشکال نداره. همه دولوپرها این مسیر رو رفتن. مهم اینه که از شکست یاد بگیری و ادامه بدی.
💡 خلاصهاش
مهارت نرم، اون چیزیه که یه برنامهنویس خوب رو از یه دولوپر حرفهای واقعی جدا میکنه.
#Codeit #Android #Kotlin #Jetpack #SoftSkills #DeveloperGrowth #CareerAdvice
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
❤1
لیستها در «Kotlin» از پایهایترین مفاهیمیان که هر اندروید دولوپری باید بهخوبی بشناسهشون 🚀
🔹 فرق اصلی بین دو نوع لیست:
➡️ «MutableList» که میتونی بعد از ساختنش آیتم اضافه یا حذف کنی
➡️ «List» که فقط خواندنیه و تغییرناپذیره
🔸 مثال کاربردی:
فرض کن داری یه لیست از اسامی کاربرا رو تو یه «ViewModel» مدیریت میکنی. یه بار باید فقط نمایش بدی، یه بار هم باید بهش اضافه کنی.
کد سادهای از تفاوت این دو رو ببین:
📌 توضیح:
«immutableList» چون از نوع «List» هست، هیچ متد تغییردهندهای نداره. اما «mutableList» از «MutableList» ساخته شده و متدهایی مثل «add», «remove» رو داره.
💡 نکته حرفهای:
در برنامهنویسی اندروید با «Jetpack Compose» معمولاً از «StateFlow» یا «LiveData» با لیستهای غیرقابل تغییر استفاده میکنن تا از بروز باگهای همزمانی جلوگیری بشه. پس بهتره تا جایی که ممکنه از «List» استفاده کنی و فقط در صورت نیاز از «MutableList» بهره ببری.
✅ برداشت عملی:
برای شروع هر پروژهای، نوع لیست رو متناسب با نیازت انتخاب کن. اگه قرار نیست تغییر کنه، از «listOf» استفاده کن؛ در غیر این صورت «mutableListOf» رو به کار ببر.
#Codeit #Android #Kotlin #Jetpack #List #KotlinBasics #Programming
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
🔹 فرق اصلی بین دو نوع لیست:
➡️ «MutableList» که میتونی بعد از ساختنش آیتم اضافه یا حذف کنی
➡️ «List» که فقط خواندنیه و تغییرناپذیره
🔸 مثال کاربردی:
فرض کن داری یه لیست از اسامی کاربرا رو تو یه «ViewModel» مدیریت میکنی. یه بار باید فقط نمایش بدی، یه بار هم باید بهش اضافه کنی.
کد سادهای از تفاوت این دو رو ببین:
val immutableList: List<String> = listOf("Ali", "Sara")
// immutableList.add("Reza") // Error!
val mutableList: MutableList<String> = mutableListOf("Ali", "Sara")
mutableList.add("Reza") // کاملاً مجازه
println(mutableList) // [Ali, Sara, Reza]
📌 توضیح:
«immutableList» چون از نوع «List» هست، هیچ متد تغییردهندهای نداره. اما «mutableList» از «MutableList» ساخته شده و متدهایی مثل «add», «remove» رو داره.
💡 نکته حرفهای:
در برنامهنویسی اندروید با «Jetpack Compose» معمولاً از «StateFlow» یا «LiveData» با لیستهای غیرقابل تغییر استفاده میکنن تا از بروز باگهای همزمانی جلوگیری بشه. پس بهتره تا جایی که ممکنه از «List» استفاده کنی و فقط در صورت نیاز از «MutableList» بهره ببری.
✅ برداشت عملی:
برای شروع هر پروژهای، نوع لیست رو متناسب با نیازت انتخاب کن. اگه قرار نیست تغییر کنه، از «listOf» استفاده کن؛ در غیر این صورت «mutableListOf» رو به کار ببر.
#Codeit #Android #Kotlin #Jetpack #List #KotlinBasics #Programming
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
❤1
🧩 «MutableList» در کاتلین، لیستی است که میتوانید اعضای آن را تغییر دهید، اضافه کنید یا حذف کنید.
برخلاف «immutable list» که فقط خواندنی است، «MutableList» برای سناریوهای پویا عالی است.
📌 کاربرد: زمانی که نیاز دارید لیست کاربران، آیتمهای سبد خرید یا نتایج جستجو را در حین اجرا تغییر دهید.
👨💻 کد ساده:
✅ این کد نشان میدهد که چگونه اعضای لیست را اضافه، حذف و ویرایش کنید.
🔄 برای کار با دادههای پویا در «ViewModel» یا «Repository» از این نوع استفاده کنید.
- همراه با «StateFlow» یا «LiveData» برای واکنشگرایی.
🎯 نکته: همیشه نوع «MutableList» را با متدهای کاربردی مثل
#Codeit #Android #Kotlin #Jetpack #MutableList #KotlinBasics #AndroidDev
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
برخلاف «immutable list» که فقط خواندنی است، «MutableList» برای سناریوهای پویا عالی است.
📌 کاربرد: زمانی که نیاز دارید لیست کاربران، آیتمهای سبد خرید یا نتایج جستجو را در حین اجرا تغییر دهید.
👨💻 کد ساده:
val names = mutableListOf("Ali", "Sara")
names.add("Reza")
names.remove("Sara")
names[0] = "Amir"
println(names) // خروجی: [Amir, Reza]
✅ این کد نشان میدهد که چگونه اعضای لیست را اضافه، حذف و ویرایش کنید.
🔄 برای کار با دادههای پویا در «ViewModel» یا «Repository» از این نوع استفاده کنید.
- همراه با «StateFlow» یا «LiveData» برای واکنشگرایی.
🎯 نکته: همیشه نوع «MutableList» را با متدهای کاربردی مثل
forEach یا filter ترکیب کنید تا کد تمیزتر شود. #Codeit #Android #Kotlin #Jetpack #MutableList #KotlinBasics #AndroidDev
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
❤2🔥1
🚀 دیگه وقتشه یه نگاه عمیقتر به «Set» در کاتلین بندازیم!
«Set» یه مجموعهست که فقط اعضای یکتا رو نگه میداره (بدون تکرار) و ترتیب خاصی هم نداره.
تو کاتلین دو نوع اصلی داریم: «immutable set» با «setOf» و «mutable set» با «mutableSetOf».
⚡️ «Set» موقعی به کار میاد که نیاز به حذف دادههای تکراری داری، مثلاً لیست آیدی کاربران که هر کدوم باید منحصربهفرد باشه.
🧩 همچنین میتونی با «Set» عملیات ریاضی مثل اشتراک، اجتماع و تفاضل رو به راحتی انجام بدی.
کد زیر نشون میده چطور «Set» میتونه تکراریها رو خودکار حذف کنه و چطور دو «Set» رو باهات مقایسه کنیم:
✅ کد بالا اول یک «Set» از حروف میسازه که مقدار تکراری «A» فقط یک بار ذخیره میشه.
سپس با توابع «intersect»، «union» و «subtract» اشتراک، اجتماع و تفاضل دو مجموعه رو محاسبه میکنیم.
📌 نتیجه عملی: از «Set» هر وقت نیاز به حذف تکراری یا عملیات مجموعهای داری استفاده کن؛ کدت تمیزتر و سریعتر میشه.
#Codeit #Android #Kotlin #Jetpack #Set #Collections #KotlinBasics
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
«Set» یه مجموعهست که فقط اعضای یکتا رو نگه میداره (بدون تکرار) و ترتیب خاصی هم نداره.
تو کاتلین دو نوع اصلی داریم: «immutable set» با «setOf» و «mutable set» با «mutableSetOf».
⚡️ «Set» موقعی به کار میاد که نیاز به حذف دادههای تکراری داری، مثلاً لیست آیدی کاربران که هر کدوم باید منحصربهفرد باشه.
🧩 همچنین میتونی با «Set» عملیات ریاضی مثل اشتراک، اجتماع و تفاضل رو به راحتی انجام بدی.
کد زیر نشون میده چطور «Set» میتونه تکراریها رو خودکار حذف کنه و چطور دو «Set» رو باهات مقایسه کنیم:
val firstSet = setOf("A", "B", "C", "A") // فقط A, B, C نگه میداره
val secondSet = setOf("B", "C", "D")
println(firstSet.intersect(secondSet)) // خروجی: [B, C]
println(firstSet.union(secondSet)) // خروجی: [A, B, C, D]
println(firstSet.subtract(secondSet)) // خروجی: [A]
✅ کد بالا اول یک «Set» از حروف میسازه که مقدار تکراری «A» فقط یک بار ذخیره میشه.
سپس با توابع «intersect»، «union» و «subtract» اشتراک، اجتماع و تفاضل دو مجموعه رو محاسبه میکنیم.
📌 نتیجه عملی: از «Set» هر وقت نیاز به حذف تکراری یا عملیات مجموعهای داری استفاده کن؛ کدت تمیزتر و سریعتر میشه.
#Codeit #Android #Kotlin #Jetpack #Set #Collections #KotlinBasics
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
🔥1
سوال درست پرسیدن، نیمی از راه حل است. 🧠
خیلی از برنامهنویسها وقتشون رو توی فرومها و گروهها تلف میکنن، چون سوالشون رو درست نمیپرسن. 😫
وقتی سوال خوب میپرسی، هم زودتر جواب میگیری، هم بقیه یاد میگیرن.
نکته اول: مشکل رو دقیق توصیف کن. نگو «کد من کار نمیکنه»، بگو «در «Kotlin» وقتی از «StateFlow» استفاده میکنم، مقدار اولیه رو نمیگیرم». 🎯
نکته دوم: کدت رو کوتاه و قابل اجرا بذار. خطا رو کامل بنویس.
نکته سوم: بگو چیکار کردی تا حلش کنی. این نشون میده باهوشی و وقت آدمها رو نمیگیری. 💡
مثال واقعی: به جای «اپلیکیشنم کرش میکنه»، بنویس «در «Jetpack Compose» وقتی روی دکمه کلیک میکنم، «NullPointerException» میگیرم. کد «Button» رو با «viewModelScope.launch» اجرا کردم ولی هنوز خطا دارم».
نتیجه: سوال خوب = جواب سریع = یادگیری عمیقتر. 🚀
از امروز تمرین کن. هر سوالی یه قدم به حرفهایتر شدنت نزدیکترت میکنه.
#Codeit #Android #Kotlin #Jetpack #ProgrammingTips #ProblemSolving #DeveloperMindset #TechCommunity
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
خیلی از برنامهنویسها وقتشون رو توی فرومها و گروهها تلف میکنن، چون سوالشون رو درست نمیپرسن. 😫
وقتی سوال خوب میپرسی، هم زودتر جواب میگیری، هم بقیه یاد میگیرن.
نکته اول: مشکل رو دقیق توصیف کن. نگو «کد من کار نمیکنه»، بگو «در «Kotlin» وقتی از «StateFlow» استفاده میکنم، مقدار اولیه رو نمیگیرم». 🎯
نکته دوم: کدت رو کوتاه و قابل اجرا بذار. خطا رو کامل بنویس.
نکته سوم: بگو چیکار کردی تا حلش کنی. این نشون میده باهوشی و وقت آدمها رو نمیگیری. 💡
مثال واقعی: به جای «اپلیکیشنم کرش میکنه»، بنویس «در «Jetpack Compose» وقتی روی دکمه کلیک میکنم، «NullPointerException» میگیرم. کد «Button» رو با «viewModelScope.launch» اجرا کردم ولی هنوز خطا دارم».
نتیجه: سوال خوب = جواب سریع = یادگیری عمیقتر. 🚀
از امروز تمرین کن. هر سوالی یه قدم به حرفهایتر شدنت نزدیکترت میکنه.
#Codeit #Android #Kotlin #Jetpack #ProgrammingTips #ProblemSolving #DeveloperMindset #TechCommunity
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
🔥2
🔹 «Map» در کاتلین یک ساختار کلید-مقدار قدرتمنده که توی ۹۰٪ پروژههای اندروید باهاش کار میکنی.
🔸 برخلاف لیست که با ایندکس عددی کار میکنه، اینجا هر مقدار با یه کلید منحصربهفرد ذخیره میشه.
🔹 دو نوع اصلی داریم: «immutable» (فقط خواندنی) و «mutable» (قابل تغییر).
📌 یه سناریوی واقعی: ذخیرهی تنظیمات کاربر (مثل تم، زبان و اندازه فونت) بهجای چندتا متغیر جدا.
💡 بیا یه «Map» بسازیم و روش عملیات پایه رو یاد بگیریم:
🔹 «mutableMapOf» یک «MutableMap» میسازه که میتونی مقادیرش رو تغییر بدی.
🔸 با براکت
🔹
🔥 نکته مهم: در کاتلین بهتره تا حد امکان از «immutable map» استفاده کنی تا کدت خطاناپذیرتر بشه.
🚀 تمرین کن: یه «Map» از وضعیت آیتمهای یه لیست خرید درست کن و عملیات بالا رو روش انجام بده.
#Codeit #Android #Kotlin #Map #Collection #DataStructures
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
🔸 برخلاف لیست که با ایندکس عددی کار میکنه، اینجا هر مقدار با یه کلید منحصربهفرد ذخیره میشه.
🔹 دو نوع اصلی داریم: «immutable» (فقط خواندنی) و «mutable» (قابل تغییر).
📌 یه سناریوی واقعی: ذخیرهی تنظیمات کاربر (مثل تم، زبان و اندازه فونت) بهجای چندتا متغیر جدا.
💡 بیا یه «Map» بسازیم و روش عملیات پایه رو یاد بگیریم:
val settings = mutableMapOf(
"theme" to "dark",
"language" to "en",
"fontSize" to 14
)
// دسترسی به مقدار
println(settings["theme"]) // dark
// اضافه کردن کلید جدید
settings["notifications"] = true
// بروزرسانی مقدار
settings["fontSize"] = 16
// حذف کلید
settings.remove("language")
// بررسی وجود کلید
if (settings.containsKey("theme")) {
println("Theme is set")
}
🔹 «mutableMapOf» یک «MutableMap» میسازه که میتونی مقادیرش رو تغییر بدی.
🔸 با براکت
[] هم میتونی بخونی هم بنویسی – اگه کلید نباشه، مقدار null برمیگردونه. 🔹
to یه «Pair» میسازه و بهعنوان ورودی به «mutableMapOf» میره. 🔥 نکته مهم: در کاتلین بهتره تا حد امکان از «immutable map» استفاده کنی تا کدت خطاناپذیرتر بشه.
🚀 تمرین کن: یه «Map» از وضعیت آیتمهای یه لیست خرید درست کن و عملیات بالا رو روش انجام بده.
#Codeit #Android #Kotlin #Map #Collection #DataStructures
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
❤2
🔹 دوست داری تو یه خط، کل لیست رو تغییر بدی یا فیلتر کنی؟
«map» و «filter» دو تا از قدرتمندترین عملیاتهای مجموعه در «Kotlin» هستن که کدت رو خواناتر و سریعتر میکنن 😎
🔸 «map» هر المان رو به چیز دیگهای تبدیل میکنه. مثلاً لیست اعداد رو به مربعشون تبدیل کن.
🔸 «filter» فقط المانهایی رو نگه میداره که شرط مشخصی داشته باشن. مثلاً فقط اعداد زوج.
📌 کاربرد واقعی: فرض کن لیست قیمتهای محصولات داری. میخوای قیمتهای بالای ۱۰۰ رو با تخفیف ۲۰٪ نشون بدی.
🔹 اول کد رو ببین:
🔸 توضیح: اول با «filter» قیمتهای بزرگتر از ۱۰۰ رو جدا میکنیم، بعد با «map» هر کدوم رو در ۰.۸ ضرب میکنیم. نتیجه یه لیست جدید از تخفیفهاست.
💡 نکته: این دو عملیات قابل زنجیره شدن هستن و باعث میشن نیازی به حلقههای تودرتو نباشه. کد تمیزتر و کمخطاتر میشه.
✅ برداشت عملی: هر وقت خواستی روی یه لیست تغییرات دستهجمعی بدی یا فیلترش کنی، از «map» و «filter» استفاده کن. با تمرین، دیگه از «for» بینیاز میشی!
#Codeit #Android #Kotlin #Jetpack #FunctionalProgramming #CollectionOperations
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
«map» و «filter» دو تا از قدرتمندترین عملیاتهای مجموعه در «Kotlin» هستن که کدت رو خواناتر و سریعتر میکنن 😎
🔸 «map» هر المان رو به چیز دیگهای تبدیل میکنه. مثلاً لیست اعداد رو به مربعشون تبدیل کن.
🔸 «filter» فقط المانهایی رو نگه میداره که شرط مشخصی داشته باشن. مثلاً فقط اعداد زوج.
📌 کاربرد واقعی: فرض کن لیست قیمتهای محصولات داری. میخوای قیمتهای بالای ۱۰۰ رو با تخفیف ۲۰٪ نشون بدی.
🔹 اول کد رو ببین:
val prices = listOf(50, 150, 200, 80, 300)
val discounted = prices
.filter { it > 100 }
.map { it * 0.8 }
println(discounted) // [120.0, 160.0, 240.0]
🔸 توضیح: اول با «filter» قیمتهای بزرگتر از ۱۰۰ رو جدا میکنیم، بعد با «map» هر کدوم رو در ۰.۸ ضرب میکنیم. نتیجه یه لیست جدید از تخفیفهاست.
💡 نکته: این دو عملیات قابل زنجیره شدن هستن و باعث میشن نیازی به حلقههای تودرتو نباشه. کد تمیزتر و کمخطاتر میشه.
✅ برداشت عملی: هر وقت خواستی روی یه لیست تغییرات دستهجمعی بدی یا فیلترش کنی، از «map» و «filter» استفاده کن. با تمرین، دیگه از «for» بینیاز میشی!
#Codeit #Android #Kotlin #Jetpack #FunctionalProgramming #CollectionOperations
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
❤1🔥1
📦 در دنیای «Kotlin»، وقتی با لیستهای تو در تو سروکار دارید، دو تا از قدرتمندترین ابزارها «flatMap» و «flatten» هستند.🧩 خیلی ساده بگم: «flatten» یک لیست از لیستها رو به یک لیست تخت تبدیل میکنه و «flatMap» همون کار رو انجام میده ولی قبلش به هر عنصر یک نگاشت (مپ) اعمال میکنه.🤯 فرض کنید یک لیست از کاربران دارید که هر کاربر یک لیست از سفارشاتش رو داره. میخواید همه سفارشات رو یکجا ببینید. اول با «flatMap» میبینیم چطور کار میکنه.
کد عملی:
✅ در این کد: «flatMap» به هر کاربر (عنصر) دسترسی پیدا میکنه، خاصیت «orders» رو برمیگردونه و سپس همه لیستها رو در یک لیست تخت میریزه. «flatten» هم برای حالتی که فقط لیستهای لیست داریم و نمیخوایم تغییری در محتوا بدیم عالیه.💡 نکته کلیدی: «flatMap» معادل «map» + «flatten» هستش، ولی خیلی خواناتر و بهینهتر.
🔥 کاربرد واقعی: وقتی APIای دارید که دادههای تو در تو برمیگردونه (مثلاً لیست گروهها و هر گروه شامل لیست محصولات)، با «flatMap» میتونید سریع همه محصولات رو استخراج کنید و در «RecyclerView» نمایش بدید.🚀 این عملیاتها باعث میشن کدتون خواناتر، فشردهتر و دور از حلقههای تودرتو باشه. حتماً توی پروژههاتون امتحان کنید.
#Codeit #Android #Kotlin #Jetpack #KotlinCollections #FlatMap #Flatten #FunctionalProgramming
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
کد عملی:
data class Order(val id: Int, val amount: Double)
data class User(val name: String, val orders: List<Order>)
val users = listOf(
User("Ali", listOf(Order(1, 100.0), Order(2, 200.0))),
User("Sara", listOf(Order(3, 150.0))),
User("Reza", listOf())
)
// استفاده از flatMap برای استخراج همه سفارشات
val allOrders: List<Order> = users.flatMap { it.orders }
println(allOrders) // [Order(1,100.0), Order(2,200.0), Order(3,150.0)]
// flatten فقط برای لیستهای لیست بدون تغییر عناصر کار میکنه
val listOfLists = listOf(listOf(1,2), listOf(3,4), emptyList())
val flattened = listOfLists.flatten()
println(flattened) // [1, 2, 3, 4]
✅ در این کد: «flatMap» به هر کاربر (عنصر) دسترسی پیدا میکنه، خاصیت «orders» رو برمیگردونه و سپس همه لیستها رو در یک لیست تخت میریزه. «flatten» هم برای حالتی که فقط لیستهای لیست داریم و نمیخوایم تغییری در محتوا بدیم عالیه.💡 نکته کلیدی: «flatMap» معادل «map» + «flatten» هستش، ولی خیلی خواناتر و بهینهتر.
🔥 کاربرد واقعی: وقتی APIای دارید که دادههای تو در تو برمیگردونه (مثلاً لیست گروهها و هر گروه شامل لیست محصولات)، با «flatMap» میتونید سریع همه محصولات رو استخراج کنید و در «RecyclerView» نمایش بدید.🚀 این عملیاتها باعث میشن کدتون خواناتر، فشردهتر و دور از حلقههای تودرتو باشه. حتماً توی پروژههاتون امتحان کنید.
#Codeit #Android #Kotlin #Jetpack #KotlinCollections #FlatMap #Flatten #FunctionalProgramming
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
🥰1
🧠 «Problem Solving» یکی از مهمترین مهارتهای یک برنامهنویس حرفهایست، ولی خیلیها فقط کد میزنن بدون اینکه ذهنشون رو برای حل مسائل عمیق تمرین بدن.
🚀 «Becoming a Better Problem Solver» یعنی یاد بگیری چطور به جای وحشت از باگها و خطاها، ازشون به عنوان چالش یادگیری استفاده کنی.
💡 اولین قدم: مسئله رو خوب تعریف کن. تا نفهمی دقیقاً مشکل چیه، راهحل درست پیدا نمیشه.
🔍 دومین قدم: مسئله رو به بخشهای کوچیکتر بشکن. مثل «Divide and Conquer» تو دنیای الگوریتمها.
🧩 سومین قدم: راهحلهای مختلف رو لیست کن. حتی اونهایی که احمقانه به نظر میرسن. گاهی بهترین ایده از عجیبترین جاها میاد.
📝 چهارمین قدم: راهحل رو روی کاغذ یا تو ذهنت شبیهسازی کن. قبل از نوشتن کد، مطمئن شو منطق کار میکنه.
🛠️ پنجمین قدم: پیادهسازی کن و تست بگیر. باگها رو بغل کن، چون هر باگ یه فرصت یادگیریه.
🎯 نکته کلیدی: هر روز حداقل یک مسئله کوچیک حل کن. از سایتهایی مثل «LeetCode» یا «Codewars» استفاده کن.
🔥 یادت باشه: بهترین برنامهنویسها کسایی نیستن که هیچوقت باگ ندارن، بلکه کسایی هستن که بهترین روش حل مسئله رو بلدن.
✨ این مهارت رو میتونی تو پروژههای واقعی «Android» با «Kotlin» هم تمرین کنی. مثلاً وقتی معماری «Clean Architecture» رو پیاده میکنی، ذهنت خودش مسئلهها رو به لایههای مستقل تقسیم میکنه.
📈 نتیجه: هر بار که یه مشکل سخت رو حل میکنی، یه قدم به یه برنامهنویس حرفهتر نزدیکتر میشی.
#Codeit #Android #Kotlin #Jetpack #ProblemSolving #DeveloperMindset #CleanCode
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
🚀 «Becoming a Better Problem Solver» یعنی یاد بگیری چطور به جای وحشت از باگها و خطاها، ازشون به عنوان چالش یادگیری استفاده کنی.
💡 اولین قدم: مسئله رو خوب تعریف کن. تا نفهمی دقیقاً مشکل چیه، راهحل درست پیدا نمیشه.
🔍 دومین قدم: مسئله رو به بخشهای کوچیکتر بشکن. مثل «Divide and Conquer» تو دنیای الگوریتمها.
🧩 سومین قدم: راهحلهای مختلف رو لیست کن. حتی اونهایی که احمقانه به نظر میرسن. گاهی بهترین ایده از عجیبترین جاها میاد.
📝 چهارمین قدم: راهحل رو روی کاغذ یا تو ذهنت شبیهسازی کن. قبل از نوشتن کد، مطمئن شو منطق کار میکنه.
🛠️ پنجمین قدم: پیادهسازی کن و تست بگیر. باگها رو بغل کن، چون هر باگ یه فرصت یادگیریه.
🎯 نکته کلیدی: هر روز حداقل یک مسئله کوچیک حل کن. از سایتهایی مثل «LeetCode» یا «Codewars» استفاده کن.
🔥 یادت باشه: بهترین برنامهنویسها کسایی نیستن که هیچوقت باگ ندارن، بلکه کسایی هستن که بهترین روش حل مسئله رو بلدن.
✨ این مهارت رو میتونی تو پروژههای واقعی «Android» با «Kotlin» هم تمرین کنی. مثلاً وقتی معماری «Clean Architecture» رو پیاده میکنی، ذهنت خودش مسئلهها رو به لایههای مستقل تقسیم میکنه.
📈 نتیجه: هر بار که یه مشکل سخت رو حل میکنی، یه قدم به یه برنامهنویس حرفهتر نزدیکتر میشی.
#Codeit #Android #Kotlin #Jetpack #ProblemSolving #DeveloperMindset #CleanCode
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
❤1
🔥 توی دنیای واقعی، همیشه دادهها رو بر اساس یه ویژگی مشترک دستهبندی میکنیم. مثلاً مشتریها بر اساس شهر، یا محصولات بر اساس دستهبندی. توی «Kotlin» یه تابع خفن به اسم «groupBy» هست که دقیقاً همین کار رو میکنه.
🌀 «groupBy» یه عملیات «Collection» هست که لیست رو بر اساس یه کلید مشخص به «Map» تبدیل میکنه. هر کلید به لیستی از آیتمهایی که اون کلید رو دارند اشاره میکنه.
✅ فرض کن لیستی از سفارشهای یک فروشگاه آنلاین داری. میخوای سفارشها رو بر اساس وضعیت (مثلاً «پرداخت شده» یا «در انتظار») دستهبندی کنی. اینجا «groupBy» عالیه.
📌 بیا یه مثال ساده ببینیم. اول یه «data class» برای سفارش تعریف میکنیم:
🧩 حالا یه لیست از سفارشها داریم و میخوایم با «groupBy» دستهبندیشون کنیم:
📊 حالا «groupedByStatus» یه «Map» هست که کلیدش وضعیت و مقدارش لیست سفارشهای هموضعیته. مثلاً:
💡 اگه نیاز به دستهبندی پیشرفتهتر داشته باشی، «groupBy» میتونه یه «lambda» برای تبدیل مقدار هم قبول کنه. مثلاً فقط اسم سفارشها رو ذخیره کنی:
🚀 این تابع توی هر جایی که نیاز به دستهبندی داری به کار میاد: از داشبورد مدیریت تا گزارشگیری و تحلیل داده. حتماً تو پروژههات استفاده کن.
#Codeit #Android #Kotlin #Jetpack #CollectionOperations #groupBy #KotlinTips
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
🌀 «groupBy» یه عملیات «Collection» هست که لیست رو بر اساس یه کلید مشخص به «Map» تبدیل میکنه. هر کلید به لیستی از آیتمهایی که اون کلید رو دارند اشاره میکنه.
✅ فرض کن لیستی از سفارشهای یک فروشگاه آنلاین داری. میخوای سفارشها رو بر اساس وضعیت (مثلاً «پرداخت شده» یا «در انتظار») دستهبندی کنی. اینجا «groupBy» عالیه.
📌 بیا یه مثال ساده ببینیم. اول یه «data class» برای سفارش تعریف میکنیم:
data class Order(
val id: Int,
val status: String,
val amount: Double
)
🧩 حالا یه لیست از سفارشها داریم و میخوایم با «groupBy» دستهبندیشون کنیم:
val orders = listOf(
Order(1, "Paid", 150.0),
Order(2, "Pending", 200.0),
Order(3, "Paid", 300.0),
Order(4, "Canceled", 50.0),
Order(5, "Pending", 120.0)
)
val groupedByStatus = orders.groupBy { it.status }
📊 حالا «groupedByStatus» یه «Map» هست که کلیدش وضعیت و مقدارش لیست سفارشهای هموضعیته. مثلاً:
// خروجی:
// {Paid=[Order(1, Paid, 150.0), Order(3, Paid, 300.0)],
// Pending=[Order(2, Pending, 200.0), Order(5, Pending, 120.0)],
// Canceled=[Order(4, Canceled, 50.0)]}
💡 اگه نیاز به دستهبندی پیشرفتهتر داشته باشی، «groupBy» میتونه یه «lambda» برای تبدیل مقدار هم قبول کنه. مثلاً فقط اسم سفارشها رو ذخیره کنی:
val groupedIds = orders.groupBy(
keySelector = { it.status },
valueTransform = { it.id }
)
// خروجی: {Paid=[1, 3], Pending=[2, 5], Canceled=[4]}
🚀 این تابع توی هر جایی که نیاز به دستهبندی داری به کار میاد: از داشبورد مدیریت تا گزارشگیری و تحلیل داده. حتماً تو پروژههات استفاده کن.
#Codeit #Android #Kotlin #Jetpack #CollectionOperations #groupBy #KotlinTips
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
❤1🔥1
🧩 لیستهات رو مرتب میکنی، اما میخوای بر اساس یه خاصیت مشخص مرتبسازی کنی؟ «sortedBy» تو «Kotlin» دقیقاً همین کار رو انجام میده. دیگه نیاز نیست خودت بنویسی که چطور مقایسه کنی.
«sortedBy» یه lambda میگیره که مشخص میکنه بر اساس کدوم خاصیت (مثلاً اسم، سن، تاریخ) لیست مرتب بشه. برعکس «sorted» که فقط روی خود آیتمها کار میکنه (مثلاً اعداد یا رشتهها).
💡 فرض کن یه لیست از کاربرا داری و میخوای بر اساس «age» (سن) صعودی مرتب بشن. با «sortedBy» خیلی راحت میشه.
کد عملی رو با یه مثال واقعی ببین:
تو این کد یه لیست از کاربرا با نام و سن داریم. با «sortedBy { it.age }» لیست رو بر اساس سن به ترتیب صعودی مرتب میکنیم. خروجی: «User(name=Reza, age=22), User(name=Ali, age=25), User(name=Sara, age=30)».
نکته مهم: «sortedBy» یه لیست جدید برمیگردونه و لیست اصلی رو تغییر نمیده (immutable). اگر نیاز به مرتبسازی نزولی داری، از «sortedByDescending» استفاده کن.
✅ با «sortedBy» میتونی هر نوع دادهای رو بر اساس یه خاصیت به راحتی مرتب کنی. این یه ابزار قدرتمنده برای پردازش لیستها تو «Kotlin».
#Codeit #Android #Kotlin #Jetpack #CollectionOperations #Sorting #KotlinTips
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
«sortedBy» یه lambda میگیره که مشخص میکنه بر اساس کدوم خاصیت (مثلاً اسم، سن، تاریخ) لیست مرتب بشه. برعکس «sorted» که فقط روی خود آیتمها کار میکنه (مثلاً اعداد یا رشتهها).
💡 فرض کن یه لیست از کاربرا داری و میخوای بر اساس «age» (سن) صعودی مرتب بشن. با «sortedBy» خیلی راحت میشه.
کد عملی رو با یه مثال واقعی ببین:
data class User(val name: String, val age: Int)
fun main() {
val users = listOf(
User("Ali", 25),
User("Sara", 30),
User("Reza", 22)
)
val sortedUsers = users.sortedBy { it.age }
println(sortedUsers)
}
تو این کد یه لیست از کاربرا با نام و سن داریم. با «sortedBy { it.age }» لیست رو بر اساس سن به ترتیب صعودی مرتب میکنیم. خروجی: «User(name=Reza, age=22), User(name=Ali, age=25), User(name=Sara, age=30)».
نکته مهم: «sortedBy» یه لیست جدید برمیگردونه و لیست اصلی رو تغییر نمیده (immutable). اگر نیاز به مرتبسازی نزولی داری، از «sortedByDescending» استفاده کن.
✅ با «sortedBy» میتونی هر نوع دادهای رو بر اساس یه خاصیت به راحتی مرتب کنی. این یه ابزار قدرتمنده برای پردازش لیستها تو «Kotlin».
#Codeit #Android #Kotlin #Jetpack #CollectionOperations #Sorting #KotlinTips
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
🔥2
لاندا اکسپرشنها تو «Kotlin» مثل یک تابع بینام هستن که میتونی بدی به یه متد دیگه تا اجرا کنه. 😎 خیلی کدت رو خواناتر و کوتاهتر میکنه. بیا ببینیم چطور کار میکنه.
🔹 یه لاندا اکثراً با
🔸 کاربرد واقعی: مثلاً فیلتر کردن یه لیست از اعداد. بدون لاندا باید یه حلقه مینوشتی، ولی با لاندا یه خط کافیه.
کد زیر رو ببین:
این کد با استفاده از تابع
💡 نکته: میتونی لاندا رو به عنوان آخرین پارامتر تابع بدی (Trailing Lambda Syntax) که خیلی رایجتره.
📌 حالا یه مثال کاربردیتر: فرض کن میخوای روی یه لیست از کاربران، اونایی که سنشون بالای ۱۸ هست رو پیدا کنی:
🧠 لانداها تو «Kotlin» برای callbackها، پردازش مجموعهها و حتی تعریف شنوندهها توی «Android» عالیان.
🎯 نتیجه: لاندا اکسپرشنها یکی از قدرتمندترین ابزارهای «Kotlin» هستن. تمرین کن تا کدت حرفهایتر بشه.
#Codeit #Android #Kotlin #Jetpack #Lambda #FunctionalProgramming #CleanCode
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
🔹 یه لاندا اکثراً با
{} نوشته میشه و اگه فقط یه پارامتر داشته باشه میتونی از it استفاده کنی.🔸 کاربرد واقعی: مثلاً فیلتر کردن یه لیست از اعداد. بدون لاندا باید یه حلقه مینوشتی، ولی با لاندا یه خط کافیه.
کد زیر رو ببین:
val numbers = listOf(1, 2, 3, 10, 15)
val filtered = numbers.filter { it > 5 }
println(filtered) // خروجی: [10, 15]
این کد با استفاده از تابع
filter و یه لاندا اکسپرشن، اعداد بزرگتر از ۵ رو برمیگردونه. «it» همون عنصر جاری لیسته.💡 نکته: میتونی لاندا رو به عنوان آخرین پارامتر تابع بدی (Trailing Lambda Syntax) که خیلی رایجتره.
📌 حالا یه مثال کاربردیتر: فرض کن میخوای روی یه لیست از کاربران، اونایی که سنشون بالای ۱۸ هست رو پیدا کنی:
data class User(val name: String, val age: Int)
val users = listOf(User("Ali", 20), User("Sara", 17), User("Reza", 25))
val adults = users.filter { it.age >= 18 }
adults.forEach { println(it.name) } // خروجی: Ali, Reza
🧠 لانداها تو «Kotlin» برای callbackها، پردازش مجموعهها و حتی تعریف شنوندهها توی «Android» عالیان.
🎯 نتیجه: لاندا اکسپرشنها یکی از قدرتمندترین ابزارهای «Kotlin» هستن. تمرین کن تا کدت حرفهایتر بشه.
#Codeit #Android #Kotlin #Jetpack #Lambda #FunctionalProgramming #CleanCode
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
❤1🔥1
⏳ مدیریت زمان برای توسعهدهندهها؛ مهارتی که از هر فریمورکی مهمتر است!
🕰️ روزها کوتاهتر از آناند که غرق در تسکهای بیپایان شوید.
🧠 ذهن ما مثل یک پردازندهست: اگر چند کار همزمان بهش بدهید، همه را ناقص انجام میدهد.
✅ قانون طلایی: «تکوظیفگی» را جایگزین «چندوظیفگی» کنید.
🎯 اولویتبندی با متد «آیزنهاور»: کارها را به چهار دسته تقسیم کنید:
۱. مهم و فوری → همین حالا
۲. مهم و غیرفوری → زمانبندی
۳. غیرمهم و فوری → برونسپاری
۴. غیرمهم و غیرفوری → حذف
⏱️ تکنیک «پومودورو» را امتحان کنید: ۲۵ دقیقه کار متمرکز، ۵ دقیقه استراحت.
📱 ابزارهایی مثل «Todoist» یا «Notion» میتوانند نقشه راه شما باشند.
💡 یک نکته عملی: هر روز صبح ۳ کار اصلی روز را بنویسید و تا انجام نشدنشان سراغ بقیه نروید.
📉 رشد درآمد و پیشرفت شغلی شما مستقیماً به توانایی مدیریت زمان وابسته است.
🚀 از فردا شروع کنید: دفترچهای بردارید، اولویتها را مشخص کنید و تایمر را بزنید.
🔄 دو هفته بعد، نتیجه را خودتان خواهید دید.
#Codeit #TimeManagement #DeveloperProductivity #Pomodoro #Focus #Android #Kotlin #Jetpack
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
🕰️ روزها کوتاهتر از آناند که غرق در تسکهای بیپایان شوید.
🧠 ذهن ما مثل یک پردازندهست: اگر چند کار همزمان بهش بدهید، همه را ناقص انجام میدهد.
✅ قانون طلایی: «تکوظیفگی» را جایگزین «چندوظیفگی» کنید.
🎯 اولویتبندی با متد «آیزنهاور»: کارها را به چهار دسته تقسیم کنید:
۱. مهم و فوری → همین حالا
۲. مهم و غیرفوری → زمانبندی
۳. غیرمهم و فوری → برونسپاری
۴. غیرمهم و غیرفوری → حذف
⏱️ تکنیک «پومودورو» را امتحان کنید: ۲۵ دقیقه کار متمرکز، ۵ دقیقه استراحت.
📱 ابزارهایی مثل «Todoist» یا «Notion» میتوانند نقشه راه شما باشند.
💡 یک نکته عملی: هر روز صبح ۳ کار اصلی روز را بنویسید و تا انجام نشدنشان سراغ بقیه نروید.
📉 رشد درآمد و پیشرفت شغلی شما مستقیماً به توانایی مدیریت زمان وابسته است.
🚀 از فردا شروع کنید: دفترچهای بردارید، اولویتها را مشخص کنید و تایمر را بزنید.
🔄 دو هفته بعد، نتیجه را خودتان خواهید دید.
#Codeit #TimeManagement #DeveloperProductivity #Pomodoro #Focus #Android #Kotlin #Jetpack
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
🔥1
🔥 توابع مرتبهبالا (Higher-order functions) تو «کاتلین» یه ابزار قدرتمند برای نوشتن کد تمیز و قابل استفاده مجدد هستن. یعنی تابعی که یا تابع دیگهای رو به عنوان ورودی میگیره، یا یک تابع رو برمیگردونه. این کار کدت رو انعطافپذیر میکنه.
📌 توی پروژههای واقعی مثلاً میخوای عملیات تکراری مثل نمایش پیام خطا یا ذخیره اطلاعات رو با رفتارهای مختلف یکپارچه کنی. بهجای نوشتن چندین تابع جدا، میتونی یک تابع مرتبهبالا بنویسی که تابع مورد نظر رو بهش پاس بدی.
🧩 بیایم یه مثال ساده بزنیم:
📝 این کد یه تابع مرتبهبالا به اسم «performOperation» داره که دو عدد و یه تابع به اسم «operation» میگیره. بعد توی «main» دو بار با عملیات جمع و ضرب صدا زده شده. نتیجه: بدون تکرار کد، دو رفتار متفاوت داریم.
🎯 نکته مهم: ازش تو «Jetpack Compose» برای مدیریت رویدادها و ترکیبهای شرطی استفاده میکنن. مثلاً تو «StateFlow» و «Callback»ها خیلی به کار میاد.
💡 نتیجه: یادگیری توابع مرتبهبالا کدتو خشکتر و خواناتر میکنه. حتماً تمرین کن.
#Codeit #Android #Kotlin #Jetpack #HigherOrderFunctions #FunctionalProgramming #CleanCode #KotlinTips
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
📌 توی پروژههای واقعی مثلاً میخوای عملیات تکراری مثل نمایش پیام خطا یا ذخیره اطلاعات رو با رفتارهای مختلف یکپارچه کنی. بهجای نوشتن چندین تابع جدا، میتونی یک تابع مرتبهبالا بنویسی که تابع مورد نظر رو بهش پاس بدی.
🧩 بیایم یه مثال ساده بزنیم:
fun performOperation(a: Int, b: Int, operation: (Int, Int) -> Int): Int {
return operation(a, b)
}
fun main() {
val sum = performOperation(5, 3) { x, y -> x + y }
val product = performOperation(5, 3) { x, y -> x * y }
println("Sum: $sum, Product: $product")
}
📝 این کد یه تابع مرتبهبالا به اسم «performOperation» داره که دو عدد و یه تابع به اسم «operation» میگیره. بعد توی «main» دو بار با عملیات جمع و ضرب صدا زده شده. نتیجه: بدون تکرار کد، دو رفتار متفاوت داریم.
🎯 نکته مهم: ازش تو «Jetpack Compose» برای مدیریت رویدادها و ترکیبهای شرطی استفاده میکنن. مثلاً تو «StateFlow» و «Callback»ها خیلی به کار میاد.
💡 نتیجه: یادگیری توابع مرتبهبالا کدتو خشکتر و خواناتر میکنه. حتماً تمرین کن.
#Codeit #Android #Kotlin #Jetpack #HigherOrderFunctions #FunctionalProgramming #CleanCode #KotlinTips
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
🔥1🥰1
آیا میدونستی میتونی نوع یه تابع رو درست مثل نوع دادههای معمولی تعریف کنی و به عنوان پارامتر یا متغیر استفاده کنی؟ 🔥
تو «Kotlin»، «Function Type» یعنی مشخص کردن ورودی و خروجی یه تابع به عنوان یه نوع داده. مثلاً «(Int) -> String» یعنی تابعی که یک عدد میگیره و یک رشته برمیگردونه.
خیلی جاها به کار میاد: وقتی میخوای یه تابع رو به تابع دیگه بدی (Higher-Order Function) یا یه لیست از توابع داشته باشی.
بیایم یه مثال ساده بزنیم:
این کد یه تابع به اسم «executeOperation» داره که دو عدد و یه «Function Type» به اسم «operation» میگیره. توی «main» دو بار با lambdaهای مختلف صداش میزنیم: یکی جمع و یکی ضرب.
کاربرد عملی: میتونی با «Function Type» کد خشکتر و انعطافپذیرتر بنویسی – مثلاً برای فیلتر کردن لیست یا اعمال تبدیلات مختلف روی دادهها. 🚀
#Codeit #Android #Kotlin #Jetpack #FunctionTypes #HigherOrderFunctions #Lambda
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
تو «Kotlin»، «Function Type» یعنی مشخص کردن ورودی و خروجی یه تابع به عنوان یه نوع داده. مثلاً «(Int) -> String» یعنی تابعی که یک عدد میگیره و یک رشته برمیگردونه.
خیلی جاها به کار میاد: وقتی میخوای یه تابع رو به تابع دیگه بدی (Higher-Order Function) یا یه لیست از توابع داشته باشی.
بیایم یه مثال ساده بزنیم:
fun executeOperation(a: Int, b: Int, operation: (Int, Int) -> Int): Int {
return operation(a, b)
}
fun main() {
val sum = executeOperation(5, 3) { x, y -> x + y }
val product = executeOperation(5, 3) { x, y -> x * y }
println("Sum: $sum")
println("Product: $product")
}
این کد یه تابع به اسم «executeOperation» داره که دو عدد و یه «Function Type» به اسم «operation» میگیره. توی «main» دو بار با lambdaهای مختلف صداش میزنیم: یکی جمع و یکی ضرب.
کاربرد عملی: میتونی با «Function Type» کد خشکتر و انعطافپذیرتر بنویسی – مثلاً برای فیلتر کردن لیست یا اعمال تبدیلات مختلف روی دادهها. 🚀
#Codeit #Android #Kotlin #Jetpack #FunctionTypes #HigherOrderFunctions #Lambda
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
🔥2
🔹آیا تابهحال تابعی نوشتهاید که فقط برای یک نوع داده کار کند و مجبور شدهاید بارها کد تکراری بنویسید؟
🔸«Generics» در «Kotlin» این مشکل را یکبار برای همیشه حل میکند.
💡 Generics چیست؟
به شما اجازه میدهد کلاسها، توابع و اینترفیسها را بدون وابستگی به یک نوع خاص تعریف کنید و همزمان «Type Safety» را حفظ کنید.
🛠️ مثال عملی:
یک کلاس جعبه (Box) میسازیم که بتواند هر نوع دادهای را ذخیره کند:
✅ این کد نشان میدهد که چگونه با یک کلاس «Generic»، هم از رشته و هم از عدد بدون خطا استفاده میکنیم.
🔐 «Type Safety» در زمان کامپایل تضمین میشود و نیازی به «Casting» دستی نیست.
🧠 نکته کلیدی:
از «Generics» در لیستها، «LiveData»، «Repository»، و حتی «ViewModel» هم استفاده میشود. مثلاً «MutableList<T>» یا «LiveData<T>».
📌 جمعبندی:
با «Generics» کدتان انعطافپذیرتر، قابل استفاده مجدد و امنتر میشود.
📅 امروز یک کلاس «Generic» بنویسید و قدرت آن را لمس کنید.
#Codeit #Android #Kotlin #Jetpack #Generics #TypeSafety #CleanCode #KotlinTips
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
🔸«Generics» در «Kotlin» این مشکل را یکبار برای همیشه حل میکند.
💡 Generics چیست؟
به شما اجازه میدهد کلاسها، توابع و اینترفیسها را بدون وابستگی به یک نوع خاص تعریف کنید و همزمان «Type Safety» را حفظ کنید.
🛠️ مثال عملی:
یک کلاس جعبه (Box) میسازیم که بتواند هر نوع دادهای را ذخیره کند:
class Box<T>(private val item: T) {
fun getContent(): T = item
}
fun main() {
val stringBox = Box<String>("Hello")
val intBox = Box<Int>(42)
println(stringBox.getContent()) // Hello
println(intBox.getContent()) // 42
}
✅ این کد نشان میدهد که چگونه با یک کلاس «Generic»، هم از رشته و هم از عدد بدون خطا استفاده میکنیم.
🔐 «Type Safety» در زمان کامپایل تضمین میشود و نیازی به «Casting» دستی نیست.
🧠 نکته کلیدی:
از «Generics» در لیستها، «LiveData»، «Repository»، و حتی «ViewModel» هم استفاده میشود. مثلاً «MutableList<T>» یا «LiveData<T>».
📌 جمعبندی:
با «Generics» کدتان انعطافپذیرتر، قابل استفاده مجدد و امنتر میشود.
📅 امروز یک کلاس «Generic» بنویسید و قدرت آن را لمس کنید.
#Codeit #Android #Kotlin #Jetpack #Generics #TypeSafety #CleanCode #KotlinTips
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
❤1🥰1