آرگومان های نامی و اختیاری در کاتلین
یکی از ویژگیهایی که من در مورد Kotlin بیشتر دوست دارم، آرگومانهای نامگذاری شده به دنبال آرگومانهای پیشفرض است که از آنها، انعطافپذیری بیشتری در کد خود داریم، چه در پیادهسازی یا استفاده مجدد از یک کلاس یا تابع.
و برای نمایش بیایید با کلاسی شروع کنیم که نشان دهنده یک کاربر است:
class User(
val firstName: String,
val lastName: String,
val age: Int,
val bio: String,
val site: String?,
val address: Address?
)
بنابراین بیایید ایجاد یک شی برای نشان دادن کاربر را در نظر بگیریم:
val alex = User(
"Alex",
"Felipe",
28,
"Instrutor na Alura",
null,
null
)
لطفاً توجه داشته باشید که این نمونه فقط به نام، نام خانوادگی، سن و بیوگرافی نیاز دارد، اما با این وجود، ما مجبور شدیم مقادیر تهی را ارسال کنیم زیرا وبسایت یا آدرسی ارائه نکردهایم و این ممکن است برای هر ملکی که مورد نیاز نیست اتفاق بیفتد. !
استفاده از آرگومان های استاندارد
برای بهبود تجربه کدنویسی می توانیم موارد زیر را در نظر بگیریم: در پارامترهایی که می توانند null یا اختیاری باشند، از آرگومان های پیش فرض استفاده می کنیم!
class User(
val firstName: String,
val lastName: String,
val age: Int,
val bio: String = "",
val site: String? = null,
val address: Address? = null
)
فقط با این توییک میتوانیم یک کاربر با نام، نام خانوادگی و سن ایجاد کنیم:
val alex = User(
"Alex",
"Felipe",
28
)
ببینید که اکنون، میتوانیم استفاده از کلاسی که کاربر را نشان میدهد انعطافپذیرتر کنیم!
مشکلات اضافه کردن پارامترهای جدید
با این حال، تنها آرگومانهای استاندارد برای اینکه نمونه با تغییرات آتی دچار مشکل نشود، کافی نیست، به عنوان مثال، اگر یک فیلد جدید برای تعریف یک شناسه اختیاری اضافه کنیم:
class User(
val id: Long = 0L,
val firstName: String,
val lastName: String,
val age: Int,
val bio: String = "",
val site: String? = null,
val address: Address? = null
)
فقط با همین تغییر کوچک، باید هر کاربری که a را تعریف نمی کند، تغییر دهیم id
داخل کد ما
استفاده از آرگومان های نامگذاری شده
برای انعطافپذیرتر کردن پارامترهای تغییر در سازندههای کلاس یا توابع، از آرگومانهای نامگذاری شده استفاده میکنیم:
val alex = User(
firstName = "Alex",
lastName = "Felipe",
age = 28
)
آماده! فقط با این رویکرد، میتوانیم کلاس یا تابع خود را تغییر دهیم و پارامترهای جدیدی با آرگومانهای پیشفرض اضافه کنیم که نیازی به تغییر فراخوانیهای درون کد نباشد.
همچنین، آرگومان های نامگذاری شده را می توان به هر ترتیبی ارسال کرد:
val alex = User(
age = 28,
lastName = "Felipe",
firstName = "Alex"
)
نمونه های بیشتر
یک مورد استفاده بسیار رایج پیاده سازی Composables است، به پیاده سازی composable نگاه کنید Box
:
@Composable
inline fun Box(
modifier: Modifier = Modifier,
contentAlignment: Alignment = Alignment.TopStart,
propagateMinConstraints: Boolean = false,
content: @Composable BoxScope.() -> Unit
) {
...
}
توجه داشته باشید که فقط باید آرگومان را به ارسال کنیم content
(معمولاً یک لامبدا دنباله دار)، و ما می توانیم از آرگومان های نامگذاری شده برای اطمینان از سازگاری و غیره استفاده کنیم… در اینجا برخی از تغییرات فراخوانی do آورده شده است. Box
:
Box {
}
Box(modifier = Modifier) {
}
Box(
content = { },
contentAlignment = Alignment.Center
)
بدانید که این نوع رویکرد بسیار رایج است و استفاده عاقلانه از این دو ویژگی تضمین میکند که کدهای سازگارتر با سهولت رشد بیشتری بنویسید.
نظر شما در مورد این ویژگی های کاتلین چیست، آیا قبلاً از آنها در زندگی روزمره خود استفاده کرده اید؟ اگر چنین است، اینجا در نظرات با من به اشتراک بگذارید 😄