กระทู้่สุด

#1
Kotlin / Coroutines ใน Kotlin: ทำให้การ...
กรทู้ล่าสุด ด Ovtak - ธ.ค 26, 2025, 03:27 หลังเ่ยง
Kotlin นำเสนอโครงสร้างที่ทรงพลังและเบาสำหรับการเขียนโปรแกรมแบบอะซิงโครนัสที่เรียกว่า Coroutines แทนที่จะใช้ callback แบบดั้งเดิม RxJava หรือ Thread คุณสามารถเขียนโค้ดของคุณให้ดูเหมือนซิงโครนัส แต่ทำงานแบบอะซิงโครนัสในเบื้องหลัง ด้วยวิธีนี้ คุณสามารถจัดการการเรียกเครือข่าย การดำเนินการฐานข้อมูล งานที่ใช้เวลานาน และการดำเนินการที่บล็อกได้อย่างง่ายดาย ในบทความนี้ เราจะตรวจสอบแนวคิดพื้นฐานของ coroutines รวมถึง launch, async/await, scope และตัวอย่างการใช้งานทั่วไปอย่างละเอียด

พื้นฐานของ Coroutines
เพื่อใช้ coroutines ก่อนอื่นคุณต้องเพิ่ม dependency (Gradle):
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3"

โครงสร้างพื้นฐาน:
  • Coroutine Scope: จัดการวงจรชีวิตของ coroutines (GlobalScope, lifecycleScope, viewModelScope เป็นต้น)
  • Coroutine Builder: launch (fire-and-forget), async (คืนค่า)
  • Dispatcher: ที่ที่ทำงาน (Main, IO, Default)

ตัวอย่างแรก: launch
import kotlinx.coroutines.*

fun main() {
    GlobalScope.launch(Dispatchers.Main) {
        println("Coroutine เริ่มต้น - Thread: ${Thread.currentThread().name}")
        delay(1000) // การรอแบบไม่บล็อก (ไม่ใช่ sleep!)
        println("1 วินาทีต่อมา")
    }
    println("เธรดหลักดำเนินต่อ")
    Thread.sleep(2000) // บล็อกเธรดหลัก (สำหรับทดสอบ)
}

delay() ไม่บล็อกเธรด แต่เพียงแค่ระงับ coroutine

async และ await
สำหรับการดำเนินการอะซิงโครนัสที่คืนค่า:
GlobalScope.launch(Dispatchers.Main) {
    val sonuc1 = async(Dispatchers.IO) { ağÇağrısı1() }
    val sonuc2 = async(Dispatchers.IO) { ağÇağrısı2() }
    println("รวม: ${sonuc1.await() + sonuc2.await()}")
}

fun ağÇağrısı1(): Int {
    Thread.sleep(1000)
    return 42
}

fun ağÇağrısı2(): Int {
    Thread.sleep(1000)
    return 58
}

การเรียกทั้งสองทำงานแบบขนาน เวลารวมประมาณ 1 วินาที

การใช้งาน Scope และ Context
  • GlobalScope: ทั่วทั้งแอปพลิเคชัน ใช้อย่างระมัดระวัง (เสี่ยง memory leak)
  • lifecycleScope (Android): ผูกกับวงจรชีวิตของ Activity/Fragment
  • viewModelScope (ViewModel): ยกเลิกอัตโนมัติกับ ViewModel

ตัวอย่าง Android:
class MyViewModel : ViewModel() {
    fun veriYukle() {
        viewModelScope.launch {
            try {
                val veri = withContext(Dispatchers.IO) {
                    repository.veriGetir() // อัปเดต UI
                }
            } catch (e: Exception) {
                // จัดการข้อผิดพลาด
            }
        }
    }
}

Structured Concurrency และ Exception Handling

viewModelScope.launch {
    try {
        val job = launch {
            throw Exception("ข้อผิดพลาด!")
        }
        job.join()
    } catch (e: Exception) {
        println("จับได้: ${e.message}")
    }
}

// ด้วย SupervisorJob ข้อผิดพลาดใน coroutine ลูกไม่กระทบ parent
val scope = CoroutineScope(SupervisorJob() + Dispatchers.Main)

Dispatcher ทั่วไป
Dispatcher.Main: การอัปเดต UI (Android)
Dispatcher. IO: เครือข่าย ไฟล์ ฐานข้อมูล
Dispatcher.Default: การดำเนินการที่ใช้ CPU สูง (เช่น sorting เป็นต้น)
Dispatcher.Unconfined: สถานการณ์พิเศษ (สำหรับทดสอบ)

แนวปฏิบัติที่ดีที่สุด
  • ใช้ structured concurrency เสมอ (แทน GlobalScope ใช้ builder ที่มี scope)
  • ใช้ Dispatchers.Main ในเธรด UI
  • ใช้ withContext() เพื่อเปลี่ยนเธรด
  • เพิ่ม try-catch และ CoroutineExceptionHandler สำหรับการจัดการข้อผิดพลาด
  • จัดการการไหลข้อมูลแบบ reactive ด้วย Flow (ระดับสูง)

สรุป
Kotlin coroutines ทำให้การเขียนโปรแกรมแบบอะซิงโครนัสอ่านง่ายและปลอดภัยมากขึ้น
หลุดพ้นจาก callback hell คุณสามารถเขียนโค้ดของคุณให้ดูเหมือนซิงโครนัส เริ่มต้นด้วย launch และ async อย่างง่าย ในโปรเจกต์ Android ดำเนินต่อด้วย lifecycleScope และ viewModelScope
เพื่อฝึกฝน ลองเขียนแอปพลิเคชัน Android ง่ายๆ ที่เรียกเครือข่าย – เช่น แอปพยากรณ์อากาศที่ดึงข้อมูล JSON!
#2
Html / HTML รายการลำดับ: วิธีการสร้าง...
กรทู้ล่าสุด ด Ovtak - ี.ค 29, 2025, 02:11 หลังเ่ยง

ในโลกของการพัฒนาเว็บ การใช้ HTML รายการลำดับ (Ordered Lists) เป็นวิธีที่ยอดเยี่ยมในการแสดงข้อมูลที่มีลำดับขั้นตอนหรือความสำคัญ เช่น รายการขั้นตอนการทำงาน หรือลำดับความสำคัญของสิ่งต่างๆ หากคุณต้องการให้เว็บไซต์ของคุณดูเป็นระเบียบและน่าสนใจ การเรียนรู้ การสร้างลิสต์ใน HTML ด้วยแท็ก <ol> จะช่วยคุณได้มาก บทความนี้จะแนะนำวิธีการสร้างรายการลำดับใน HTML พร้อมตัวอย่างโค้ดที่เข้าใจง่าย

HTML รายการลำดับคืออะไร?
รายการลำดับ (Ordered List) ใน HTML คือรายการที่แสดงรายการข้อมูลโดยมีหมายเลขหรือสัญลักษณ์กำกับตามลำดับ โดยใช้แท็ก <ol> (Ordered List) ร่วมกับแท็ก <li> (List Item) เพื่อระบุแต่ละรายการ คุณสามารถปรับแต่งรูปแบบของหมายเลขได้ตามต้องการ เช่น ตัวเลข (1, 2, 3), ตัวอักษร (A, B, C) หรือเลขโรมัน (I, II, III)

วิธีการสร้าง HTML รายการลำดับ
การสร้างรายการลำดับใน HTML นั้นง่ายมาก เพียงใช้แท็ก <ol> และ <li> ดังตัวอย่างด้านล่าง:

<!DOCTYPE html>
<html lang="th">
<head>
    <meta charset="UTF-8">
    <title>ตัวอย่างรายการลำดับใน HTML</title>
</head>
<body>
    <h1>ขั้นตอนการทำอาหาร</h1>
    <ol>
        <li>เตรียมวัตถุดิบ</li>
        <li>ล้างผักให้สะอาด</li>
        <li>หั่นผักเป็นชิ้นเล็กๆ</li>
        <li>ตั้งกระทะและปรุงอาหาร</li>
    </ol>
</body>
</html>

ผลลัพธ์:
  • เตรียมวัตถุดิบ
  • ล้างผักให้สะอาด
  • หั่นผักเป็นชิ้นเล็กๆ
  • ตั้งกระทะและปรุงอาหาร

คำอธิบาย:
  • <ol> ใช้กำหนดว่านี่คือรายการลำดับ
  • <li> ใช้ระบุแต่ละรายการในลิสต์
  • โดยค่าเริ่มต้น รายการจะแสดงด้วยตัวเลข (1, 2, 3, ...)

การปรับแต่งรูปแบบรายการด้วยแอตทริบิวต์ type
คุณสามารถเปลี่ยนรูปแบบของหมายเลขในรายการลำดับได้โดยใช้แอตทริบิวต์ type ในแท็ก <ol> ตัวอย่างเช่น:

<ol type="A">
    <li>เรียนรู้ HTML</li>
    <li>เรียนรู้ CSS</li>
    <li>เรียนรู้ JavaScript</li>
</ol>

ผลลัพธ์:
A. เรียนรู้ HTML

B. เรียนรู้ CSS

C. เรียนรู้ JavaScript
ตัวเลือกสำหรับ type:
  • type="1" - ตัวเลข (ค่าเริ่มต้น: 1, 2, 3)
  • type="A" - ตัวอักษรพิมพ์ใหญ่ (A, B, C)
  • type="a" - ตัวอักษรพิมพ์เล็ก (a, b, c)
  • type="I" - เลขโรมันพิมพ์ใหญ่ (I, II, III)
  • type="i" - เลขโรมันพิมพ์เล็ก (i, ii, iii)

การกำหนดจุดเริ่มต้นด้วยแอตทริบิวต์ start
หากคุณต้องการให้รายการเริ่มจากหมายเลขอื่นที่ไม่ใช่ 1 สามารถใช้แอตทริบิวต์ start ได้:

<ol start="5">
    <li>ขั้นตอนที่ 5</li>
    <li>ขั้นตอนที่ 6</li>
    <li>ขั้นตอนที่ 7</li>
</ol>

ผลลัพธ์:
5. ขั้นตอนที่ 5

6. ขั้นตอนที่ 6

7. ขั้นตอนที่ 7

การใช้ CSS เพื่อตกแต่งรายการลำดับ
คุณสามารถเพิ่มสไตล์ให้กับรายการลำดับได้โดยใช้ CSS เพื่อให้ดูสวยงามยิ่งขึ้น ตัวอย่างเช่น:

<!DOCTYPE html>
<html lang="th">
<head>
    <meta charset="UTF-8">
    <title>รายการลำดับพร้อมสไตล์</title>
    <style>
        ol {
            color: #2c3e50;
            font-family: Arial, sans-serif;
            line-height: 1.6;
        }
        li {
            background-color: #ecf0f1;
            margin: 5px 0;
            padding: 10px;
        }
    </style>
</head>
<body>
    <h1>รายการสิ่งที่ต้องทำ</h1>
    <ol>
        <li>ตื่นนอนตอนเช้า</li>
        <li>ออกกำลังกาย</li>
        <li>ทำงาน</li>
    </ol>
</body>
</html>

คำอธิบาย:
  • CSS ช่วยปรับสีข้อความ (color), ระยะห่าง (line-height), และพื้นหลังของแต่ละรายการ (background-color)

ข้อดีของการใช้ HTML รายการลำดับ
  • ความชัดเจน - ช่วยให้ผู้อ่านเข้าใจลำดับของข้อมูลได้ง่าย
  • SEO ที่ดีขึ้น - เครื่องมือค้นหาชอบเนื้อหาที่มีโครงสร้างชัดเจน
  • ใช้งานง่าย - รหัส HTML สำหรับรายการลำดับนั้นเรียบง่ายและปรับแต่งได้

สรุป
การสร้าง HTML รายการลำดับ ด้วยแท็ก <ol> และ <li> เป็นวิธีที่สะดวกและมีประสิทธิภาพในการจัดระเบียบข้อมูลบนเว็บไซต์ ไม่ว่าคุณจะใช้เพื่อแสดงขั้นตอน รายการลำดับความสำคัญ หรือข้อมูลอื่นๆ คุณสามารถปรับแต่งรูปแบบได้ด้วยแอตทริบิวต์ type และ start หรือเพิ่มสไตล์ด้วย CSS ลองนำ ตัวอย่างโค้ด HTML ในบทความนี้ไปใช้ในโปรเจกต์ของคุณ แล้วคุณจะเห็นว่ามันช่วยให้เว็บของคุณดูดีและใช้งานง่ายขึ้น!
#3
Php / PHP Regex: การใช้งานและตัวอย่า...
กรทู้ล่าสุด ด Ovtak - ี.ค 29, 2025, 02:08 หลังเ่ยง
ในโลกของการเขียนโปรแกรม PHP Regex (หรือ Regular Expressions) เป็นเครื่องมือที่มีประสิทธิภาพสำหรับการจัดการข้อความ ไม่ว่าจะเป็นการตรวจสอบรูปแบบข้อมูล เช่น อีเมล รหัสไปรษณีย์ หรือการค้นหาและแทนที่ข้อความในสตริง การเรียนรู้ PHP Regex จะช่วยให้คุณทำงานกับข้อมูลได้อย่างยืดหยุ่นและแม่นยำมากขึ้น บทความนี้จะพาคุณไปรู้จักกับการใช้งาน Regex ใน PHP พร้อมตัวอย่างโค้ดที่เข้าใจง่าย

PHP Regex คืออะไร?
Regex หรือชื่อเต็มว่า Regular Expressions คือรูปแบบการเขียนที่ใช้กำหนดแพทเทิร์นของข้อความ เช่น คุณต้องการตรวจสอบว่าสตริงมีตัวเลขกี่ตัว หรือมีคำว่า "สวัสดี" อยู่ในนั้นหรือไม่ ใน PHP คุณสามารถใช้ฟังก์ชัน เช่น preg_match(), preg_replace() และ preg_split() เพื่อทำงานกับ Regex ได้อย่างมีประสิทธิภาพ
การใช้งานพื้นฐานของ PHP Regex
  • preg_match() - ใช้สำหรับตรวจสอบว่าแพทเทิร์นตรงกับสตริงหรือไม่
  • preg_replace() - ใช้สำหรับแทนที่ข้อความที่ตรงกับแพทเทิร์น
  • preg_split() - ใช้สำหรับแยกสตริงตามแพทเทิร์นที่กำหนด
เราจะมาดูตัวอย่างการใช้งานทั้งสามฟังก์ชันนี้กัน

ตัวอย่างโค้ด: การตรวจสอบอีเมลด้วย preg_match()
สมมติว่าคุณต้องการตรวจสอบว่าอีเมลที่ผู้ใช้ป้อนมานั้นถูกต้องตามรูปแบบหรือไม่ ลองดูโค้ดด้านล่างนี้:

<?php
$email
= "[email protected]";
$pattern = "/^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/";

if (
preg_match($pattern, $email)) {
   echo
"อีเมลนี้ถูกต้อง!";
} else {
   echo
"อีเมลไม่ถูกต้อง กรุณาตรวจสอบอีกครั้ง";
}
?>

คำอธิบาย:
  • /^ หมายถึงจุดเริ่มต้นของสตริง
  • [a-zA-Z0-9._-]+ อนุญาตให้ใช้ตัวอักษร ตัวเลข และสัญลักษณ์บางตัวก่อน "@"
  • @ ต้องมีเครื่องหมายนี้ในอีเมล
  • [a-zA-Z0-9.-]+ อนุญาตให้ใช้ตัวอักษรและตัวเลขในชื่อโดเมน
  • \.[a-zA-Z]{2,}$/ ต้องลงท้ายด้วยจุดและตัวอักษรอย่างน้อย 2 ตัว (เช่น .com, .th)

ตัวอย่างโค้ด: การแทนที่ข้อความด้วย preg_replace()
ถ้าคุณต้องการลบคำหยาบหรือแทนที่คำบางคำในข้อความ ลองใช้โค้ดนี้:

<?php
$text
= "สวัสดีครับ วันนี้อากาศไม่ดีเลย";
$pattern = "/ไม่ดี/";
$replacement = "ดีมาก";

$new_text = preg_replace($pattern, $replacement, $text);
echo
$new_text; // ผลลัพธ์: สวัสดีครับ วันนี้อากาศดีมากเลย
?>

คำอธิบาย:
  • $pattern กำหนดคำว่า "ไม่ดี" ที่ต้องการแทนที่
  • $replacement คือคำใหม่ที่เราจะใส่เข้าไปแทน
  • preg_replace() จะค้นหาและแทนที่คำใน $text

ตัวอย่างโค้ด: การแยกสตริงด้วย preg_split()
สมมติว่าคุณมีสตริงที่มีตัวคั่นเป็นเครื่องหมายจุลภาค และต้องการแยกมันออกมาเป็นอาร์เรย์:

<?php
$string
= "มกราคม,กุมภาพันธ์,มีนาคม";
$pattern = "/,/";
$months = preg_split($pattern, $string);

print_r($months);
// ผลลัพธ์:
// Array ( [0] => มกราคม [1] => กุมภาพันธ์ [2] => มีนาคม )
?>

คำอธิบาย:
  • $pattern กำหนดเครื่องหมายจุลภาค (,) เป็นตัวคั่น
  • preg_split() จะแยกสตริงตามแพทเทิร์นและคืนค่าเป็นอาร์เรย์

เคล็ดลับการเขียน PHP Regex ให้มีประสิทธิภาพ
  • ทดสอบแพทเทิร์นก่อนใช้งาน - ใช้เครื่องมือออนไลน์ เช่น regex101.com เพื่อทดสอบแพทเทิร์นของคุณ
  • ระวังการใช้หน่วยความจำ - แพทเทิร์นที่ซับซ้อนเกินไปอาจทำให้โปรแกรมช้าลง
  • เพิ่มคำอธิบายในโค้ด - เพื่อให้คนอื่น (หรือตัวคุณเองในอนาคต) เข้าใจโค้ดได้ง่ายขึ้น

สรุป
PHP Regex เป็นเครื่องมือที่ทรงพลังสำหรับนักพัฒนาที่ต้องการจัดการข้อความอย่างมีประสิทธิภาพ ไม่ว่าจะเป็นการตรวจสอบรูปแบบ การค้นหา หรือการแยกข้อมูล ด้วยฟังก์ชันอย่าง preg_match(), preg_replace() และ preg_split() คุณสามารถทำงานได้หลากหลายตามความต้องการ ลองนำตัวอย่างโค้ดในบทความนี้ไปปรับใช้ในโปรเจกต์ของคุณ แล้วคุณจะเห็นว่าการใช้งาน Regex ใน PHP นั้นง่ายและสะดวกกว่าที่คิด!
หากคุณมีคำถามเพิ่มเติมเกี่ยวกับ การใช้งาน Regex หรือต้องการตัวอย่างโค้ดเพิ่มเติม แจ้งมาได้เลย!
#4
Perl / Perl: ตรวจสอบการมีอยู่ขององค์ป...
กรทู้ล่าสุด ด Ovtak - ก. 08, 2025, 05:33 หลังเ่ยง
#5
Perl / Perl: การแบ่งอาร์เรย์ (คำอธิบา...
กรทู้ล่าสุด ด Ovtak - ก. 08, 2025, 05:32 หลังเ่ยง
#6
Groovy / Groovy: ประเภทข้อมูล (บทเรียนว...
กรทู้ล่าสุด ด Ovtak - ก. 08, 2025, 05:31 หลังเ่ยง
#7
Groovy / Groovy: ตัวแปร (คำอธิบายวิดีโอ...
กรทู้ล่าสุด ด Ovtak - ก. 08, 2025, 05:31 หลังเ่ยง
#8
Golang / สร้างตัวปรับสมดุลการโหลดด้วย G...
กรทู้ล่าสุด ด Ovtak - ก. 08, 2025, 05:30 หลังเ่ยง
#9
Golang / โครงการ GO: โปรเจ็กต์ตัวติดตาม...
กรทู้ล่าสุด ด Ovtak - ก. 08, 2025, 05:29 หลังเ่ยง
#10
Golang / โครงการ GO: เครื่องมือตรวจสอบส...
กรทู้ล่าสุด ด Ovtak - ก. 08, 2025, 05:29 หลังเ่ยง