ค่าคงที่ (Constants) ในภาษา C#

ค่าคงที่ (Constant) คือ ค่าที่ไม่สามารถเปลี่ยนแปลงได้ระหว่างการทำงานของโปรแกรม (runtime) ในภาษา C# เราประกาศค่าคงที่ด้วยคีย์เวิร์ด const ซึ่งหมายความว่า เมื่อค่าหนึ่งถูกกำหนดเป็น constant แล้ว จะไม่สามารถแก้ไขหรือกำหนดค่าใหม่ให้กับมันได้อีก

กล่าวคือ ค่าคงที่จะถูกกำหนดเพียงครั้งเดียว และใช้ได้ตลอดโปรแกรมโดยไม่สามารถเปลี่ยนค่าได้ ตัวอย่างเช่น

C#
const double PI = 3.14159;
  • const บอกคอมไพเลอร์ว่านี่คือค่าคงที่
  • double ระบุชนิดข้อมูลเป็นตัวเลขทศนิยม
  • PI ชื่อของค่าคงที่
  • 3.14159 ค่าที่ถูกกำหนดแบบตายตัว

หน้าที่ของค่าคงที่ Constants

ค่าคงที่มีบทบาทสำคัญในโครงสร้างโปรแกรม C# ช่วยให้โค้ดมีความน่าเชื่อถือ อ่านง่าย และบำรุงรักษาได้สะดวก โดยเฉพาะในระบบขนาดใหญ่ที่ใช้ค่าซ้ำกันหลายตำแหน่ง หากเปลี่ยนค่าคงที่เพียงจุดเดียว ระบบทั้งหมดจะอัปเดตอัตโนมัติ

หน้าที่หลักของค่าคงที่ ได้แก่

  1. ป้องกันการเปลี่ยนค่าที่สำคัญโดยไม่ตั้งใจ
    ช่วยลดความผิดพลาดของโค้ด เนื่องจากค่าคงที่จะไม่สามารถถูกเปลี่ยนในภายหลังได้
  2. ทำให้โค้ดอ่านง่ายและเข้าใจความหมายได้ชัดเจน
    เช่น ใช้ชื่อ MAX_SCORE แทนค่าตัวเลข 100 เพื่อให้เข้าใจทันทีว่าหมายถึง “คะแนนเต็ม”
  3. ช่วยให้บำรุงรักษาโค้ดง่ายขึ้น
    หากต้องการเปลี่ยนค่า เพียงแก้ที่จุดเดียวในไฟล์ที่ประกาศ constant

ตัวอย่างการประกาศ Constants

ค่าคงที่สามารถใช้ได้กับชนิดข้อมูลพื้นฐานต่าง ๆ เช่น ตัวเลข ทศนิยม และข้อความ เราสามารถประกาศได้ภายในคลาส หรือในระดับ global ก็ได้ ขึ้นอยู่กับการออกแบบระบบ

ค่าคงที่แบบพื้นฐาน

C#
const int MAX_STUDENTS = 50;
const double TAX_RATE = 0.07;
const string APP_NAME = "Student Management System";
  • MAX_STUDENTS ใช้เก็บจำนวนสูงสุดของนักเรียน
  • TAX_RATE ใช้อ้างอิงภาษี
  • APP_NAME เก็บชื่อโปรแกรมแบบตายตัว

การใช้งานค่าคงที่ในคลาส

การเก็บค่าคงที่ไว้ในคลาสช่วยให้จัดระเบียบข้อมูลได้ดี และสามารถเรียกใช้จากทุกส่วนของโปรแกรมโดยไม่ต้องสร้างอ็อบเจ็กต์ใหม่ ช่วยเพิ่มความเป็นระบบและลดความซ้ำซ้อนในโค้ดได้ เช่น

C#
public class MathConstants
{
    public const double PI = 3.141592653589793;
    public const double E = 2.718281828459045;
}
  • public class MathConstants ประกาศคลาสชื่อ MathConstants เพื่อเก็บค่าคงที่ทางคณิตศาสตร์
  • public const double PI ค่าคงที่ของค่าพาย
  • public const double E ค่าคงที่ของเลขอี (ค่าลอการิทึมธรรมชาติ)

การเรียกใช้งาน

ค่าคงที่ const จะเป็น static โดยอัตโนมัติ ซึ่งหมายความว่าไม่ต้องสร้างอ็อบเจ็กต์ของคลาสก็สามารถเข้าถึงได้ เช่น

C#
double circumference = 2 * MathConstants.PI * 10;
Console.WriteLine(circumference);

การใช้ Constants ร่วมกับ Enum

แม้ว่า enum จะไม่ใช่ constant โดยตรง แต่ก็มีแนวคิดคล้ายกัน เพราะค่าภายใน enum จะเป็นค่าตายตัวเช่นกัน เช่น

C#
enum DayOfWeek
{
    Sunday = 0,
    Monday = 1,
    Tuesday = 2,
    Wednesday = 3,
    Thursday = 4,
    Friday = 5,
    Saturday = 6
}
  • enum DayOfWeek ประกาศประเภทข้อมูลใหม่สำหรับวันในสัปดาห์
  • Sunday = 0 ถึง Saturday = 6 กำหนดค่าตัวเลขแทนวัน

การใช้งาน

C#
DayOfWeek today = DayOfWeek.Friday;
Console.WriteLine((int)today); // แสดงค่า 5

ความแตกต่างระหว่าง const และ readonly

ทั้ง const และ readonly ใช้เพื่อประกาศค่าที่ไม่เปลี่ยนแปลง แต่แตกต่างกันในจังหวะการกำหนดค่าและลักษณะการทำงาน

const ใช้สำหรับค่าที่รู้แน่นอนตั้งแต่ตอนคอมไพล์ เช่น ค่าคณิตศาสตร์ ส่วน readonly ใช้เมื่อค่าจะถูกกำหนดในขณะรันโปรแกรม เช่น วันที่ปัจจุบัน หรือการตั้งค่าจากไฟล์คอนฟิก

คุณสมบัติconstreadonly
การกำหนดค่าต้องกำหนดตอนประกาศกำหนดได้ใน Constructor
เวลาใช้งานCompile-timeRuntime
ใช้กับ Objectไม่ได้ได้

ตัวอย่างใช้งานค่าคงที่

โค้ดต่อไปนี้แสดงการใช้ค่าคงที่ในระบบคิดราคาสินค้าแบบมีส่วนลดและภาษี เพื่อให้เห็นการประยุกต์ใช้ในสถานการณ์จริง

C#
namespace MyConsoleApp
{
    internal class Program
    {
        const double DISCOUNT_RATE = 0.10;
        const double TAX_RATE = 0.07;
        static void Main(string[] args)
        {
            double price = 1000;
            double discount = price * DISCOUNT_RATE;
            double tax = (price - discount) * TAX_RATE;
            double total = price - discount + tax;

            Console.WriteLine($"ราคาสินค้า: {price}");
            Console.WriteLine($"ส่วนลด: {discount}");
            Console.WriteLine($"ภาษี: {tax}");
            Console.WriteLine($"ราคารวมสุทธิ: {total}");
        }
    }
}
  • DISCOUNT_RATE และ TAX_RATE ค่าคงที่อัตราส่วนลดและภาษี
  • price ราคาสินค้าตั้งต้น
  • discount = price * DISCOUNT_RATE คำนวณส่วนลด
  • tax = (price - discount) * TAX_RATE คำนวณภาษีหลังหักส่วนลด
  • total = price - discount + tax คำนวณราคารวมสุทธิ
  • Console.WriteLine(...) แสดงผลลัพธ์ทั้งหมด

ผลลัพธ์

ราคาสินค้า: 1000
ส่วนลด: 100
ภาษี: 63
ราคารวมสุทธิ: 963

เคล็ดลับการตั้งชื่อ Constants

  1. ใช้ตัวอักษร พิมพ์ใหญ่ทั้งหมด (UPPER_CASE)
  2. ใช้เครื่องหมาย _ คั่นระหว่างคำ เช่น MAX_SCORE, DEFAULT_TIMEOUT
  3. ตั้งชื่อให้สื่อความหมาย เช่น APP_VERSION, MIN_PASSWORD_LENGTH

การใช้ Constants อย่างถูกต้องใน C# ช่วยให้โค้ดของเรามีมาตรฐานและเข้าใจง่ายขึ้น และยังช่วยป้องกันความผิดพลาดจากการเปลี่ยนค่าที่ไม่ควรถูกเปลี่ยนอีกด้วย ถือเป็นหนึ่งในหลักสำคัญของ Clean Code ที่นักพัฒนาควรฝึกใช้เป็นประจำ

แชร์เรื่องนี้