در این تکلیف شما در مورد جفتها و سهگانهها و تخریب ساختار آنها بیشتر میآموزید. جفتها و سهگانهها کلاسهای دادهای پیش ساخته برای دو یا سه مورد نوعی (generic) هستند. این میتواند برای برگرداندن یک یا دو مقدار از یک تابع کاربردی باشد.
فرض کنید که یک List از ماهی و یک تابع ()isFreshWater برای چک کردن ماهی آب شیرین یا ماهی
آب شور داشته باشید. تابع ()List.partition دو لیست برمیگرداند، یکی با موردهایی که شرط true دارند، و دیگری برای موردهایی که شرط false دارند.
val twoLists = fish.partition { isFreshWater(it) } println("freshwater: ${twoLists.first}") println("saltwater: ${twoLists.second}")
گام ۱: چند جفت و سهگانه بسازید
۱. هسته ارتباطی REPL را باز کنید.
۲. یک جفت بسازید، که یک تکه از تجهیزات را با چیزی که برای آن استفاده می شود مرتبط میکند، بعد مقادیر را چاپ کنید. شما میتوانید با ساختن یک عبارت که دو مقدار، مانند دو رشته را، با استفاده از کلمه کلیدی to به هم وصل میکند یک جفت بسازید، سپس با استفاده از first. یا second. به هر کدام از مقادیر ارجاع دهید.
val equipment = "fish net" to "catching fish" println("${equipment.first} used for ${equipment.second}")
⇒ fish net used for catching fish
۳. یک سهگانه بسازید و آن را با استفاده از ()toString چاپ کنید، سپس آنرا با استفاده از ()toList به یک لیست تبدیل کنید. شما سهگانه را با استفاده از ()Triple و سه مقدار میسازید. برای ارجاع به هر مقدار از second ،.first. و third. استفاده کنید.
val numbers = Triple(6, 9, 42) println(numbers.toString()) println(numbers.toList())
⇒ (6, 9, 42) [6, 9, 42]
مثالهای بالا از نوع یکسان برای همه بخشهای جفت و سهگانه استفاده میکنند، اما این الزامی نیست. بخشها میتوانستند یک رشته، یک عدد، یا یک لیست، یا برای مثال - حتی یک جفت یا سهگانه باشند.
۴. یک جفت بسازید که بخش اول آن خود یک جفت است.
val equipment2 = ("fish net" to "catching fish") to "equipment" println("${equipment2.first} is ${equipment2.second}\n") println("${equipment2.first.second}")
⇒ (fish net, catching fish) is equipment ⇒ catching fish
گام ۲: ساختار چند جفت و سهگانه را تغییر دهید
به جدا کردن جفت ها و سهگانهها به قطعات سازنده آنها تغییر ساختار (destructuring) گفته می شود. جفتها و سهگانهها را به تعداد متغیرهای مناسب به اختصاص دهید، و کاتلین مقدار هر بخش را به ترتیب اختصاص می دهد.
۱. ساختار یک جفت را تغییر دهید و مقادیر آن را چاپ کنید.
val equipment = "fish net" to "catching fish" val (tool, use) = equipment println("$tool is used for $use")
⇒ fish net is used for catching fish
۲. ساختار یک سه گانه را تغییر دهید و مقادیر آن را چاپ کنید.
val numbers = Triple(6, 9, 42)
val (n1, n2, n3) = numbers
println("$n1 $n2 $n3")
⇒ 6 9 42
توجه کنید که تغییر ساختار جفت ها و سهگانهها مانند کلاسهای داده عمل میکند که در آزمایشگاه کد قبلی پوشش داده شد.