مذكرة كوتلن
Publié le 29 May 2022
روابط جيدة
قطعة كود متنوعة
تعيين وتجميع
تحويل قائمة البت إلى قائمة سلاسل وتلخيص قائمة السلاسل
في سلسلة تحتوي على الربط. كيف يتم تسجيل الطلب المرسل (requestBodyContent:byte[])
log.info(
requestBodyContent!!.map { it.toInt().toChar().toString() }
.reduce { request: String, s: String -> request + s }
)
enum والفئات المغلقة
المشاركة:التدريب فئة تعداد مختومة Kotlin
واجهة وظيفية وإشارة إلى الطريقة
يمكن تحويل كيان إلى نموذج المجال لـ 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 و مع ?
مقارنة وظائف Kotlin واستخدام أشكال Lambda المرجع
تطبيق
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`وهي تُستخدم لتنفيذ إجراء إضافي على كائن وتعيد الكائن الذي استُدعيت عليه.
مثال باستخدام مرجع lambda :
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
}
باستخدام أشكال lambda reference أو الكتل`{}`، يمكنك تغليف المنطق في دوال منفصلة، thereby تحسين قابلية القراءة وإعادة الاستخدام من الكود.
let Function في Kotlin
الوظيفة`let`في Kotlin تُستخدم لتنفيذ عمليات على كائن وإرجاع نتيجة مختلفة. ومع ذلك، من المهم ملاحظة أن الدالة`let`لا تُعدل الحالة الأولية للكائن الذي تُستدعى عليه.
التوقيع |
|
استخدام |
الوظيفة`let`يُستخدم عادةً لتطبيق تحويلات على كائن والحصول على نتيجة بناءً على هذه التحويلات. |
نتيجة |
القيمة التي تُرجعها الدالة`let`هو نتيجة التعبير lambda الممرر كوسيط، عادةً نتيجة العمليات التي تُجرى على الكائن. |
آثار الحافة |
على الرغم من أن الوظيفة`let`قد يكون لها آثار جانبية على الكائن عندما تُستخدم في تعبير lambda، لكنها لا تُغيّر الحالة الأولية للكائن نفسه. |
وبالتالي، الوظيفة`let`هي طريقة أنيقة لتنفيذ عمليات على كائن مع الحصول على نتيجة مشتقة، مع الحفاظ على سلامة الكائن الأصلي.