برنامه نویسی
نوشتن کد پاک کننده Jetpack Compose با مجموعه قوانین نوشتن توییتر

فهرست مطالب
- معرفی
- کدی که در حال بازسازی خواهیم بود
- اشتباه 1
- اشتباه 2
- اشتباه 3
- اشتباه 4
- کد بازسازی شده
معرفی
- اخیراً سعی کردم راههایی برای اصلاح توابع نوشتن Jetpack خود بیابم و خوشبختانه به مجموعه قوانین نوشتن توییتر برخورد کردم که میتوان آن را پیدا کرد. اینجا.
- چه
Twitter Compose Ruleset
در واقع است، مجموعه ای از قوانین ktlint سفارشی است تا اطمینان حاصل شود که اجزای سازنده شما در تله های رایج قرار نمی گیرند، که ممکن است به راحتی در بررسی کد از قلم نیفتد. حتی می توانید آموزش نحوه تنظیم آن با ktlin را در اینجا بیابید. اما در حال حاضر میخواهیم روی بازآفرینی دستی برخی از کدها از آخرین برنامهام تمرکز کنیم.
آخرین برنامه من برای دامداران در آمریکای شمالی
GitHub
کدی که ما دوباره فاکتور می کنیم:
- کد زیر کدی است که ما با اعمال قوانین یافت شده آن را مجدداً فاکتور خواهیم کرد اینجا
@Composable
fun CalendarDock(viewModel: EditCalfViewModel){
val calfDate = viewModel.uiState.value.birthDate!!
val convertedDate = calfDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
val selectedDate = remember {
mutableStateOf<LocalDate?>(convertedDate)
}
val calendarState = rememberSheetState()
CalendarDialog(
state = calendarState,
config = CalendarConfig(
monthSelection = true,
yearSelection = true
),
selection = CalendarSelection.Date(selectedDate = selectedDate.value){ newDate ->
selectedDate.value = newDate
viewModel.updateDate(newDate)
}
)
Row(
horizontalArrangement = Arrangement.SpaceBetween) {
OutlinedTextField(
//state
enabled = false,
value = "Date born: "+ selectedDate.value.toString(),
onValueChange = { },
//style
singleLine = true,
placeholder = {
Text(text = "Date", fontSize = 20.sp)
},
modifier = Modifier
.fillMaxWidth(),
textStyle = TextStyle(fontSize = 20.sp),
)
}
}
اشتباه 1: ارسال ViewModel به عنوان پارامتر
- در امضای تابع compose که در viewModel به عنوان پارامتر ارسال می کنم توجه کنید:
fun CalendarDock(viewModel: EditCalfViewModel)
- همانطور که در RULES، به جای ارسال viewModel، باید داده های مربوطه یا یک لامبدا اختیاری را ارسال کنیم
اشتباه 2: بدون پارامتر اصلاح کننده
- توجه کنید که چگونه این کد بالا هیچ ندارد
modifier
پارامتر. این یک پرچم قرمز جدی هنگام نوشتن کد نوشتن است. هر تابع ترکیبی (بله منظورم به معنای واقعی کلمه هر تابع نوشتن است) باید یک پارامتر اصلاح کننده داشته باشد. دلیل اصلی این امر این است که انعطاف پذیری و استفاده مجدد از کد را ترویج می کند، اما اگر می خواهید درک عمیق تری داشته باشید، توصیه می کنم پست وبلاگ را بخوانید. اینجا
اشتباه 3: موقعیت پارامتر اصلاح کننده
- هنگام اضافه کردن پارامتر اصلاح کننده، باید مطمئن شویم که آن را در موقعیت صحیح اضافه می کنیم. هنگام اضافه کردن پارامترها به ترکیب توابع، ابتدا پارامترهای اجباری می آیند و سپس پارامتر اصلاح کننده می آید. پارامتر اصلاح کننده باید اولین شکاف پارامتر اختیاری را اشغال کند تا یک استثنا ثابت برای توسعه دهندگان دیگر ایجاد کند. این بدان معناست که با رشد پروژه ما و اضافه کردن افراد بیشتری به تیم خود، آنها می توانند انتظار یک تجربه برنامه نویسی ثابت را داشته باشند.
اشتباه 4: اصلاح کننده ها باید پارامترهای پیش فرض داشته باشند
-
همانطور که قوانین می گوید:
Composables that accept a Modifier as a parameter to be applied to the whole component represented by the composable function should name the parameter modifier and assign the parameter a default value of Modifier
. -
اگر یک پارامتر اصلاح کننده دارید، Long story باید مقدار پیش فرض Modifier را به آن بدهید
کد بازسازی شده:
- بنابراین با تمام این قوانین اعمال شده، کد بازسازی شده ما اکنون به شکل زیر است:
@Composable
fun CalendarDock2(dateBorn: Date,selectedAction:(LocalDate)->Unit,modifier: Modifier = Modifier){
val convertedDate = dateBorn.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
val selectedDate = remember { mutableStateOf<LocalDate?>(convertedDate) }
val calendarState = rememberSheetState()
CalendarDialog(
state = calendarState,
config = CalendarConfig(
monthSelection = true,
yearSelection = true
),
selection = CalendarSelection.Date(selectedDate = selectedDate.value){ newDate ->
selectedDate.value = newDate
selectedAction(newDate)
}
)
Row(
horizontalArrangement = Arrangement.SpaceBetween,
) {
OutlinedTextField(
//state
enabled = false,
value = "Date born: "+ selectedDate.value.toString(),
onValueChange = { },
//style
singleLine = true,
placeholder = {
Text(text = "Date", fontSize = 20.sp)
},
modifier = modifier,
textStyle = TextStyle(fontSize = 20.sp),
)
}
}
نتیجه
- از اینکه وقت خود را برای خواندن این پست وبلاگ من اختصاص دادید متشکرم. اگر سوال یا ابهامی دارید لطفا در زیر کامنت بگذارید یا با من تماس بگیرید توییتر.