Đoạn mã linh tinh

map reduce

Chuyển đổi một danh sách bite thành một danh sách string và tóm tắt danh sách string đó
trong một chuỗi chứa phép nối. Cách ghi log request đã gửi (requestBodyContent:byte[])

log.info(
    requestBodyContent!!.map { it.toInt().toChar().toString() }
        .reduce { request: String, s: String -> request + s }
)

enum và sealed classes

interface chức năng và tham chiếu phương thức

Có thể chuyển đổi một thực thể thành domain model của dto bằng một phương thức reference (phong cách functional - java 8)

fun findAllByLoginNot(
        pageable:Pageable,
        login:String)
    :Page<UserDto> {
    return userDao.findAllByLoginNot(
                    pageable,
                    login).map(::fromEntity)
}

mộthttps://stackoverflow.com/a/22245383/837404[giải thích hay]

Capture đầu ra tiêu chuẩn

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() }
}

Sự khác biệt giữa apply, run, let, also, use và with trong kotlin là gì?

So sánh các hàm Kotlin và Sử dụng các Hình thức Lambda Reference

áp dụng

Giới thiệu Các hàm Kotlin`apply`, run, let, also, use, et `with`cung cấp các phương thức khác nhau để xử lý các đối tượng. Mỗi phương thức đều có các trường hợp sử dụng và hành vi riêng. Ngoài ra, các lambda reference cho phép làm cho mã nguồn dễ đọc và có thể tái sử dụng hơn bằng cách tham chiếu đến các hàm lambda hiện có.

Hàm`apply`được sử dụng để cấu hình một đối tượng trong khi khởi tạo. Nó trả về đối tượng mà nó được gọi.

Ví dụ với lambda reference:

val someObject = SomeClass().apply(::configureObject)

Ví dụ với lambda:

val someObject = SomeClass().apply {
// configuration des propriétés de someObject
}

chạy

Hàm`run`được sử dụng để thực thi một khối mã trên một đối tượng và trả về kết quả của khối mã đó.

Ví dụ với lambda reference:

val result = someObject.run(::someFunction)

Ví dụ với lambda:

val result = someObject.run {
// bloc de code à exécuter sur someObject
// la dernière expression est renvoyée
}

cho phép

Hàm`let`được sử dụng để thực thi một khối mã trên một đối tượng và trả về kết quả của khối mã đó.

Ví dụ với lambda reference:

val result = someObject.let(::processObject)

Ví dụ với lambda:

val result = someObject.let {
// bloc de code à exécuter sur someObject
// la dernière expression est renvoyée
}

cũng

Hàm`also`được sử dụng để thực hiện một hành động bổ sung trên một đối tượng và trả về chính đối tượng đó.

Ví dụ với lambda reference:

someObject.also(::performAdditionalAction)

Ví dụ với lambda:

someObject.also {
// action additionnelle sur someObject
}

sử dụng

Hàm`use`được sử dụng để làm việc với các tài nguyên cần phải được đóng sau khi sử dụng. Nó tự động gọi hàm`close`ở cuối khối.

Ví dụ với lambda reference:

someResource.use(::useResource)

Ví dụ với lambda:

someResource.use {
// travailler avec la ressource
}

với

Hàm`with`được sử dụng để gọi nhiều phương thức trên một đối tượng mà không cần lặp lại tên của đối tượng đó và trả về kết quả của biểu thức cuối cùng.

Ví dụ với lambda reference:

val result = with(someObject, ::processWithObject)

Ví dụ với lambda:

val result = with(someObject) {
// appeler des méthodes sur someObject
// la dernière expression est renvoyée
}

Sử dụng các dạng lambda reference hoặc các khối`{}`, bạn có thể đóng gói logic vào các hàm riêng biệt, từ đó cải thiện khả năng đọc và khả năng tái sử dụng của mã nguồn.

Liệu let trả về đối tượng với các tác dụng phụ đã thực hiện trên đó hay ở trạng thái ban đầu khi đưa vào hàm (let)?

hàm trong Kotlin

Hàm`let`trong Kotlin được sử dụng để thực hiện các thao tác trên một đối tượng và trả về một kết quả khác. Tuy nhiên, điều quan trọng cần lưu ý là hàm`let`không thay đổi trạng thái ban đầu của đối tượng mà nó được gọi.

Chữ ký inline fun <T, R> T.let(block: (T) → R): R
Cách sử dụng Hàm`let`thường được sử dụng để áp dụng các phép biến đổi cho một đối tượng và nhận kết quả dựa trên các phép biến đổi đó.
Kết quả Giá trị được trả về bởi hàm`let`là kết quả của biểu thức lambda được truyền vào làm đối số, thường là kết quả của các thao tác được thực hiện trên đối tượng.
Tác dụng phụ Mặc dù hàm`let`có thể gây ra các tác dụng phụ đối với đối tượng khi được sử dụng trong biểu thức lambda, nó không làm thay đổi trạng thái ban đầu của chính đối tượng đó.

Vì vậy, hàm`let`là một cách thanh lịch để thực hiện các thao tác trên một đối tượng trong khi vẫn thu được một kết quả phái sinh, đồng thời bảo toàn tính toàn vẹn của đối tượng ban đầu.

Bài viết liên quan