یادآور Kotlin
منتشر شده در 29 May 2022
لینکهای خوب
قطعه کد متنوع
نقش و کاهش
تبدیل یک لیست bite به یک لیست string و خلاصهسازی لیست string
در یک رشتهای شامل concatenation چگونه لاگ کنیم درخواست ارسال شده(requestBodyContent:byte[])
log.info(
requestBodyContent!!.map { it.toInt().toChar().toString() }
.reduce { request: String, s: String -> request + s }
)
enum و کلاسهای بسته
اینترفیس عملکردی و ارجاع متد
میتوان یک موجودیت را به مدل دامنه DTO تبدیل کرد با یک متد ارجاع (سبک عملکردی - جاوا ۸)
fun findAllByLoginNot(
pageable:Pageable,
login:String)
:Page<UserDto> {
return userDao.findAllByLoginNot(
pageable,
login).map(::fromEntity)
}
یکhttps://stackoverflow.com/a/22245383/837404[توضیح خوب]
خروجی استاندارد را ضبط کنید
package functional
import java.io.ByteArrayOutputStream
import java.io.PrintStream
import java.lang.System.out
import java.lang.System.setOut
import kotlin.test.AfterTest
import kotlin.test.BeforeTest
import kotlin.test.Test
import kotlin.test.assertEquals
class BasicsHOF {
private val standardOut: PrintStream? = out
private val outputStreamCaptor = ByteArrayOutputStream()
@BeforeTest
fun setUp() = setOut(PrintStream(outputStreamCaptor))
@AfterTest
fun tearDown() = setOut(standardOut)
@Test
fun `three times dope`() {
3.times { println("Hello") }
assertEquals(
buildString {
repeat(3) { append("Hello\n") }
deleteAt(length - 1)
}, outputStreamCaptor
.toString()
.trim()
)
}
fun Int.times(fn: () -> Unit) = (1..this).forEach { _ -> fn() }
}
تفاوت در کاتلین بین apply، run، let، also، use و with چیست؟
مقایسه توابع Kotlin و استفاده از اشکال لامبدا مرجع
appliquer
run, let, also, use, et `with`طرزهای مختلفی برای پردازش اشیاء ارائه میدهند. هر کدام موارد استفاده و رفتارهای خاص خود را دارند. علاوه بر این، اشکال lambda reference امکان میدهند تا کد را به وسیله ارجاع به توابع lambda موجود، بیشتر قابل خواندن و قابل استفاده دوباره کنند.تابع`apply`برای پیکربندی یک شیء در زمان ایجاد آن به کار میرود. شیءی که بر روی آن فراخوانی میشود را برمیگرداند.
نمونه با ارجاع lambda :
val someObject = SomeClass().apply(::configureObject)
مثال با lambda:
val someObject = SomeClass().apply {
// configuration des propriétés de someObject
}
دوڑ
وظیفهٔ`run`است برای اجرای یک بلوک کد بر روی یک شیء استفاده میشود و نتیجهی آن بلوک کد را برمیگرداند.
نمونه با ارجاع lambda :
val result = someObject.run(::someFunction)
مثال با lambda :
val result = someObject.run {
// bloc de code à exécuter sur someObject
// la dernière expression est renvoyée
}
let
تابع`let`استفاده میشود تا یک بلوک کد بر روی یک شیء اجرا شود و نتیجهی آن بلوک کد را برگرداند.
مثال با ارجاع lambda :
val result = someObject.let(::processObject)
مثال با lambda :
val result = someObject.let {
// bloc de code à exécuter sur someObject
// la dernière expression est renvoyée
}
همچنین = =
وظیفه`also`برای انجام یک عمل اضافی بر روی یک شیء استفاده میشود و شیءای که روی آن فراخوانی شده را برمیگرداند.
مثال با ارجاع لامبدا :
someObject.also(::performAdditionalAction)
مثال با lambda :
someObject.also {
// action additionnelle sur someObject
}
استفاده
عمل`use`برای کار با منابعی که باید بعد از استفاده بسته شوند، استفاده میشود. این بهطور خودکار تابع را صدا میزند`close`در پایان بلوک.
مثال با مرجع lambda :
someResource.use(::useResource)
مثال با lambda :
someResource.use {
// travailler avec la ressource
}
با
عملکرد`with`برای فراخوانی چندین متد بر روی یک объект بدون تکرار نام آن استفاده میشود و نتیجهٔ آخرین عبارت را برمیگرداند.
نمونه با ارجاع lambda :
val result = with(someObject, ::processWithObject)
مثال با lambda :
val result = with(someObject) {
// appeler des méthodes sur someObject
// la dernière expression est renvoyée
}
با استفاده از اشکال lamdba reference یا بلوکها`{}`, شما میتوانید منطق را در توابع جداگانه بستهبندی کنید، به این ترتیب خوانایی و قابلیت استفاده مجدد کد را بهبود میبخشید.
let Function در Kotlin
تابع`let`در Kotlin برای انجام عملیات بر روی یک شیء استفاده میشود و یک نتیجه مختلف بازگردانده میشود. اما باید توجه داشت که تابع`let`این، وضعیت اولیه شیءای که بر روی آن فراخوانی میشود را تغییر نمیدهد.
امضا |
|
استفاده |
عمل`let`این بهطور معمول برای اعمال تبدیلها به یک شیء استفاده میشود و نتایجی حاصل میشود که بر پایهٔ این تبدیلها است. |
نتیجه |
مقدار برگردانده شده توسط تابع`let`است نتیجهی عبارت lambda که بهعنوان آرگومان ارائه شده است، معمولاً نتیجهی عملیاتی که بر روی شیء انجام میشود. |
اثرات لبه |
هرچند که تابع`let`möglich است اثرات جانبی بر شیء داشته باشد وقتی در عبارت لامبدا استفاده میشود، اما وضعیت اولیه شیء خود را تغییر نمیدهد. |
به این ترتیب، تابع`let`این یک شیوه شایسته برای انجام عملیات روی یک شیء است، در حالی که یک نتیجه مشتق به دست میآید و در عین حال سلامت شیء اصلی حفظ میشود.