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

Kotlin • Android

🚀 آموزش ساده، کاربردی و پروژه‌محور
💡 مخصوص توسعه‌دهندگان موبایل
Download Telegram
🔥 کار با کدهای جاوا در Kotlin بدون دردسر؟
اگر تا حالا خواستی یه کلاس جاوا رو تو پروژه‌ی Kotlin استفاده کنی و به مشکل برخوردی، وقتشه با Java Interoperability آشنا بشی!

📌 چرا مهمه؟
توی دنیای اندروید، کلی کتابخونه و کد جاوا هست که هنوز استفاده میشن. Kotlin به‌صورت پیش‌فرض از جاوا پشتیبانی می‌کنه، ولی گاهی نیاز به تنظیمات خاصی داره تا رفتار مورد نظر توی دو طرف یکسان باشه.

🧠 مفاهیم کلیدی:
- @JvmStatic: وقتی از object یا companion object استفاده می‌کنی، برای دسترسی راحت‌تر از جاوا به متدهاش، این annotation رو بزن.
- @JvmOverloads: برای توابعی که پارامتر پیش‌فرض دارن، این annotation باعث میشه جاوا overload های مورد نیاز رو ببینه.
- Nullable annotations: وقتی یه تابع Kotlin می‌تونه null برگردونه، با @Nullable یا @NonNull به جاوا علامت بده.

💻 مثال عملی:

// در فایل Kotlin
object Calculator {
@JvmStatic
fun sum(a: Int, b: Int): Int = a + b

@JvmOverloads
fun greet(name: String, prefix: String = "Hello") = "$prefix, $name!"
}


کاری که این کد انجام میده:
- توی جاوا می‌تونی Calculator.sum(3, 4) رو مستقیما صدا بزنی، انگار یه متد استاتیکه.
- تابع greet رو هم با یک یا دو پارامتر تو جاوا استفاده می‌کنی (بدون نیاز به overload دستی).

📎 نکته حرفه‌ای:
همیشه توی فایل‌های build.gradle ماژول، تنظیمات freeCompilerArgs رو برای Java interop به‌روز نگه دار.

#Kotlin #JavaInterop #AndroidDev #ProgrammingTips
#Codeit #Android #Kotlin #Jetpack

🌐 Codeit → https://code-it.ir

━━━━━━━━━━━━━━━
@CodeitMobile
1
🔧 Java Interoperability در «Kotlin» یکی از قدرتمندترین ویژگی‌هاست؛ مخصوصاً وقتی با کدهای قدیمی «Java» کار می‌کنی.

🔄 گاهی نیاز داری یک تابع «Kotlin» رو طوری بنویسی که از سمت «Java» مثل یک متد استاتیک دیده بشه. «@JvmStatic» دقیقاً همین کار رو می‌کنه.

مثال واقعی: فرض کن یک «Utility Class» داری که توش متدهای کمکی گذاشتی. برای اینکه توی «Java» بدون نمونه‌سازی صدا زده بشن، از «@JvmStatic» استفاده می‌کنیم.

📦 یک نمونه ساده از «Object» در «Kotlin»:

object StringUtils {
@JvmStatic
fun capitalize(text: String): String {
return text.replaceFirstChar { it.uppercase() }
}
}


🧠 کد بالا باعث می‌شه توی «Java» بتونی StringUtils.capitalize("hello") رو بدون INSTANCE صدا بزنی.

💡 همچنین «@JvmOverloads» برای متدهای پیش‌فرض «Kotlin» مفیده. اگر تابعی پارامترهای پیش‌فرض داشته باشه، این انوتیشن overload‌های لازم رو برای «Java» تولید می‌کنه.

🚀 نکته مهم: برای اینکه «Null Safety» «Kotlin» توی «Java» درست کار کنه، از «@Nullable» و «@NotNull» استفاده کن.

📌 Takeaway: با این ابزارها می‌تونی کتابخونه‌های «Kotlin» رو بدون دردسر در پروژه‌های «Java» استفاده کنی.

#Codeit #Android #Kotlin #Jetpack #JavaInterop #JvmStatic #KotlinTips

🌐 Codeit → https://code-it.ir

━━━━━━━━━━━━━━━
@CodeitMobile
🔥1
🔧 کال کردن جاوا از کاتلین – وقتی کد جاوا داری ولی با کاتلین کار میکنی، هیچ نگرانی نیست! کاتلین کاملاً با جاوا سازگاره و می‌تونی مستقیم از کلاس‌های جاوا توی پروژه استفاده کنی. 😎

⚠️ نکته مهم: توابع جاوا که مقدار nullable برمی‌گردونن، توی کاتلین به صورت «Platform Type» دیده می‌شن. یعنی مشخص نیست nullable هست یا نه. پس حواست باشه و با «!!» یا «?» مدیریتش کن.

🛠️ مثال عملی: فرض کن یه کلاس جاوا داری به اسم «JavaCalculator» که دو متد داره. می‌خوای توی کاتلین ازش استفاده کنی و ورودیش رو با «Null Safety» ترکیب کنی.

// فراخوانی مستقیم متد جاوا از کاتلین
val calculator = JavaCalculator()
val result = calculator.add(5, 10)
println("Result: $result") // Result: 15

// استفاده از SAM Conversion برای Java interface
val runnable = Runnable { println("Hello from Kotlin") }
Thread(runnable).start()


توضیح کد:
- متد «add» مستقیم صدا زده شده و مشکل نداره.
- برای «Runnable» از SAM Conversion استفاده کردیم تا کد خواناتر بشه.
- اگر متد جاوا «@Nullable» داشته باشه، توی کاتلین با «?» می‌گیری.

💡 نکته حرفه‌ای: برای دسترسی به متدهای static جاوا از «@JvmStatic» یا «Companion Object» استفاده کن. همچنین با «@JvmOverloads» می‌تونی overloaded functions رو برای جاوا مهیا کنی.

📌 گرفته عملی:
- همیشه نوع خروجی متدهای جاوا رو چک کن (با «@Nullable» یا «@NotNull»).
- برای callback های جاوا از SAM Conversion استفاده کن.
- از «Kotlin -> Java Interop» برای کد تمیزتر بهره ببر.

#Codeit #Android #Kotlin #Jetpack #JavaInterop #NullSafety #AndroidDev #KotlinTips
🌐 Codeit → https://code-it.ir

━━━━━━━━━━━━━━━
@CodeitMobile
🔥1
🔴 وقتی کد جاوا رو در پروژه «Kotlin» استفاده میکنی، چطور از «Null Safety» مطمئن بشی؟

🔵 جواب: با «Nullability Annotations» در سمت جاوا، و «Type System» قدرتمند «Kotlin» میشه مرز Null رو دقیق مشخص کرد.

🔹 «Java» به صورت پیش‌فرض «Nullable» و «Non‑Null» رو تشخیص نمیده.
🔹 «Kotlin» برای «Interop» با جاوا از «Platform Types» استفاده میکنه که هم خطرناکه هم غیرقابل پیش‌بینی.
🔹 راه حل: استفاده از «JSR 305»، «Android Annotation Support» یا «JetBrains Annotations» مثل @Nullable و @NonNull.

🔸 مثال عملی:
فرض کن یک کلاس جاوا داری که یک اسم رو برمی‌گردونه:

// Java
public class User {
private String name;

public @Nullable String getName() {
return name;
}
}


حالا در سمت «Kotlin» به صورت خودکار نوع String? شناسایی میشه و مجبور به مدیریت «Null» هستی.

// Kotlin
fun printName(user: User) {
val name: String? = user.name
println(name?.uppercase() ?: "نام ندارد")
}


🔹 اگر @NonNull استفاده کنی، «Kotlin» نوع رو String در نظر می‌گیره و نیازی به بررسی «Null» نیست.

// Java
public class User {
private String name = "default";

public @NonNull String getName() {
return name;
}
}


// Kotlin
fun printName(user: User) {
println(user.name.uppercase()) // مستقیم! بدون null check
}


🔸 نکته: در «Kotlin» با استفاده از «Annotation»های «IntelliJ IDEA» یا «Android» (مثل androidx.annotation.Nullable)، می‌تونی حتی توابع جاوا رو هم «Null‑Safe» کنی.

🚀 خروجی نهایی: با افزودن «@Nullable / @NonNull» به متدها و پارامترهای جاوا، کد «Kotlin» هم تمیزتر و هم ایمن‌تر میشه.

🔹 بعد از اضافه کردن این «Annotation»ها، حتماً «Recompile» کن و از «IDE» استفاده کن تا خطاهای احتمالی رو ببینی.

📌 برای پروژه‌های ترکیبی، این یکی از مهم‌ترین تکنیک‌های حفظ «Null Safety» است.

#Codeit #Android #Kotlin #Jetpack #JavaInterop #NullSafety #Annotations #CleanCode
🌐 Codeit → https://code-it.ir

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