متنوع کوڈ کے ٹکڑے

مپ ریڈیوس

بائٹس کی فہرست کو سٹرنگز کی فہرست میں تبدیل کریں اور سٹرنگز کی فہرست کا خلاصہ کریں
ایک سٹرنگ میں کنکینیٹیشن شامل ہے۔ کیسے لاگ کریں request بھیجا(requestBodyContent:byte[])

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

enum aur sealed classes

فنکشنل انٹرفیس اور طریقہ رفرنس

ہم ایک انٹیٹی کو DTO ڈومین ماڈل میں ایک referência طریقے (فنکشنل سٹائل - 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() }
}

کotlin میں apply, run, let, also, use اور with کے درمیان فرق کیا ہے؟

Kotlin فنگشنز کی موازاة اور لامبڈا فارمز کے استعمال کی رفرنس

لگو لگانا

مقدمہ 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)

مثال کے ساتھ lambda :

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`ایک اجسام پر اضافی عمل کرنے کے لئے استعمال کی جاتی ہے اور وہی اجسام واپس کر دیا جاتا ہے جس پر اس کی عمل کی جاتی ہے۔

لامبڈا رفرنس کے ساتھ مثال :

someObject.also(::performAdditionalAction)

لامبڈا کے ساتھ مثال :

someObject.also {
// action additionnelle sur someObject
}

استعمال

وظیفہ`use`اس استعمال کے بعد بند ہونے والی وسائل کے ساتھ کام کرنے کے لیے استعمال ہوتی ہے۔ یہ خودکار طور پر فنگکشن کو بلاتی ہے`close`بلوک کے آخر میں.

لامبڈا رفرنس کے ساتھ مثال :

someResource.use(::useResource)

لامبدا کے ساتھ مثال :

someResource.use {
// travailler avec la ressource
}

ساتھ

وظیفہ`with`یہ کسی اشیاء پر ایک سے زیادہ طریقے بلائے جانے کے لیے استعمال ہوتی ہے، جس میں اس کے نام کا تکرار نہیں ہوتا اور یہ آخری اظہار کے نتیجے کو واپس کر دیتی ہے۔

lambda reference کے ساتھ مثال:

val result = with(someObject, ::processWithObject)

لامبدا کے ساتھ مثال :

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

لامبڈا ریفرنس فارمز یا بلاکس استعمال کرتے ہوئے`{}`, آپ لوجیک کو مختلف فنجن میں لفاف کر سکتے ہیں، جس سے کوڈ کی پڑھنی اور قابلیتِ استعمال میں اضافہ ہوتا ہے۔

let Function میں Kotlin

کیا let اشیاء کو اس کے اوپر انجام دیے گئے بارِحاشی اثرات کے ساتھ واپس کرتا ہے یا ابتدائی داخلے کی حالت میں، function(let) کے مطابق؟

فونکشن`let`Kotlin کا استعمال ایک آبجیکٹ پر آپریشنز کرنے اور مختلف نتیجہ واپس کرنے کے لیے کیا جاتا ہے۔ تاہم، یہ ضروری ہے کہ ياد رکھا جائے کہ فنگشن`let`یہ شیء کی ابتدائی حالت کو تبدیل نہیں کرتی، جس پر یہ بولائی جاتی ہے۔

امضا

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

استعمال

فنکشن`let`یہ عام طور پر ایک اشیاء پر ترنسفرمیشنز عائد کرنے اور ان ترنسفرمیشنز پر مبنی ایک نتیجہ حاصل کرنے کے لیے استعمال ہوتی ہے۔

نتیجہ

فنکشن سے واپسی میں آنے والی مقدار`let`یہ لامبڈا ایکسپرشن کا نتیجہ ہے جو اس آرگومانٹ کے طور پر پاس کیا جاتا ہے، عام طور پر وہ نتیجہ ہوتا ہے جو اس اشیاء پر کردہ اعمال کا ہوتا ہے۔

سرحد کے اثرات

اگرچہ فنکشن`let`� ًیہ لنبڈا ایکسپرشن میں استعمال ہونے پر آبجیکٹ پر جانچ دار اثرات ہو سکتے ہیں، لیکن یہ خود آبجیکٹ کی ابتدائی حالت کو تبدیل نہیں کرتی۔

لہٰذا، فنکشن`let`یہ ایک شاندار طریقہ ہے جس میں کسی آبجیکٹ پر آپریشنز انجام دیے جاتے ہیں، ساتھ ہی ایک مشتق شدہ نتیجہ بھی حاصل کیا جاتا ہے، اور اصل آبجیکٹ کی Integrity محفوظ رکھی جاتی ہے۔

Articles connexes