۱ احمدرضا عبداللهی
named arguments
محسن موحد حل شده توسط محسن موحد

زمانی که از Database@ در روم استفاده می‌کنیم شبیه به named arguments عمل می‌کنیم و مثلا version دیتابیس رو مشخص می‌کنیم. آیا اون هم همین مفهوم named arguments هستش ؟ (چون در جاوا همچین concept وجود نداشت)

 

JSONObject از چه naming convention استفاده کرده؟

 

high order function که پارامتر ورودی هم داشته باشه چه کاربردی داره و کجا استفاده میشه، مشابه مثال زیر: منظورم T هستش که function type مشخص شده، آن function یک parameter هم داره

public inline fun <T> Array<out T>.forEach(action: (T) -> Unit): Unit {
    for (element in this) action(element)
}

 

سلام،

 

سؤال اول:

بله، زمانی که در کاتلین از انوتیشن @Database در Room استفاده میکنی و مقادیری مثل version یا entities رو مشخص میکنی، در واقع از Named Arguments استفاده میکنی.

Named Arguments در کاتلین به شما این امکان رو میده که هنگام فراخوانی توابع یا سازنده‌ها، به جای این که فقط مقادیر رو به ترتیب وارد کنی، نام پارامترها رو هم ذکر کنی. این کار باعث خواناتر شدن کد و کاهش خطا میشه.

در جاوا همچین مفهومی به صورت مستقیم وجود نداره و شما باید مقادیر رو به ترتیب پارامترها وارد کنی.

 

سؤال دوم:

کلاس JSONObject از PascalCase برای نام‌گذاری استفاده کرده. در این روش، حروف اول هر کلمه بزرگ نوشته میشه و بین کلمات فاصله یا علامت‌گذاری وجود نداره. مثل JSONObject یا JSONArray یا JSONException ...

 

سؤال سوم:

Higher-Order Function، تابعیه که یک یا چند تابع رو به عنوان پارامتر میگیره یا یک تابع رو به عنوان خروجی برمیگردونه.        

public inline fun <T> Array<out T>.forEach(action: (T) -> Unit): Unit {
    for (element in this) action(element)
}

+ forEach یک تابع مرتبه بالا هست.

+ این تابع یک پارامتر به نام action داره که خودش یک تابع هست.

+ action یک تابع هست که یک پارامتر از نوع T میگیره و خروجی اون Unit (هیچ چیز) هست.

 

-- منظور از T چیه؟

T یک نوع جنریک (Generic) هست. یعنی تابع forEach میتونه با آرایه‌ای از هر نوعی کار کنه (مثلاً Int، String، CustomClass و …).

 

-- چرا action پارامتر ورودی داره؟

چون ما میخوایم روی هر عنصر آرایه عملیاتی انجام بدیم، نیاز داریم که اون عنصر رو به تابع action بدیم تا کاری که میخوایم انجام بشه.

 

کاربرد و مثال:

فرض کن میخوای روی هر عدد در یک لیست عملیات خاصی انجام بدی، مثلاً چاپ کنی یا دو برابر کنی.      

val numbers = arrayOf(1, 2, 3, 4, 5)
numbers.forEach { number ->
    println(number * 2)  // اینجا هر عدد دو برابر و چاپ می‌شه
}
بهترین پاسخ
محسن موحد ۲۷ آذر ۱۴۰۳، ۰۱:۴۵