قطعه کد متنوع

نقش و کاهش

تبدیل یک لیست 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

مقدمه توابع Kotlin`apply`, 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 شیء را با آثار جانبی اعمال‌شده بر روی آن یا در وضعیت اولیه ورودی، بسته به (let) برمی‌گرداند؟

تابع`let`در Kotlin برای انجام عملیات بر روی یک شیء استفاده می‌شود و یک نتیجه مختلف بازگردانده می‌شود. اما باید توجه داشت که تابع`let`این، وضعیت اولیه شیء‌ای که بر روی آن فراخوانی می‌شود را تغییر نمی‌دهد.

امضا

inline fun <T, R> T.let(block: (T) → R): R

استفاده

عمل`let`این به‌طور معمول برای اعمال تبدیل‌ها به یک شیء استفاده می‌شود و نتایجی حاصل می‌شود که بر پایهٔ این تبدیل‌ها است.

نتیجه

مقدار برگردانده شده توسط تابع`let`است نتیجه‌ی عبارت lambda که به‌عنوان آرگومان ارائه شده است، معمولاً نتیجه‌ی عملیاتی که بر روی شیء انجام می‌شود.

اثرات لبه

هرچند که تابع`let`möglich است اثرات جانبی بر شیء داشته باشد وقتی در عبارت لامبدا استفاده می‌شود، اما وضعیت اولیه شیء خود را تغییر نمی‌دهد.

به این ترتیب، تابع`let`این یک شیوه شایسته برای انجام عملیات روی یک شیء است، در حالی که یک نتیجه مشتق به دست می‌آید و در عین حال سلامت شیء اصلی حفظ می‌شود.

مقالات مرتبط