Jetpack Compose คือชุดเครื่องมือ UI สำหรับ Android ใช่หรือไม่?
✅ คำตอบ: ใช่, Jetpack compose เป็น UI Toolkit
~~เหตุผล: Jetpack Compose ช่วยให้สามารถสร้าง UI ได้โดยไม่ต้องใช้ XML อีกต่อไป ใช้การเขียนโค้ดใน Kotlin ทั้งหมด~~
คำสั่งใดที่ใช้กำหนดว่า function นี้เป็น Composable Function?
✅ คำตอบ: ใช้ annotation @Composable
เหตุผล: เพื่อให้ระบบรู้ว่าฟังก์ชันนั้นใช้สร้าง UI ได้
ถ้าต้องการวาง UI element ในแนวตั้งต้องใช้คอมโพเนนต์อะไร?
✅ คำตอบ: ใช้ Column
เหตุผล: Column เป็น layout สำหรับเรียงลูกในแนวตั้ง (vertical)
คอมโพเนนต์ใดใช้แสดงรายการแบบเลื่อนขึ้นลงได้?
✅ คำตอบ: LazyColumn
เหตุผล: LazyColumn ช่วยให้แสดงรายการที่ scroll ได้และโหลดเฉพาะรายการที่จำเป็น
ต้องการแสดงข้อความควรใช้ Composable ใด?
✅ คำตอบ: Text
เหตุผล: Text เป็นองค์ประกอบพื้นฐานที่ใช้แสดงข้อความใน Compose
ฟังก์ชัน remember ใช้ทำอะไรใน Compose?
✅ คำตอบ: ใช้จดจำค่าภายใน Composable ระหว่างการ Recomposition
เหตุผล: ช่วยให้ค่าที่ถูกสร้างครั้งแรกไม่ถูกสร้างซ้ำทุกครั้งที่ UI เปลี่ยนแปลง
หากต้องการให้ Composable ขยายเต็มหน้าจอควรใช้ Modifier ใด?
✅ คำตอบ: Modifier.fillMaxSize()
เหตุผล: ทำให้องค์ประกอบขยายให้พอดีกับขนาดของ parent container
ฟังก์ชัน rememberCoroutineScope() ใช้สำหรับอะไร?
✅ คำตอบ: สร้าง CoroutineScope ที่ผูกกับ lifecycle ของ Composable
เหตุผล: ใช้เพื่อรันงาน asynchronous ภายใน Composable โดยไม่ต้องใช้ ViewModel
วิธีเชื่อม StateFlow เข้ากับ UI ของ Compose คืออะไร?
✅ คำตอบ: ใช้ collectAsState()
เหตุผล: เปลี่ยน StateFlow เป็น State ที่ Composable สามารถ observe ได้
Modifier.padding(16.dp) มีผลอย่างไร?
✅ คำตอบ: เพิ่มช่องว่างรอบนอกขององค์ประกอบ
เหตุผล: Padding คือการเว้นพื้นที่จากขอบนอกเข้ามา
อะไรคือเหตุผลหลักที่ใช้ key กับรายการใน LazyColumn?
✅ คำตอบ: เพื่อช่วยให้ Compose ระบุตัวตนของรายการแต่ละอัน และเพิ่มประสิทธิภาพในการ Recomposition
เหตุผล: ถ้าไม่กำหนด key อาจเกิดปัญหาการเปลี่ยนข้อมูลผิดตำแหน่งเมื่อรายการเปลี่ยนแปลง
หากต้องการนำ xml มาใช่ร่วมกันกับ compose ต้องใช้ Composable ใด ?
✅ คำตอบ: AndroidView
เหตุผล: เป็นสะพานเชื่อมระหว่าง View แบบดั้งเดิมกับโลกของ Compose
ถ้า mutableStateOf ถูกประกาศไว้นอก remember จะเกิดผลอย่างไร?
✅ คำตอบ: State จะไม่รอดจากการ Recomposition ทำให้ค่ารีเซ็ตทุกครั้ง
เหตุผล: remember ใช้เก็บ state ให้รอดจากการเรียกซ้ำของ Composable
derivedStateOf มีไว้ทำอะไร?
✅ คำตอบ: ใช้สำหรับคำนวณค่าที่ได้จาก state อื่น โดยจะ re-compute เฉพาะเมื่อค่าต้นทางเปลี่ยน
เหตุผล: ลด recomposition ที่ไม่จำเป็นและเพิ่มประสิทธิภาพ
คำสั่งใดใช้ควบคุมว่า Composable ตัวไหนควรแสดง UI หรือไม่?
✅ คำตอบ: ใช้ if statement ร่วมกับ state
เหตุผล: Compose ใช้ logic ตามเงื่อนไขปกติของ Kotlin เพื่อควบคุมการแสดงผล
การใช้ LaunchedEffect(key) ต่างจาก SideEffect อย่างไร?
✅ คำตอบ: LaunchedEffect ใช้สำหรับงานที่รันใน coroutine เช่น call API, ส่วน SideEffect ใช้สำหรับงาน side-effect ที่ไม่ต้องรอ
เหตุผล: LaunchedEffect มี coroutine scope, ส่วน SideEffect ไม่มี
ถ้า Composable มีหลาย state ที่ไม่เกี่ยวกัน แต่เปลี่ยน state ใด state หนึ่ง แล้ว Composable ทั้งหมด recompose แก้อย่างไร?
✅ คำตอบ: แยก Composable ออกเป็นหลายส่วนย่อยที่แต่ละส่วน observe state ของตัวเอง
เหตุผล: เพื่อจำกัด scope ของ recomposition ให้เล็กที่สุด
หากใช้ CompositionLocal โดยไม่มีค่า default แล้วเรียกใช้งานจะเกิดอะไร?
✅ คำตอบ: จะเกิด Exception ขณะ runtime
เหตุผล: CompositionLocal ต้องมีค่าตั้งต้นหรือค่า provided อย่างน้อยหนึ่งระดับใน tree
การใช้ snapshotFlow ต่างจากการใช้ collectAsState อย่างไร?
✅ คำตอบ: snapshotFlow ใช้แปลงค่า state ภายใน Compose ไปเป็น Flow เพื่อ observe แบบ reactive
เหตุผล: collectAsState ใช้ Flow → Compose, ส่วน snapshotFlow ใช้ Compose state → Flow
อะไรคือผลกระทบของการใช้ mutableStateListOf แทน mutableListOf ใน UI?
✅ คำตอบ: ทำให้ UI สามารถตรวจจับการเปลี่ยนแปลงของรายการและอัปเดตอัตโนมัติ
เหตุผล: mutableStateListOf เป็น State-aware collection ที่ Compose สามารถ obser