برنامه نویسی با اسفندونه
921 subscribers
1.95K photos
62 videos
34 files
633 links
آموزش و تجربیات شخصی در برنامه نویسی موبایل (کاتلین)
لینک گروه:
https://t.me/+bywa9lYlaIBiMzQ8
مدیر
@abbasali72m
Download Telegram
یه نکته تو کار با آرایه ها در #کاتلین:
بجای اینکه بنویسی>
‍‍‍‍if(missions.filter{
it.type == PUZZLE_COMPLETED
}.isNotEmpty())
میتونی از any استفاده کنی:
if(missions.any {
it.type == PUZZLE_COMPLETED
})


تابع any() در کاتلین بررسی می‌کند که حداقل یک عنصر در آرایه شرط داده‌شده هست یا خیر.


#ترفند #kotlin #android
@Esfandune_ir
👍4
در هنگام دیباگ برنامه، اگه کد توی چند ترد در حال انجام باشه. پیدا کردن تردی که مد نظر ماست در حالت عادی سخته. چون هم تعداد ترد ها زیاده ، هم اسمهاشون مشخص نیست چیه.

راهکار چیه؟

@Esfandune_ir #threads #kotlin #ترفند #آموزش
👍4❤1
برنامه نویسی با اسفندونه
احتمالا شما هم تا امروز برای ایجاد یک ترد، از کدی شبیه کد بالا استفاده می کردید و صرفا در CoroutineContext مشخص می کردید که کروتین روی کدوم نخ (Thread) اجرا بشه. (Dispatcher) اما می دونستید می تونید علاوه بر این، برای تردتون یک نام هم انتخاب کنید؟ @Esfandune_ir
با استفاده از
CoroutineName
می تونید بگید ، اسم تردتون چی باشه.
مزایا؟
اشکال‌زدایی (Debugging) راحت‌تر: وقتی برنامه در حال اجراست و کلی کروتین همزمان دارن کار می‌کنن، اگه هر کروتین یه اسم داشته باشه، خیلی راحت‌تر می‌تونید تو لاگ‌ها یا در حین دیباگ کردن ببینید کدوم کروتین داره چیکار می‌کنه. انگار هر کارمند یه برچسب اسم داره!
#kotlin
خوانایی بیشتر کد: وقتی به کدتون نگاه می‌کنید، با دیدن اسم کروتین متوجه می‌شید اون بخش از کد برای چه منظوری نوشته شده.
@Esfandune_ir
مدیریت بهتر: در برنامه‌های بزرگ، داشتن اسم برای کروتین‌ها به شما کمک می‌کنه تا جریان‌های مختلف کاری رو بهتر پیگیری و مدیریت کنید.
🙏5
تو این مقاله خیلی ساده نوشته چطور در کامپوز مولتی پلتفرم، سیستم به اشتراک گذاری عکس، متن و فایل رو برای iOS و Android پیاده کنید:

https://medium.com/@mohaberabi98/sharing-data-and-files-in-compose-multiplatform-602105eaa3e2

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

#composemultiplatform #compose #android #iOS #kotlin
@Esfandune_ir
👍2
در مطالب بعدی خیلی خلاصه وار مواردی که راجع به کاتلین برروی وب صحبت شد ، می نویسم.

#kotlin #wasm #kmp
👏1
حتما براتون پیش اومده که وقتی یه فانکشن با مقدار بازگشتی می نوبسید ولی ازش استفاده نمی کنید ، بهتون warning میده که مقدار برگشتی استفاده نمیشه، این در حالیه که ممکنه بعدا بهش نیاز داشته باشید و نمیخواید return رو خالی بگذارید. در این مواقع باید چیکار کرد؟
#kotlin
@Esfandune_ir
امروز میخوام راجعش باهاتون حرف بزنم
برنامه نویسی با اسفندونه
حتما براتون پیش اومده که وقتی یه فانکشن با مقدار بازگشتی می نوبسید ولی ازش استفاده نمی کنید ، بهتون warning میده که مقدار برگشتی استفاده نمیشه، این در حالیه که ممکنه بعدا بهش نیاز داشته باشید و نمیخواید return رو خالی بگذارید. در این مواقع باید چیکار کرد؟…
راه حل #کاتلین: IgnorableReturnValue🦸‍♂️
هست.
خیلی ساده‌ست: به کامپایلر میگه "داداش، این تابع یه چیزی برمی‌گردونه، ولی اگه برنامه‌نویس ازش استفاده نکرد، گیر نده!"

@Esfandune_ir
مثالش رو تو عکس گذاشتم منتها چرا سرخه ؟
#ترفند
چون این قابلیت از کاتلین نسخه 2.0.20 (بتا) در دسترس خواهد بود.
و فعلا نداریمش🤦😁

#kotlin
برای ایجاد ردیف های واکنشگرا به عرض صفحه کاربر، که به صورت خودکار، آیتم های اضافه را به ردیف بعد منتقل کنند، بهترین کار استفاده از flowRow هست. در این مبحث به صورت کامل با این کامپوننت فوق‌العاده کاربردی آشنا می شیم.


http://esfandune.ir/2025/08/20/flowrow-flowcolumn/

@Esfandune_ir
#learn #android #jepack #compose #kotlin
🔥4
1_20931416391.pdf
44 MB
کتاب جامع آموزش کاتلین ۲.۲.۲۰
انگلیسی
۱۶۰۰ صفحه

@Esfandune_ir #kotlin
❤1🔥1
با
val uriHandler = LocalUriHandler.current
uriHandler.openUri("http://esfandune.ir/")

میتونید در مولتی پلتفرم بدون نیاز به actual expect هر آدرسی رو در مرورگر باز کنید


#ترفند #kotlin #compose #kmp

@Esfandune_ir
❤2
وقتی یک برنامه Compose Desktop می‌نویسی، برای خروجی گرفتن، یه مشکل بزرگ داریم:

روی مک نمی‌تونی فایل .msi (ویندوز) بسازی ❌
روی مک نمی‌تونی فایل .deb (لینوکس) بسازی ❌
روی ویندوز نمی‌تونی فایل .dmg (مک)
بسازی ❌

بهترین راه کار چیه؟
@Esfandune_ir
#compose #kmp #kotlin
❤2
This media is not supported in your browser
VIEW IN TELEGRAM
با Material Adaptive در کامپوز می تونید صفحاتتون رو بر اساس سایز صفحه کاربر طراحی کنید.

شاید بگید خودمون با if اینا میتونیم انجامش بدیم ولی این خیلی راحتتره و اصلا ساخته شده واسه همین

www.youtube.com/watch?v=xPUZENis4gc

@Esfandune_ir
#compose #kotlin #android #kmp
❤1
پروژه خام کامپوز مولتی پلتفرم که
kmm,compose,SQLDelight,Ktor,koin,voyager
درونش برای iOS,Android,Desktop (JVM)
پیاده سازی شده و ‌آماده استفاده هست.

سعی کردم از آخرین نسخه همه کتابخونه ها استفاده کنم که پروژه بروز باشه.

برروی هر سه پلتفرم اتصال به اینترنت و دیتابیس تست شده و بدون مشکل هست.


#learn #kmp #kotlin #compose

https://github.com/abbasalim/ComposeMultiplatformStarterKit
👏7❤1
✨ چرا when بهتر از if–else های تودرتوه؟

1️⃣ خوانایی بالا:
کد تمیزتر و کوتاه‌تره؛ با یه نگاه می‌فهمیم قراره چی بشه. 👀

2️⃣ ایمنی در زمان کامپایل:
وقتی از when با enum (لیست حالت‌های ثابت) استفاده می‌کنیم،
کامپایلر مجبورت می‌کنه تمام حالت‌ها رو پوشش بدی.
یعنی اگه یه روزی حالت جدیدی مثل Hard اضافه کنی و فراموش کنی ضخامت قابش رو مشخص کنی،
برنامه اصلاً کامپایل نمیشه و بهت اخطار میده! ⚠️
اینطوری از کلی باگ آینده جلوگیری میشه.

3️⃣ خلاصه‌نویسی و حرفه‌ای بودن:
نتیجه‌ی when مستقیم داخل متغیر ریخته میشه،
و کد ظاهر حرفه‌ای‌تری پیدا می‌کنه. 😎

✅ در کل، when یکی از ابزارهای قدرتمند Kotlinـه
که کد رو هم زیباتر و هم مطمئن‌تر می‌کنه.

#Kotlin #AndroidDev #ProgrammingTips #CleanCode
#کاتلین #برنامه_نویسی_اندروید #نکات_برنامه_نویسی #کد_تمیز
@Esfandune_ir
❤2🙏2
همزمان با نسخه جدید نوتی سینک، این برنامه به صورت اوپن سورس در گیت هاب منتشر شد:

https://github.com/abbasalim/NotiSync

با نوتی سینک می تونید، نوتیفیکیشن های دستگاه اندرویدی خودتون رو به صوره همزمان برروی دسکتاپ (لینوکس، مک و ویندوز) مشاهده کنید.

https://tools.esfandune.ir/

@Esfandune_ir

#kotlin #kmp #cmp #android #jvm #open_source #notification
🙏4👏1
🆕 سوییفت برای اندروید اومد!

زبان برنامه‌نویسی Swift بالاخره به دنیای اندروید رسید! گروه توسعه سویفت برای اندروید اعلام کرده که نسخه پیش‌نمایش SDK Swift برای اندروید منتشر شده و از همین حالا می‌تونید اپ‌های اندرویدی رو با Swift بنویسید.

📱 چی داریم؟
امکان نصب روی ویندوز، لینوکس و macOS
راهنمای شروع و مثال‌های آماده
پشتیبانی از بیش از ۲۵٪ پکیج‌های Swift روی اندروید

ارتباط دوطرفه با Java از طریق پروژه swift-java

🔥 فرصت خوبیه برای توسعه‌دهنده‌هایی که دنبال کدنویسی چندسکویی هستن.


به نظرم این امکان رو در جواب به کاتلین مولتی پلتفرم دادن، ترسیدن D:

@Esfandune_ir #swift #kotlin
👍1
میدونید فرقشون چیه؟

مورد اولی صبر میکنه تا کار ترد تموم بشه بعد خط بعدش اجرا میشه ولی مورد دومی ، خط های بعدی کد اجرا میشه و منتظر نمی مونه تا کار ترد تموم بشه.

خلاصه مقاله زیر بود در دو خط D:

https://proandroiddev.com/the-real-difference-between-withcontext-dispatchers-io-and-launch-dispatchers-io-b70ec00a33f2

#kotlin #compose #android
@Esfandune_ir
❤6😁1
امروز می‌خوام یه تقلب‌نامه (Cheat Sheet) از Coroutine ها در کاتلین رو باهاتون به اشتراک بذارم که می تونید یه جا ذخیره نگهش دارید هر موقع شک کردید کدوم مورد لازمتون میشه یه نگاه بهش بندازید. Coroutine‌ها یکی از اون مباحث جذاب و در عین حال چالش‌برانگیز کاتلین هستن که یادگیریشون می‌تونه سطح برنامه‌نویسی شما رو چند پله بالاتر ببره.


لینک مطلب آموزشی


➖➖➖➖➖➖➖➖➖➖➖➖
#kotlin #coroutin #android #learn
@Esfandune_ir
🔥3👏1
برنامه نویسی با اسفندونه
خلاصه‌ی تغییرات کلیدی در Kotlin 2.3 🔹 زبانی: * چند قابلیت که قبلاً آزمایشی بودند حالا پایدار یا به‌صورت پیش‌فرض فعال شده‌اند (مثل aliasهای نوع تو در تو و بررسی کامل شاخه‌های when). * کامپایلر اکنون اگر نتیجه‌ی یک تابع برگشتی استفاده نشود (Unused return value…
🔹🖥 پلتفرم‌های مختلف

🔸 Kotlin/Native (برای iOS و Native)

* ارتباط بهتر با Swift (مثل native enums و تابع‌های variadic).
* پشتیبانی آزمایشی از وارد کردن کتابخانه‌های C/Objective-C.
* زمان‌ بیلد سریع‌تر برای نسخه‌های release در پروژه‌های چندپلتفرمی.

🔸 Kotlin/Wasm (برای وب و WebAssembly)
@Esfandune_ir
* نام‌های کامل کلاس‌ها (Fully qualified names) در runtime فعال شده‌اند.
* ذخیره‌سازی بهینه‌تر رشته‌ها برای کاراکترهای Latin-1 در Wasm.
* نسخه جدید شیوه‌ی مدیریت Exception برای wasmWasi فعال شده.

🔸 Kotlin/JS

* امکان EXPORT مستقیم توابع suspend به JavaScript (آزمایشی).
* استفاده از BigInt64Array برای نمایش LongArray در JS.
* دسترسی یکنواخت به companion object در سیستم‌های ماژول مختلف.
* پشتیبانی مستقیم از default exportsدر JavaScript.

🛠 ابزارها و سازگاری

* سازگاری با Gradle 9.0 و API جدید برای ثبت سورس‌های auto-generated.
* Compose Compiler حالا Stack Trace برای اپ‌های اندروید در حالت minified می‌سازد.
* کتابخانه استاندارد، APIهای زمان و UUID را تقویت کرده (مثلاً تولید UUIDهای v4 و v7). ([Kotlin][1])

📌 جمع‌بندی سریع

✔️ نسخه 2.3 تمرکز زیادی بر پایداری ویژگی‌ها، تجربه بهتر توسعه و پشتیبانی از پلتفرم‌های مختلف داشته.
✔️ امکانات مفید جدید مانند هشدار برای مقادیر بازگشتی بلااستفاده و قابلیت‌های پیشرفته در JS/Native اضافه شده‌اند.
✔️ پشتیبانی از آخرین Java و بهینه‌سازی‌های سرعت ساخت (Build) برای پروژه‌های مولتی‌پلتفرم در نظر گرفته شده‌اند.
@Esfandune_ir #kotlin
کاتلین یه زبان null safety هست. و این باعث میشه کلی خطاها قبل رخ دادن هندل بشه بعد استفاده از !! که به معنی چک نکردن نال هست، باعث میشه علنا یه ویژگی مهم زبان را از دست بدید و مجدد خطاهای نال بگیرید.
اصلا از !! استفاده نکنید و حتما نال رو هندل کنید.


#kotlin
@Esfandune_ir
❤3