良いリンク

分解(Note: Since no French text was provided to translate, there is no output.)

さまざまなコードスニペット

マップリデュース

ビットのリストを文字列のリストに変換し、文字列のリストを要約する
文字列の中で、連結を含む。 リクエスト (requestBodyContent:byte[]) が送信されたときにログを取る方法

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

enum と sealed クラス

機能的インターフェイスとメソッド参照

エンティティをDTOのドメインモデルに変換することができ、参照メソッド(関数型スタイル-Java 8)を使います

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

Kotlinにおけるapply、run、let、also、use、withの違いは何ですか?

Kotlin 関数の比較とラムダ形式の利用 リファレンス

適用する

導入 コトリンの関数`apply`, run, let, also, use, et `with`様々な方法でオブジェクトを扱う手段を提供しています。それぞれに固有の使用例と挙動があります。さらに、ラムダ参照形式は既存のラムダ関数を参照することにより、コードをより読みやすく再利用しやすくします。

機能`apply`これはオブジェクトの生成中に設定するために使用されます。呼び出されたオブジェクトを返します。

ラムダ参照の例:

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

ラムダを使用した例:

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

実行

機能`run`オブジェクトに対してコードブロックを実行し、その結果を返すために使用されます。

ラムダ参照の例:

val result = someObject.run(::someFunction)

ラムダを使った例:

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

let

機能`let`は、オブジェクト上でコードブロックを実行し、その結果を返すために使用されます。

ラムダ参照の例:

val result = someObject.let(::processObject)

ラムダを使った例:

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

また

機能`also`これは、オブジェクトに追加のアクションを実行するために使用され、呼び出されたオブジェクトを返します。

lambda 参照の例

someObject.also(::performAdditionalAction)

ラムダを使った例 :

someObject.also {
// action additionnelle sur someObject
}

</think>

機能`use`使用後に閉じる必要があるリソースを扱うために使用されます。自動的に関数を呼び出します。`close`ブロックの終わりに。

ラムダ参照の例 :

someResource.use(::useResource)

lambda との例 :

someResource.use {
// travailler avec la ressource
}

with

関数`with`オブジェクトの複数のメソッドを名前を繰り返さずに呼び出すために使用され、最後の式の結果を返します。

例題とlambda参照 :

val result = with(someObject, ::processWithObject)

ラムダの例:

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

ラムダ参照フォームまたはブロックを使用して`{}`ロジックを別々の関数にカプセル化することで、コードの可読性と再利用性が向上します

Kotlinにおけるlet関数 ==

let は、副作用が適用されたオブジェクトを返しますか、それとも入力時の初期状態のオブジェクトを返しますか?(let によって異なります)

関数`let`Kotlin は、オブジェクトに対して操作を行い、異なる結果を返すために使用されます。ただし、関数については重要な点に注意する必要があります。`let`呼び出されたオブジェクトの初期状態を変更しません。

署名

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

使用法

機能`let`は、オブジェクトに変換を適用し、これらの変換に基づいた結果を得るために一般的に使用されます。

結果

関数が返す値`let`は引数として渡されたラムダ式の結果であり、通常はオブジェクトに対して行われた操作の結果です。

境界効果

関数であるにもかかわらず`let`ラムダ式で使用されるときにオブジェクトに副作用を及ぼす可能性はあるが、オブジェクト自身の初期状態を変更するわけではない。

したがって、関数`let`これは、オブジェクトに対して操作を行いながら導出結果を得つつ、元のオブジェクトの整合性を保つエレガントな方法です。

関連記事