امـیـــــرحســـــین آریا
امـیـــــرحســـــین آریا
خواندن ۴ دقیقه·۴ سال پیش

بوت کمپ Kotlin برای برنامه نویسان اندروید درس پنج قسمت یک: درک مجموعه‌ها


۳.درک مجموعه‌ها (collections)

در این تکلیف شما درباره مجموعه ها بیشتر می آموزید،که لیست‌ها، و یک نوع جدید از مجموعه به‌نام نگاشت مخلوط (hash maps) را شامل می‌شود.

گام ۱: درباره لیست ها بیشتر یاد بگیرید

۱. لیست ها و لیست های قابل تغییر پیش از این معرفی شدند. آن‌ها ساختار‌داده های بسیار کاربردی هستند، به این دلیل کاتلین تعدادی تابع توکار برای لیست ها ارائه می کند. فهرست جزئی توابع لیست را بررسی کنید. شما می توانید فهرست کامل مستندات برای لیست و لیست های قابل تغییر را در مستندات کاتلین پیدا کنید.

add(element: E)

یک مورد را به لیست قابل تغییر اضافه می‌کند


remove(element: E)

یک مورد را از لیست قابل تغییر حذف می‌کند


reversed()

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


contains(element: E)

اگر لیست شامل مورد باشد یک true برمی‌گرداند


subList(fromIndex: Int, toIndex: Int)

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


۲. همچنان با هسته ارتباطی REPL کار می‌کنید، یک لیست از اعداد بسازید و متد ()sum را روی آن صدا بزنید. این تمامی عناصر را با هم جمع می کند.

val list = listOf(1, 5, 3, 4) println(list.sum())


⇒ 13


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

val list2 = listOf(&quota&quot, &quotbbb&quot, &quotcc&quot)
println(list2.sum())


⇒ error: none of the following functions can be called with the arguments supplied:

۴. اگر عنصر چیزی باشد که list نتواند به طور مستقیم جمع کند، مانند یک رشته، شما می توانید با استفاده از ()sumby. و یک تابع لامبدا مشخص کنید که چگونه آن را جمع کند، برای مثال برای جمع کردن طول رشته‌ها. نام پیش‌فرض یک آرگومان لامبدا it است و اینجا وقتی که لیست را می پیماییم it به هر عنصر از لیست اشاره دارد.

val list2 = listOf(&quota&quot, &quotbbb&quot, &quotcc&quot)
println(list2.sumBy { it.length })


⇒ 6

۵. کارهای بیشتری هست که می توانید با لیست انجام دهید. تنها راه برای دیدن عملکردهای قابل دسترس این است که یک لیست داخل InteliiJ IDEA بسازید، یک نقطه اضافه کنید و بعد به لیست کامل کردن خودکار در راهنمای ابزار نگاه کنید. این برای هر شی‌ای کار می کند. این را با list امتحان کنید.

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


برای دیدن عملکرد برای یک کلاس، یک شی داخل IntelliJ IDEA بسازید، یک نقطه پس از نام آن اضافه کنید، و بعد به فهرست کامل کننده خودکار درون راهنمای ابزار نگاه کنید. این برای همه شی‌ها کار می کند.

۶. متد ()listIterator را از فهرست انتخاب کنید، و بعد با استفاده از عبارت for همه عناصر که با فاصله از هم جدا شدند را چاپ کنید.

val list2 = listOf(&quota&quot, &quotbbb&quot, &quotcc&quot)
for (s in list2.listIterator()) {
println(&quot$s &quot)
}


⇒ a bbb cc


گام ۲: از نگاشت مخلوط (hash maps) استفاده کنید

در کاتلین شما تقریباً می توانید هر چیزی را با استفاده از ()hashMapOf به چیز دیگری نگاشت کنید. نگاشت مخلوط به نوعی مانند یک لیست از جفت ها است، که مقدار اول به عنوان کلید عمل می‌کند.

۱. یک نگاشت مخلوط بسازید که علائم، که کلیدها هستند و بیماری های ماهی، که مقادیر هستند را جور می‌کند.

val cures = hashMapOf(&quotwhite spots&quot to &quotIch&quot, &quotred sores&quot to &quothole disease&quot)


۲. سپس شما می توانید مقدار بیماری را بر اساس کلید علائم، با استفاده از متد ()get، یا حتی مختصر‌تر با براکت مربعی [‌ ] بازیابی کنید.

println(cures.get(&quotwhite spots&quot))


⇒ Ich


println(cures[&quotred sores&quot])


⇒ hole disease

۳. یک علامت بیماری که در نگاشت وجود ندارد را امتحان کنید.

println(cures[&quotscale loss&quot])


⇒ null

اگر یک کلید در نگاشت نباشد، تلاش برای بازگرداندن بیماری مطابق با مقدار null را برمی‌گرداند. بر اساس داده نگاشت شده، ممکن است هیچ همسانی برای یک کلید وجود نداشته باشد. برای این کاتلین تابع ()getOrDefault را ارائه می‌کند.

۴. با استفاده از ()getOrDefault جستجو برای کلیدی که همسان ندارد را امتحان کنید.

println(cures.getOrDefault(&quotbloating&quot, &quotsorry, I don't know&quot))


⇒ sorry, I don't know


اگر نیاز دارید تا چیزی بیشتر از بازگرداندن یک مقدار انجام دهید، کاتلین تابع ()getOrElse را ارائه می‌کند.

۵. کد را برای استفاده از ()getOrElse به جای ()getOrDefault تغییر دهید.

println(cures.getOrElse(&quotbloating&quot) {&quotNo cure for this&quot})


⇒ No cure for this


به جای بازگرداندن یک مقدار پیش فرض ساده، کدی که درون آکولاد { } باشد اجرا می‌شود. در این مثال else فقط یک رشته بازمی‌گرداند، اما می توانست مثل پیدا کردن یک صفحه وب با یک درمان برای بیماری و بازگرداندن آن تجملی باشد.

مانند لیست قابل تغییر (mutableListOf) شما می توانید یک نگاشت قابل تغییر (mutableMapOf) بسازید. یک نگاشت قابل تغییر به شما اجازه می دهد مورد ها را اضافه یا حذف کنید. Mutable یعنی قابل تغییر و immutable یعنی غیر قابل تغییر.

۶. یک نگاشت از فهرست موجودی که قابل اصلاح باشد بسازید، که یک رشته ابزار را به تعداد موارد نگاشت می‌کند. آنرا با تور ماهی گیری (fish net) داخل آن بسازید، بعد با استفاده از ()put سه پودر تمیز کننده مخزن (tank scrubbers) به فهرست موجودی اضافه کنید، و بعد تور ماهی را با ()remove حذف کنید.

val inventory = mutableMapOf(&quotfish net&quot to 1) inventory.put(&quottank scrubber&quot, 3) println(inventory.toString()) inventory.remove(&quotfish net&quot) println(inventory.toString())


⇒ {fish net=1, tank scrubber=3}{tank scrubber=3}
مجموعه های غیر قابل تغییر در فضای نخی (threaded) کاربردی هستند جایی که اگر نخ های مختلف به یک مجموعه دسترسی پیدا کنند ممکن است مشکلاتی ایجاد شود.

بخش قبل | فهرست درس | بخش بعد

توسعه دهنده وب و نرم افزار - طراح تجربه کاربر و رابط کاربری | لینک بوت کمپ کاتلین https://vrgl.ir/69hcw
شاید از این پست‌ها خوشتان بیاید