برنامه نویسی اندروید با زبان کاتلین

@kotlinmag


آموزش برنامه نویسی اندروید
با زبان قدرتمند کاتلین
توسط علیرضا احمدی

مشاوره رایگان : @AlirezaAhmadi_info

گروه پرسش و پاسخ : @Lrn_Group

وبسایت : www.AlirezaAhmadi.info

برنامه نویسی اندروید با زبان کاتلین

23 Oct, 04:38


#معرفی_فیلم

🚨🚨 دختری با خالکوبی اژدها (The Girl with the Dragon Tattoo)

📌معرفی فیلم:

• ژانر: جنایی، رازآلود، هیجان‌انگیز
• محصول: آمریکا، سوئد
• سال انتشار: 2011
• کارگردان: David Fincher
• امتیاز: 7.8 در IMDb

📌خلاصه فیلم:

❗️این فیلم درباره‌ی یک روزنامه‌نگار تحقیقی است که به همراه یک هکر باهوش و مرموز تلاش می‌کند پرونده‌ی قتل دختری را که چهل سال پیش در خانواده‌ای ثروتمند ناپدید شده، حل کند. این دو نفر با حقایق تاریک و خطرناک روبرو می‌شوند که رازهای گذشته را برملا می‌کند.

موفق باشید 🚀🚀

@KotlinMag

برنامه نویسی اندروید با زبان کاتلین

21 Oct, 18:52


#آموزش_کاتلین

🚨🚨 تفاوت بین Parameter, Property و Field در کاتلین


❗️در برنامه‌نویسی اندروید با کاتلین، سه مفهوم Parameter، Property و Field نقش کلیدی در مدیریت داده‌ها و رفتارهای کلاس دارند. درک تفاوت آن‌ها به شما کمک می‌کند تا کد تمیزتر و موثرتری بنویسید. در ادامه هر کدام از این مفاهیم را با مثال‌های جداگانه بررسی می‌کنیم:

1. پارامتر (Parameter):
پارامترها متغیرهایی هستند که به متدها یا سازنده‌ها ارسال می‌شوند تا عملیات بر اساس داده‌های ورودی انجام گیرد. هر بار که متد یا سازنده فراخوانی می‌شود، پارامترها مقادیر جدیدی دریافت می‌کنند.

• مثال:

fun greetUser(name: String) {
println("Hello, $name!")
}


در اینجا، name یک پارامتر است که مقدار آن هنگام فراخوانی تابع greetUser مشخص می‌شود.

2. پروپرتی‌(Property):
پروپرتی‌ها ویژگی‌های یک کلاس هستند که به طور مستقیم با داده‌های مربوط به کلاس در ارتباطند. می‌توانید از val برای پروپرتی‌های فقط خواندنی و از var برای پروپرتی‌های قابل تغییر استفاده کنید.

• مثال:

class Car {
var speed: Int = 0
}


در اینجا، speed یک پروپرتی است که نشان‌دهنده سرعت ماشین بوده و می‌تواند تغییر کند.

3. فیلد(Field):
فیلدها متغیرهای خصوصی درون یک کلاس هستند که برای ذخیره مقدار یک پروپرتی استفاده می‌شوند. این فیلدها به طور مستقیم از بیرون کلاس قابل دسترسی نیستند و تنها از طریق متدهای getter و setter قابل مدیریت هستند. کامپایلر کاتلین به صورت خودکار یک backing field برای هر پروپرتی ایجاد می‌کند که به برنامه‌نویس اجازه می‌دهد تا به مقدار فعلی پروپرتی دسترسی پیدا کند.

• مثال:

var temperature: Int = 0
set(value) {
if (value >= -50 && value <= 50) {
field = value // استفاده از فیلد برای ذخیره مقدار جدید
}
}


در اینجا، temperature یک پروپرتی است و مقدار آن فقط در صورتی تغییر می‌کند که بین محدوده مشخصی باشد. مقدار در فیلد خصوصی ذخیره می‌شود.

❗️نتیجه‌گیری:
پارامترها ورودی متدها یا سازنده‌ها هستند، پروپرتی‌ها ویژگی‌های کلاس را توصیف می‌کنند، و فیلدها برای ذخیره‌سازی مقادیر پروپرتی‌ها به کار می‌روند، بدون اینکه به صورت مستقیم قابل دسترسی باشند. این تفاوت‌ها به شما کمک می‌کنند تا کدی قابل اعتمادتر و ساختارمندتر بنویسید.

موفق باشید🚀🚀

@KotlinMag

برنامه نویسی اندروید با زبان کاتلین

19 Oct, 17:51


#آموزش_کاتلین

🚨🚨 شناخت getter و setter در Kotlin


❗️در زبان برنامه‌نویسی کاتلین، متدهای get و set بخشی از ویژگی‌ها (Properties) هستند که برای دسترسی به مقادیر متغیرها و به‌روزرسانی آن‌ها استفاده می‌شوند. این متدها به طور پیش‌فرض برای هر ویژگی قابل دسترسی تعریف می‌شوند، اما می‌توانیم آن‌ها را به دلخواه خود سفارشی کنیم.

❗️ویژگی‌ها در کاتلین به طور خودکار شامل یک getter (برای خواندن مقدار) و یک setter (برای نوشتن مقدار) هستند. اگر تنها نیاز به خواندن مقدار داشته باشید (مانند val)، فقط متد getter تعریف می‌شود و setter وجود نخواهد داشت.

• مثال:

class Person {
var age: Int = 18
get() = field
set(value) {
if (value > 0) {
field = value
}
}
}


در این مثال، ویژگی age یک مقدار پیش‌فرض دارد و متدهای get و set سفارشی شده‌اند. field در اینجا به مقدار واقعی ذخیره‌شده اشاره دارد.

❗️نکته: شما می‌توانید منطق خاصی درون get و set اضافه کنید تا داده‌ها به‌صورت دقیق‌تر مدیریت شوند، مثل اعتبارسنجی داده‌ها هنگام تنظیم مقدار جدید.

موفق باشید🚀🚀

@KotlinMag

برنامه نویسی اندروید با زبان کاتلین

17 Oct, 16:50


#آموزش_کاتلین

🚨🚨 استفاده از init در کاتلین: شروعی هوشمندانه


❗️در برنامه‌نویسی به زبان کاتلین، بلاک init یکی از بخش‌های کلیدی کلاس‌ها است. این بلاک بلافاصله پس از ایجاد یک شیء از کلاس فراخوانی می‌شود و به شما امکان می‌دهد که مقادیر اولیه‌ی متغیرهای کلاس را تنظیم کنید یا عملیات خاصی را هنگام ساخت شیء انجام دهید.

❗️از ویژگی‌های مهم این بلاک این است که می‌تواند چندین بار در یک کلاس وجود داشته باشد و به ترتیب نوشته شدن اجرا می‌شود.

• مثال:

class User(name: String) {
private val greeting: String

init {
greeting = "Hello, $name"
println(greeting)
}
}


در این مثال، بلاک init باعث می‌شود هر زمان که یک شیء از کلاس User ساخته شود، پیام خوش‌آمدگویی برای کاربر چاپ شود.

موفق باشید🚀🚀

@KotlinMag

برنامه نویسی اندروید با زبان کاتلین

15 Oct, 22:56


#بروزرسانی

فصل آموزش شی گرایی به دوره طلایی کاتلین اضافه شد. البته این پایان کار نیست.

این دوره هنوز یکی دو فصل فوق تخصصی دیگه هم داره و تا حدود 300 قسمت میره. الان 228 قسمت هست.

البته که به تعداد فصل و قسمت نیست و سعی میکنم در هر ویدیوی جدید واقعا نکته و مبحث جدیدی رو بهتون آموزش بدم یا مباحث قبلی رو براتون باز تر کنم که عمیق بشید در کاتلین.

هر چقدر در کاتلین عمیق تر بشیم، در جت پک کامپوز و کیتور عملگرا تر و متخصص تر خواهیم شد.

@KotlinMag

برنامه نویسی اندروید با زبان کاتلین

15 Oct, 15:49


#آموزش_کاتلین

🚨🚨 استفاده از typealias برای سادگی کد


❗️در زبان کاتلین، typealias به شما این امکان را می‌دهد که نام‌های جدید و ساده‌تری برای انواع داده‌های پیچیده تعیین کنید. این ویژگی به خصوص زمانی که با کدهای طولانی و تو در تو سروکار داریم، مفید است. با استفاده از typealias می‌توانید کدهای خود را خواناتر و قابل‌فهم‌تر کنید.

• مثال:

فرض کنید در پروژه‌ای که دارید، با یک تابع مواجه هستید که نوع بازگشتی پیچیده‌ای دارد، مثل:

typealias UserDataCallback = (List<Pair<String, Int>>) -> Unit


حالا به جای نوشتن نوع کامل در تمام بخش‌های کد، از نام ساده‌ی UserDataCallback استفاده می‌کنید. اینکار باعث افزایش خوانایی و کاهش خطاهای ناشی از تایپ اشتباه خواهد شد.

موفق باشید🚀🚀

@KotlinMag

برنامه نویسی اندروید با زبان کاتلین

13 Oct, 14:48


#آموزش_کاتلین

🚨🚨 آشنایی با دیتا کلاس Pair در کاتلین


❗️دیتا کلاس Pair در کاتلین یکی از ساختارهای داده‌ای پرکاربرد است که امکان نگهداری و مدیریت دو مقدار را در کنار هم فراهم می‌کند. این مقادیر می‌توانند از انواع مختلف باشند. کاربرد اصلی Pair در مواقعی است که نیاز دارید دو مقدار مرتبط را به صورت یکجا مدیریت کنید، بدون اینکه نیاز به تعریف کلاس یا ساختار پیچیده‌ای باشد.

• مثال:

fun userInfo(name: String, age: Int): Pair<String, Int> {
return Pair(name, age)
}

val result = userInfo("Charlie", 28)
Log.i("TESTING", "Name: ${result.first} -- Age: ${result.second}")


در این مثال، تابع userInfo دو مقدار (نام و سن) را با استفاده از دیتا کلاس Pair برمی‌گرداند. با استفاده از first و second به این مقادیر دسترسی پیدا می‌کنید. این تکنیک به شما کمک می‌کند چندین مقدار را به طور همزمان و به شکلی ساده از یک تابع برگردانید.

موفق باشید🚀🚀

@KotlinMag

برنامه نویسی اندروید با زبان کاتلین

13 Oct, 01:28


دوره جدید

به جامع ترین دوره آموزش زبان برنامه نویسی کاتلین سلام کنید.

البته ویدیو های دوره همچنان در حال آپلود هستند و لطفا سرفصل های فعلی رو ملاک قضاوت قرار ندین.

در کاتلین قرار نیست مفاهیم اسم شون عوض بشه. یعنی وقتی به سرفصل ها نگاه میکنی نوشته شده مثلا آموزش آرایه ها. نوشته شده آموزش توابع سطح بالا.

شاید فکر کنی خوب اینا که قبلا هم گفته شده. اما نه. قبلا نحوه ذخیره سازی یک تابع معمولی در حافظه رم گفته نشده. قبلا گفته نشده که توابع Lambda در واقع نوعی تابع بدون نام هستند.

قبلا شیوه ذخیره شدن توابع بدون نام در رم و تفاوتش با توابع معمولی گفته نشده. قبلا گیج میشدی که چه موقع از array of استفاده کنی و چه موقع از list of و اینکه اصلا چه فرقی دارن؟

قبلا بین hash map و mutable map میموندی که تفاوت شون چیه؟ قبلا درک نمیکردی که هر عضو از enum class ها خودش یک enum هست که داره آبجکت میسازه.

قبلا کلمه کلیدی های tailrec و inline و no inline و غیره رو نمیدونستی. پیش از این دقیق مشخص نبود که default constructor چیه و بقیه سازنده ها چه فرقی باهاش دارن و data class دقیقا چه تغییری روی کلاس به وجود میاره و....

پس این دوره فرق داره عزیز دل. الکی طلایی نشده.

لینک دریافت :
https://dnjy.ir/VjZL

موفق باشید 💗

@KotlinMag

برنامه نویسی اندروید با زبان کاتلین

12 Oct, 00:05


همه باید ببینن؟

من بلدم دیگه، میشه نبینم؟

@KotlinMag

برنامه نویسی اندروید با زبان کاتلین

12 Oct, 00:03


دوره طلایی کاتلین؟

دوره جدید؟

چی چی هه؟

چرا؟

@KotlinMag

برنامه نویسی اندروید با زبان کاتلین

11 Oct, 12:55


#آپدیت

دوره رایگان کاتلین به نسخه 2024 اینتلیجی و کاتلین ورژن 2 بروزرسانی شد.

لینک دوره :
https://dnjy.ir/UpHk

حتما زیر دوره نظرتون رو کامنت کنید.

دوره طلایی کاتلین به زودی منتشر و اطلاع رسانی میشه.

موفق باشید 💗💗

@KotlinMag

برنامه نویسی اندروید با زبان کاتلین

10 Oct, 13:47


#آموزش_کاتلین

🚨🚨 تابع بازگشتی بهینه با tailrec در کاتلین


❗️در توابع بازگشتی، یکی از مشکلات رایج، پر شدن استک (StackOverflowError) به دلیل عمق زیاد بازگشت‌هاست. اینجا کاتلین با کلمه کلیدی tailrec وارد عمل می‌شود تا این مشکل را حل کند!

❗️اگر یک تابع بازگشتی، به شکلی تعریف شده باشد که آخرین عملی که انجام می‌دهد، فراخوانی خود تابع باشد، می‌توان از tailrec استفاده کرد تا کامپایلر کد را بهینه‌سازی کند و به جای ایجاد چندین لایه استک، از یک حلقه ساده استفاده کند.

• مثال:

tailrec fun factorial(i: Int, result: Int = 1): Int {
return if (i == 1) result else factorial(i - 1, result * i)
}


در اینجا تابع بازگشتی برای محاسبه فاکتوریل از tailrec استفاده می‌کند. این کد بهینه اجرا می‌شود و هیچ خبری از پر شدن حافظه استک نخواهد بود.

موفق باشید🚀🚀

@KotlinMag

برنامه نویسی اندروید با زبان کاتلین

08 Oct, 12:46


#آموزش_کاتلین

🚨🚨 کلمه کلیدی vararg در کاتلین


❗️در برنامه‌نویسی کاتلین، vararg یک کلمه کلیدی است که به شما این امکان را می‌دهد تا متدهایی تعریف کنید که تعداد نامحدودی از آرگومان‌ها را به عنوان ورودی بپذیرند. این ویژگی به خصوص زمانی مفید است که شما نمی‌دانید تعداد آرگومان‌هایی که قرار است به متد ارسال کنید چقدر است.

❗️برای مثال، دو تابع زیر را در نظر بگیرید:

private fun sum(vararg numbers: Int): Int {
return numbers.sum()
}

private fun sum2(numbers: Array<Int>): Int {
return numbers.sum()
}


تابع sum با استفاده از vararg تعریف شده است و می‌تواند هر تعداد عدد صحیح را به سادگی به عنوان آرگومان دریافت کند:

val total = sum(1, 2, 3, 4) // total = 10


در حالی که تابع sum2 فقط می‌تواند یک آرایه از اعداد صحیح را به عنوان ورودی بپذیرد:

val totalFromArray = sum2(arrayOf(1, 2, 3, 4)) // totalFromArray = 10


❗️به کمک vararg، شما نیازی به ایجاد آرایه قبل از ارسال آرگومان‌ها ندارید و این باعث ساده‌تر شدن کد شما می‌شود. با vararg، می‌توانید متدهای انعطاف‌پذیری بسازید که در هر شرایطی قابل استفاده هستند و کد شما را تمیزتر و خواناتر می‌کند.

موفق باشید🚀🚀

@KotlinMag

برنامه نویسی اندروید با زبان کاتلین

06 Oct, 11:45


#آموزش_کاتلین

🚨🚨 آشنایی با Set در کاتلین


❗️در زبان برنامه‌نویسی کاتلین، Set یک ساختار داده‌ای است که مانند لیست عمل می‌کند، اما با این تفاوت که هیچ عنصر تکراری در آن وجود ندارد. یعنی هر مقدار فقط یک بار ذخیره می‌شود. این ویژگی برای مواقعی که به مجموعه‌ای از داده‌های یکتا نیاز داریم بسیار مفید است؛ مثل ذخیره‌سازی شناسه‌های یکتا یا مجموعه‌ای از آیتم‌ها.

❗️کاتلین به شما دو نوع Set ارائه می‌دهد:

⨀ نوع setOf: این نوع یک مجموعه غیرقابل تغییر (Immutable) است. شما نمی‌توانید عناصر آن را تغییر دهید یا اضافه و حذف کنید.

⨀ نوع mutableSetOf: این نوع یک مجموعه قابل تغییر (Mutable) است و می‌توانید به آن عناصر جدید اضافه یا از آن حذف کنید.

• مثال:

val fruits = setOf("Apple", "Banana", "Orange", "Apple") // فقط یک "Apple" در خروجی
Log.i("TESTING",fruits.toString()) // خروجی: [Apple, Banana, Orange]

val mutableFruits = mutableSetOf("Apple", "Banana")
mutableFruits.add("Orange")
Log.i("TESTING",mutableFruits.toString()) // خروجی: [Apple, Banana, Orange]


در مثال بالا، از setOf استفاده شده که تکرار آیتم‌ها را حذف می‌کند و یک Set یکتا از میوه‌ها می‌سازد. همچنین mutableSetOf اجازه اضافه کردن آیتم جدید را می‌دهد.

موفق باشید🚀🚀

@KotlinMag

برنامه نویسی اندروید با زبان کاتلین

04 Oct, 10:44


#آموزش_کاتلین

🚨🚨 معرفی توابع کاربردی موجود در mutableListOf


❗️در زبان برنامه‌نویسی Kotlin، یکی از کلیدهای مدیریت لیست‌های قابل تغییر استفاده از mutableListOf است. این نوع لیست به شما اجازه می‌دهد تا به‌راحتی آیتم‌ها را اضافه، حذف و تغییر دهید. در ادامه چند تابع کاربردی و کلیدی مرتبط با mutableListOf رو بررسی می‌کنیم:

لیست اصلی:

val mutableList: MutableList<Int> = mutableListOf(1, 2, 3, 4)


1️⃣ تابع add(element: E): با استفاده از این تابع، یک آیتم جدید به انتهای لیست اضافه می‌شود.

mutableList.add(5) // لیست به شکل [1, 2, 3, 4, 5] در می‌آید.


2️⃣ تابع addAll(elements: Collection<E>): این تابع برای اضافه کردن یک مجموعه از آیتم‌ها به لیست کاربرد دارد.

mutableList.addAll(listOf(6, 7, 8, 9)) // لیست به شکل [1, 2, 3, 4, 5, 6, 7, 8, 9]


3️⃣ تابع addAll(index: Int, elements: Collection<E>): این تابع مجموعه‌ای از آیتم‌ها رو به موقعیت مشخصی از لیست اضافه می‌کند.

mutableList.addAll(0, listOf(10, 11, 12)) // لیست به شکل [10, 11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9]


4️⃣ تابع remove(element: E): برای حذف اولین موردی از لیست که با آیتم ورودی مطابقت دارد.

mutableList.remove(11) // اولین مورد 11 حذف می‌شود.


5️⃣ تابع removeAt(index: Int): برای حذف آیتمی از یک موقعیت مشخص استفاده می‌شود.

mutableList.removeAt(1) // آیتم موجود در اندیس 1 حذف می‌شود.


6️⃣ تابع removeIf(predicate: (E) -> Boolean): با این تابع، می‌توان آیتم‌هایی که شرط خاصی را برآورده می‌کنند، حذف کرد.

mutableList.removeIf { it > 2 } // تمام آیتم‌های بزرگتر از 2 حذف می‌شوند.


7️⃣ تابع removeAll(elements: Collection<E>): این تابع همه آیتم‌هایی که در مجموعه داده شده هستند را حذف می‌کند.

mutableList.removeAll(listOf(1, 2, 3)) // تمام آیتم‌های 1، 2 و 3 حذف می‌شوند.


8️⃣ تابع removeFirst(): اولین آیتم از لیست را حذف می‌کند.

mutableList.removeFirst() // اولین آیتم حذف می‌شود.


9️⃣ تابع removeLast(): آخرین آیتم را حذف می‌کند.

mutableList.removeLast() // آخرین آیتم حذف می‌شود.


🔟 تابع forEach(action: (E) -> Unit): برای پیمایش و اجرای یک دستور روی هر آیتم از لیست استفاده می‌شود.

mutableList.forEach {
Log.i("TESTING", it.toString())
}


❗️این توابع به شما کمک می‌کنند که به‌سادگی لیست‌های قابل تغییر خود را مدیریت و کنترل کنید. استفاده از mutableListOf به شما انعطاف‌پذیری زیادی برای کار با داده‌ها در اپلیکیشن‌های اندرویدی می‌دهد.

موفق باشید🚀🚀

@KotlinMag

برنامه نویسی اندروید با زبان کاتلین

02 Oct, 09:43


#آموزش_کاتلین

🚨🚨 تفاوت mutableListOf و listOf در کاتلین


❗️در کاتلین، برای تعریف لیست‌ها می‌توان از دو نوع مختلف استفاده کرد: listOf و mutableListOf. هر دو برای نگهداری مجموعه‌ای از آیتم‌ها به کار می‌روند، اما تفاوت‌های مهمی دارند که در انتخاب آنها باید به آنها دقت کنید.

⨀ نوع listOf: لیستی غیرقابل تغییر ایجاد می‌کند. یعنی بعد از ساختن لیست نمی‌توانید عناصر آن را اضافه، حذف یا تغییر دهید. این نوع لیست بیشتر زمانی کاربرد دارد که نیاز دارید داده‌ها ثابت بمانند.

⨀ نوع mutableListOf: این نوع لیست قابل تغییر است. یعنی می‌توانید بعد از ساختن لیست، عناصر را اضافه، حذف یا تغییر دهید. این نوع لیست در مواقعی که نیاز به مدیریت داده‌های پویا دارید، بسیار مفید است.

• مثال:

val immutableList = listOf("A", "B", "C") // نمی‌توانید عناصر آن را تغییر دهید

val mutableList = mutableListOf("A", "B", "C") // می‌توانید عناصر اضافه، حذف یا ویرایش کنید
mutableList.add("D") // اضافه کردن عنصر جدید



موفق باشید🚀🚀

@KotlinMag

برنامه نویسی اندروید با زبان کاتلین

01 Oct, 09:03


سلام و احترام.

برخی از کتب دانشگاهی در زمینه های مختلف واقعا کاربردی هستند.

مثلا ساختمان داده ها و سیستم عامل برای برنامه نویسی موبایل و وب و بازی سازی و دسکتاپ عالی هستن.

یا الگوریتم های پیچیده دانشگاهی برای ماشین لرنینگ و حتی ریاضیات دانشگاهی برای هوش مصنوعی.

اما به شرط این که کسی واقعا اونا رو بهتون یاد بده. یعنی چی؟

یعنی مثلا اندروید میدونی که خوبه. خوب بحثی نیست. اما به شرط اینکه منه مدرس دلسوزانه یاد بدم وگرنه که هیچی.

نکته اینجاست که اکثر دروس دانشگاهی رو میتونید خارج از دانشگاه هم خود آموز و با دوره های آموزشی یاد بگیرید.

البته این بستگی به علاقه و هدف خودتون داره.

در نتیجه من از دانشگاهی که خودم میرفتم ناراضی ام و خارج شدم و دیپلم دارم.

اما کسی رو دعوت به دانشگاه رفتن یا نرفتن نمیکنم. چیزی که مشخصه اینه که شما در سن ۲۲ سالگی ( در حالت عادی ) دانشگاه رو تموم میکنید. در صورتی که اگر الان ۱۶ سال داشته باشید، میتونید تا ۱۸ سالگی متخصص یک حوزه بشید.

در همین کانال کسی رو داریم که ۱۴ سالشه و پایتون، php و کاتلین رو بلده و در مسابقه برنامه نویسی اندروید هم مقام داره.

پس ایشون اگر میخواست درس بخونه و منتظر دانشگاه باشه باید تا ۲۲ سالگی منتظر میموند.

در هر صورت هر کس صلاح خویش داند. هر کاری که براتون بهتره رو بکنید و سعی کنید از کسانی مشاوره بگیرید که در زمینه ای که بهتون مشاوره میدن، موفق باشن.

یعنی خودشون موفقیتی رو چشیده باشن که صلاحیت مشاوره برای آینده شما رو به دست بیارن.

موفق باشید ❤️

@KotlinMag

برنامه نویسی اندروید با زبان کاتلین

30 Sep, 19:29


#آموزش_کاتلین #کد_ملی

کد تشخیص کد ملی در کاتلین :

fun validationNationalCode(code: String): Boolean {

//check length
if (code.length != 10) return false

var nationalCode = code.toLong()
val arrayNationalCode = ByteArray(10)

//extract digits from number
for (i in 0..9) {
arrayNationalCode[i] = (nationalCode % 10).toByte()
nationalCode /= 10
}

//Checking the control digit
var sum = 0
for (i in 9 downTo 1) sum += arrayNationalCode[i] * (i + 1)
val temp = sum % 11
return if (temp < 2) arrayNationalCode[0].toInt() == temp
else arrayNationalCode[0].toInt() == 11 - temp

}


این تابع یک کد ملی را در ورودی میگیرد و مشخص میکند که کدملی معتبر است یا خیر.

موفق باشید

@KotlinMag

برنامه نویسی اندروید با زبان کاتلین

30 Sep, 08:42


#آموزش_کاتلین

🚨🚨 آشنایی با Comparable در کاتلین


❗️یکی از قابلیت‌های کاربردی در زبان کاتلین برای مرتب‌سازی داده‌ها استفاده از اینترفیس Comparable است. این اینترفیس به شما اجازه می‌دهد تا کلاس‌های خود را به‌گونه‌ای تعریف کنید که قابلیت مقایسه با یکدیگر را داشته باشند.

❗️متد اصلی این اینترفیس compareTo است که باید در کلاس شما پیاده‌سازی شود. این متد دو شیء از یک نوع را با یکدیگر مقایسه می‌کند و سه حالت برمی‌گرداند:

⨀ عدد مثبت: اگر شیء جاری بزرگتر باشد.
⨀ عدد منفی: اگر شیء جاری کوچکتر باشد.
⨀ صفر: اگر شیء جاری و شیء مقایسه شونده برابر باشند.

• مثال:

data class Person(val name: String, val age: Int): Comparable<Person> {
override fun compareTo(other: Person): Int {
return this.age - other.age
}
}

fun main() {
val people = listOf(
Person("Alice", 24),
Person("Bob", 19),
Person("Charlie", 28)
)

Log.i("TESTING",people.sorted().toString()) // خروجی: [Person(name=Bob, age=19), Person(name=Alice, age=24), Person(name=Charlie, age=28)]
}


در این مثال، دیتا کلاس Person با استفاده از Comparable پیاده‌سازی شده و افراد بر اساس سن مرتب می‌شوند.


موفق باشید🚀🚀

@KotlinMag

برنامه نویسی اندروید با زبان کاتلین

28 Sep, 07:41


#آموزش_کاتلین

🚨🚨 مدیریت بهتر حافظه با String Constant Pool در کاتلین


❗️در زبان‌های برنامه‌نویسی مثل جاوا و کاتلین، رشته‌ها (Strings) بخش زیادی از حافظه را به خود اختصاص می‌دهند. برای بهبود کارایی و کاهش مصرف حافظه، از مفهومی به نام "String Constant Pool" استفاده می‌شود.

❗️این مکانیزم به این شکل عمل می‌کند که هر بار که یک رشته جدید ساخته می‌شود، ابتدا بررسی می‌کند که آیا رشته‌ای با همان مقدار قبلاً در حافظه وجود دارد یا نه. اگر وجود داشته باشد، به جای ایجاد یک شیء جدید، به همان رشته اشاره می‌کند.

این یعنی به جای ساخت چندین نمونه مشابه از یک رشته، فقط یک نمونه از آن در حافظه نگهداری می‌شود و تمام متغیرها به همان اشاره می‌کنند. این ویژگی زمانی مفید است که شما رشته‌های زیادی با مقادیر مشابه دارید. استفاده از این قابلیت می‌تواند به بهینه‌سازی حافظه و کارایی برنامه‌های اندرویدی کمک کند.

• مثال:

val string1 = "Hello"
val string2 = "Hello"
Log.i("TESTING","${string1 === string2}") // true


⨀ در این مثال، از سه‌تا مساوی (===) برای بررسی این که آیا string1 و string2 به همان شیء در حافظه اشاره می‌کنند استفاده شده است. این به معنای مقایسه مرجعی است، در حالی که اگر از دو‌تا مساوی (==) استفاده کنیم، مقایسه مقداری انجام می‌شود.


موفق باشید🚀🚀

@KotlinMag