Kotlin notu
Yayınlandı: 29 May 2022
İyi bağlantılar
Çeşitli kod parçası
harita azalt
Bir bite listesini bir string listesine dönüştür ve string listesini özetle
birleştirme içeren bir stringte requestBodyContent:byte[] içeren request gönderildiğinde nasıl loglanır?
log.info(
requestBodyContent!!.map { it.toInt().toChar().toString() }
.reduce { request: String, s: String -> request + s }
)
enum ve sealed sınıflar
fonksiyonel arayüz ve metod referansı
Bir varlığı, bir metod referansı (fonksiyonel stil- java 8) kullanarak DTO model domainine dönüştürebiliriz.
fun findAllByLoginNot(
pageable:Pageable,
login:String)
:Page<UserDto> {
return userDao.findAllByLoginNot(
pageable,
login).map(::fromEntity)
}
birhttps://stackoverflow.com/a/22245383/837404[iyi açıklama]
Standart çıktıyı yakala
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’da apply, run, let, also, use ve with arasındaki fark nedir?
Kotlin fonksiyonlarının karşılaştırması ve Lambda Formları Kullanımı Referansı
uygula
run, let, also, use, et `with`Farklı nesneleri işlemek için farklı yöntemler sunarlar. Her biri kendi kullanım durumları ve davranışlarına sahiptir. Ayrıca, lambda referans biçimleri mevcut lambda fonksiyonlarına başvurarak kodu daha okunabilir ve yeniden kullanılabilir kılar.fonksiyon`apply`Bir nesnenin oluşturulması sırasında onu yapılandırmak için kullanılır. Çağrıldığı nesneyi döndürür.
Lambda referansıyla örnek :
val someObject = SomeClass().apply(::configureObject)
Lambda ile örnek :
val someObject = SomeClass().apply {
// configuration des propriétés de someObject
}
Çalıştır
fonksiyon`run`bir nesne üzerinde bir kod bloğunu çalıştırmak ve kod bloğunun sonucunu döndürmek için kullanılır.
Lambda referanslı örnek :
val result = someObject.run(::someFunction)
Lambda ile örnek:
val result = someObject.run {
// bloc de code à exécuter sur someObject
// la dernière expression est renvoyée
}
let
Fonksiyon`let`bir nesne üzerinde bir kod bloğunu çalıştırmak ve kod bloğunun sonucunu döndürmek için kullanılır.
Lambda referanslı örnek :
val result = someObject.let(::processObject)
Örnek lambda ile :
val result = someObject.let {
// bloc de code à exécuter sur someObject
// la dernière expression est renvoyée
}
da
fonksiyon`also`bir nesne üzerinde ek bir işlem yapmak için kullanılır ve çağıldığı nesneyi döndürür.
Örnek lambda referansı ile :
someObject.also(::performAdditionalAction)
lambda ile örnek :
someObject.also {
// action additionnelle sur someObject
}
kullan
Fonksiyon`use`kullanılması gereken kaynaklarla çalışmak için kullanılır. Otomatik olarak fonksiyonu çağırır.`close`blokun sonunda.
lambda referanslı örnek:
someResource.use(::useResource)
Lambda ile örnek:
someResource.use {
// travailler avec la ressource
}
ile
fonksiyon`with`Bir nesne üzerinde adını tekrarlamadan birden fazla yöntemi çağırmak için kullanılır ve son ifadenin sonucunu döndürür.
Lambda referansıyla örnek :
val result = with(someObject, ::processWithObject)
lambda ile örnek:
val result = with(someObject) {
// appeler des méthodes sur someObject
// la dernière expression est renvoyée
}
Lambda referans biçimleri veya blokları kullanarak`{}`, mantığı ayrı ayrı fonksiyonlara sarmalayarak, kodun okunabilirliğini ve yeniden kullanılabilirliğini artırabilirsiniz.
let Fonksiyon Kotlin’de
Fonksiyon`let`Ancak, fonksiyonun dikkat edilmesi gerekiyor`let`çağrıldığı nesnenin başlangıç durumunu değiştirmez.
| İmza | inline fun <T, R> T.let(block: (T) → R): R |
|---|
| kullanım | Fonksiyon`let`Bu, bir nesneye dönüşümler uygulamak ve bu dönüşümlere dayalı bir sonuç elde etmek için yaygın olarak kullanılır. |
|---|
| Sonuç | fonksiyon tarafından döndürülen değer`let`Lambda ifadesi argüman olarak geçirilen ifadenin sonucudur, genellikle nesne üzerinde yapılan işlemlerin sonucudur. |
|---|
| Yan etkileri | İşlev olsa da`let`Lambda ifadesinde kullanıldığında nesne üzerinde yan etkileri olabilir, ancak nesnenin başlangıç durumunu değiştirmez. |
|---|
Böylece, fonksiyon`let`Bir nesne üzerinde işlem yaparak türetilmiş bir sonuç elde ederken, orijinal nesnenin bütünlüğünü koruyarak şık bir yöntemdir.