dino1
dino2
dino3
dino4
dino5
30

Jetpack Compose คือชุดเครื่องมือ UI สำหรับ Android ใช่หรือไม่?

✅ คำตอบ: ใช่, Jetpack compose เป็น UI Toolkit

~~เหตุผล: Jetpack Compose ช่วยให้สามารถสร้าง UI ได้โดยไม่ต้องใช้ XML อีกต่อไป ใช้การเขียนโค้ดใน Kotlin ทั้งหมด~~

30

คำสั่งใดที่ใช้กำหนดว่า function นี้เป็น Composable Function?

✅ คำตอบ: ใช้ annotation @Composable

เหตุผล: เพื่อให้ระบบรู้ว่าฟังก์ชันนั้นใช้สร้าง UI ได้

30

ถ้าต้องการวาง UI element ในแนวตั้งต้องใช้คอมโพเนนต์อะไร?

✅ คำตอบ: ใช้ Column

เหตุผล: Column เป็น layout สำหรับเรียงลูกในแนวตั้ง (vertical)

30

คอมโพเนนต์ใดใช้แสดงรายการแบบเลื่อนขึ้นลงได้?

✅ คำตอบ: LazyColumn

เหตุผล: LazyColumn ช่วยให้แสดงรายการที่ scroll ได้และโหลดเฉพาะรายการที่จำเป็น

30

ต้องการแสดงข้อความควรใช้ Composable ใด?

✅ คำตอบ: Text

เหตุผล: Text เป็นองค์ประกอบพื้นฐานที่ใช้แสดงข้อความใน Compose

50

ฟังก์ชัน remember ใช้ทำอะไรใน Compose?

✅ คำตอบ: ใช้จดจำค่าภายใน Composable ระหว่างการ Recomposition

เหตุผล: ช่วยให้ค่าที่ถูกสร้างครั้งแรกไม่ถูกสร้างซ้ำทุกครั้งที่ UI เปลี่ยนแปลง

50

หากต้องการให้ Composable ขยายเต็มหน้าจอควรใช้ Modifier ใด?

✅ คำตอบ: Modifier.fillMaxSize()

เหตุผล: ทำให้องค์ประกอบขยายให้พอดีกับขนาดของ parent container

50

ฟังก์ชัน rememberCoroutineScope() ใช้สำหรับอะไร?

✅ คำตอบ: สร้าง CoroutineScope ที่ผูกกับ lifecycle ของ Composable

เหตุผล: ใช้เพื่อรันงาน asynchronous ภายใน Composable โดยไม่ต้องใช้ ViewModel

50

วิธีเชื่อม StateFlow เข้ากับ UI ของ Compose คืออะไร?

✅ คำตอบ: ใช้ collectAsState()

เหตุผล: เปลี่ยน StateFlow เป็น State ที่ Composable สามารถ observe ได้

50

Modifier.padding(16.dp) มีผลอย่างไร?

✅ คำตอบ: เพิ่มช่องว่างรอบนอกขององค์ประกอบ

เหตุผล: Padding คือการเว้นพื้นที่จากขอบนอกเข้ามา

70

อะไรคือเหตุผลหลักที่ใช้ key กับรายการใน LazyColumn?

✅ คำตอบ: เพื่อช่วยให้ Compose ระบุตัวตนของรายการแต่ละอัน และเพิ่มประสิทธิภาพในการ Recomposition

เหตุผล: ถ้าไม่กำหนด key อาจเกิดปัญหาการเปลี่ยนข้อมูลผิดตำแหน่งเมื่อรายการเปลี่ยนแปลง

70

หากต้องการนำ xml มาใช่ร่วมกันกับ compose ต้องใช้ Composable ใด ?

✅ คำตอบ: AndroidView

เหตุผล: เป็นสะพานเชื่อมระหว่าง View แบบดั้งเดิมกับโลกของ Compose

70

ถ้า mutableStateOf ถูกประกาศไว้นอก remember จะเกิดผลอย่างไร?

✅ คำตอบ: State จะไม่รอดจากการ Recomposition ทำให้ค่ารีเซ็ตทุกครั้ง

เหตุผล: remember ใช้เก็บ state ให้รอดจากการเรียกซ้ำของ Composable

70

derivedStateOf มีไว้ทำอะไร?

✅ คำตอบ: ใช้สำหรับคำนวณค่าที่ได้จาก state อื่น โดยจะ re-compute เฉพาะเมื่อค่าต้นทางเปลี่ยน

เหตุผล: ลด recomposition ที่ไม่จำเป็นและเพิ่มประสิทธิภาพ

70

คำสั่งใดใช้ควบคุมว่า Composable ตัวไหนควรแสดง UI หรือไม่?

✅ คำตอบ: ใช้ if statement ร่วมกับ state

เหตุผล: Compose ใช้ logic ตามเงื่อนไขปกติของ Kotlin เพื่อควบคุมการแสดงผล

100

การใช้ LaunchedEffect(key) ต่างจาก SideEffect อย่างไร?

✅ คำตอบ: LaunchedEffect ใช้สำหรับงานที่รันใน coroutine เช่น call API, ส่วน SideEffect ใช้สำหรับงาน side-effect ที่ไม่ต้องรอ

เหตุผล: LaunchedEffect มี coroutine scope, ส่วน SideEffect ไม่มี

100

ถ้า Composable มีหลาย state ที่ไม่เกี่ยวกัน แต่เปลี่ยน state ใด state หนึ่ง แล้ว Composable ทั้งหมด recompose แก้อย่างไร?

✅ คำตอบ: แยก Composable ออกเป็นหลายส่วนย่อยที่แต่ละส่วน observe state ของตัวเอง

เหตุผล: เพื่อจำกัด scope ของ recomposition ให้เล็กที่สุด

100

หากใช้ CompositionLocal โดยไม่มีค่า default แล้วเรียกใช้งานจะเกิดอะไร?

✅ คำตอบ: จะเกิด Exception ขณะ runtime

เหตุผล: CompositionLocal ต้องมีค่าตั้งต้นหรือค่า provided อย่างน้อยหนึ่งระดับใน tree

100

การใช้ snapshotFlow ต่างจากการใช้ collectAsState อย่างไร?

✅ คำตอบ: snapshotFlow ใช้แปลงค่า state ภายใน Compose ไปเป็น Flow เพื่อ observe แบบ reactive

เหตุผล: collectAsState ใช้ Flow → Compose, ส่วน snapshotFlow ใช้ Compose state → Flow

100

อะไรคือผลกระทบของการใช้ mutableStateListOf แทน mutableListOf ใน UI?

✅ คำตอบ: ทำให้ UI สามารถตรวจจับการเปลี่ยนแปลงของรายการและอัปเดตอัตโนมัติ

เหตุผล: mutableStateListOf เป็น State-aware collection ที่ Compose สามารถ obser