ค่าคงที่ (Constant) คือ ค่าที่ไม่สามารถเปลี่ยนแปลงได้ระหว่างการทำงานของโปรแกรม (runtime) ในภาษา C# เราประกาศค่าคงที่ด้วยคีย์เวิร์ด const ซึ่งหมายความว่า เมื่อค่าหนึ่งถูกกำหนดเป็น constant แล้ว จะไม่สามารถแก้ไขหรือกำหนดค่าใหม่ให้กับมันได้อีก
กล่าวคือ ค่าคงที่จะถูกกำหนดเพียงครั้งเดียว และใช้ได้ตลอดโปรแกรมโดยไม่สามารถเปลี่ยนค่าได้ ตัวอย่างเช่น
const double PI = 3.14159;constบอกคอมไพเลอร์ว่านี่คือค่าคงที่doubleระบุชนิดข้อมูลเป็นตัวเลขทศนิยมPIชื่อของค่าคงที่3.14159ค่าที่ถูกกำหนดแบบตายตัว
หน้าที่ของค่าคงที่ Constants
ค่าคงที่มีบทบาทสำคัญในโครงสร้างโปรแกรม C# ช่วยให้โค้ดมีความน่าเชื่อถือ อ่านง่าย และบำรุงรักษาได้สะดวก โดยเฉพาะในระบบขนาดใหญ่ที่ใช้ค่าซ้ำกันหลายตำแหน่ง หากเปลี่ยนค่าคงที่เพียงจุดเดียว ระบบทั้งหมดจะอัปเดตอัตโนมัติ
หน้าที่หลักของค่าคงที่ ได้แก่
- ป้องกันการเปลี่ยนค่าที่สำคัญโดยไม่ตั้งใจ
ช่วยลดความผิดพลาดของโค้ด เนื่องจากค่าคงที่จะไม่สามารถถูกเปลี่ยนในภายหลังได้ - ทำให้โค้ดอ่านง่ายและเข้าใจความหมายได้ชัดเจน
เช่น ใช้ชื่อMAX_SCOREแทนค่าตัวเลข 100 เพื่อให้เข้าใจทันทีว่าหมายถึง “คะแนนเต็ม” - ช่วยให้บำรุงรักษาโค้ดง่ายขึ้น
หากต้องการเปลี่ยนค่า เพียงแก้ที่จุดเดียวในไฟล์ที่ประกาศ constant
ตัวอย่างการประกาศ Constants
ค่าคงที่สามารถใช้ได้กับชนิดข้อมูลพื้นฐานต่าง ๆ เช่น ตัวเลข ทศนิยม และข้อความ เราสามารถประกาศได้ภายในคลาส หรือในระดับ global ก็ได้ ขึ้นอยู่กับการออกแบบระบบ
ค่าคงที่แบบพื้นฐาน
const int MAX_STUDENTS = 50;
const double TAX_RATE = 0.07;
const string APP_NAME = "Student Management System";MAX_STUDENTSใช้เก็บจำนวนสูงสุดของนักเรียนTAX_RATEใช้อ้างอิงภาษีAPP_NAMEเก็บชื่อโปรแกรมแบบตายตัว
การใช้งานค่าคงที่ในคลาส
การเก็บค่าคงที่ไว้ในคลาสช่วยให้จัดระเบียบข้อมูลได้ดี และสามารถเรียกใช้จากทุกส่วนของโปรแกรมโดยไม่ต้องสร้างอ็อบเจ็กต์ใหม่ ช่วยเพิ่มความเป็นระบบและลดความซ้ำซ้อนในโค้ดได้ เช่น
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 โดยอัตโนมัติ ซึ่งหมายความว่าไม่ต้องสร้างอ็อบเจ็กต์ของคลาสก็สามารถเข้าถึงได้ เช่น
double circumference = 2 * MathConstants.PI * 10;
Console.WriteLine(circumference);การใช้ Constants ร่วมกับ Enum
แม้ว่า enum จะไม่ใช่ constant โดยตรง แต่ก็มีแนวคิดคล้ายกัน เพราะค่าภายใน enum จะเป็นค่าตายตัวเช่นกัน เช่น
enum DayOfWeek
{
Sunday = 0,
Monday = 1,
Tuesday = 2,
Wednesday = 3,
Thursday = 4,
Friday = 5,
Saturday = 6
}enum DayOfWeekประกาศประเภทข้อมูลใหม่สำหรับวันในสัปดาห์Sunday = 0ถึงSaturday = 6กำหนดค่าตัวเลขแทนวัน
การใช้งาน
DayOfWeek today = DayOfWeek.Friday;
Console.WriteLine((int)today); // แสดงค่า 5ความแตกต่างระหว่าง const และ readonly
ทั้ง const และ readonly ใช้เพื่อประกาศค่าที่ไม่เปลี่ยนแปลง แต่แตกต่างกันในจังหวะการกำหนดค่าและลักษณะการทำงาน
const ใช้สำหรับค่าที่รู้แน่นอนตั้งแต่ตอนคอมไพล์ เช่น ค่าคณิตศาสตร์ ส่วน readonly ใช้เมื่อค่าจะถูกกำหนดในขณะรันโปรแกรม เช่น วันที่ปัจจุบัน หรือการตั้งค่าจากไฟล์คอนฟิก
| คุณสมบัติ | const | readonly |
|---|---|---|
| การกำหนดค่า | ต้องกำหนดตอนประกาศ | กำหนดได้ใน Constructor |
| เวลาใช้งาน | Compile-time | Runtime |
| ใช้กับ Object | ไม่ได้ | ได้ |
ตัวอย่างใช้งานค่าคงที่
โค้ดต่อไปนี้แสดงการใช้ค่าคงที่ในระบบคิดราคาสินค้าแบบมีส่วนลดและภาษี เพื่อให้เห็นการประยุกต์ใช้ในสถานการณ์จริง
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
- ใช้ตัวอักษร พิมพ์ใหญ่ทั้งหมด (UPPER_CASE)
- ใช้เครื่องหมาย
_คั่นระหว่างคำ เช่นMAX_SCORE,DEFAULT_TIMEOUT - ตั้งชื่อให้สื่อความหมาย เช่น
APP_VERSION,MIN_PASSWORD_LENGTH
การใช้ Constants อย่างถูกต้องใน C# ช่วยให้โค้ดของเรามีมาตรฐานและเข้าใจง่ายขึ้น และยังช่วยป้องกันความผิดพลาดจากการเปลี่ยนค่าที่ไม่ควรถูกเปลี่ยนอีกด้วย ถือเป็นหนึ่งในหลักสำคัญของ Clean Code ที่นักพัฒนาควรฝึกใช้เป็นประจำ
