composable한개는 하나의 목적만 가질 수 있도록
view를 리턴하는 컴포저블은 반드시 modifier를 함수인자로 가지고 있어야하며 루트에서 사용되어야함
도메인이나 모듈단의 이름을 사용하는것은 피해야함
ex - GoogleButton, WearButton
추가로 Basic키워드가 들어간 경우 BasicTextField처럼 아주 기본적인 기능의 토대가 되어야함
Explicit inputs은 해당 컴포넌트가 어떤 일을하는지 파악하기 쉬우며, 테스트하기에도, 사용하기에도 편안함
CompositionLocal이나 이와 비슷한 것들은 컴포넌트 내부에 선언하지 않도록 해야함
이러한 인풋들은 컴포넌트를 복잡하게 만들고 커스텀할 경우 트래깅하기 힘들어짐
Nullable값은 피할 것
Modifier로 해결가능한 부분에 대해서 추가적인 함수 파라미터로 추가하지 말것
Don't
@Composable
fun Image(
bitmap: ImageBitmap,
// not core functionality, click can be added via Modifier.clickable
onClick: () -> Unit = {},
modifier: Modifier = Modifier,
// can be specified via `Modifier.clip(CircleShape)`
clipToCircle: Boolean = false
)
DO
@Composable
fun Button(
onClick: () -> Unit,
// modifier param specified so that width, padding etc can be added
modifier: Modifier = Modifier,
// button is a colored rect that clicks, so background
// considered as a core functionality, OK as a param
backgroundColor: Color = MaterialTheme.colors.primary
)
@Composable lambda get.invoke()가 호출될 때 값을 가져옴, 컴포지션 state중 필요한 구간에서만 값을 갱신해줄 수 있어 성능에서 이득을 볼 수 있음위에서 설명한 것 처럼 값을 가져오는 방법을 사용할 것
슬롯에 들어갈 UI 전체를 넘길 것
TextString만 넘기지말고
remember 과 movableContent를 사용하면 된다고하는데 정확한 의미 파악중