ค่าคงที่

8 September 2015

ค่าคงที่ (Constant) เป็นตัวแปรประเภทหนึ่งที่ไม่สามารถเปลี่ยนแปลงค่าได้ในขณะที่โปรแกรมทำงาน นั่นหมายความว่าเราจะต้องกำหนดค่าให้ตัวแปรในเวลาที่คอมไพเลอร์ทำงาน หรือในตอนแรกที่เราสร้างตัวแปรค่าคงที่ขึ้นมา ค่าคงที่ที่เราใช้กันบ่อยๆ นั้นเรียกว่า Literal ซึ่ง Literal สามารถแบ่งแยกได้เป็น Integer, Floating-point, Characters, Strings, Boolean, Pointers และค่าคงที่ที่ผู้ใช้สร้างขึ้นเอง

Typed constant

ในการประกาศค่าคงที่ในภาษา C++ นั้นเหมือนกันกับการประกาศตัวแปร แต่สำหรับการประกาศค่าคงที่นั้นจะมีคำสั่ง const เพิ่มเข้ามาข้างหน้า นี่เป็นรูปแบบของการประกาศค่าคงที่ในภาษา C++

const data_type identifier = value;

เราสามารถประกาศค่าคงที่โดยการตั้งชื่อและกำหนดค่าให้กับมันในตอนที่เราประกาศตัวค่าคงที่เสมอ หลังจากนั้นเราสามารถเรียกใช้ตัวแปรค่าคงที่โดยใช้ชื่อของมันได้ในโปรแกรม ชนิดของตัวแปรประเภทค่าคงที่นั้นเหมือนกับตัวแปรปกติ ซึ่งจะมี Integer, Floating-point, Characters, Strings, Boolean, Pointers มาดูตัวอย่าง

const int LENGTH= 100;
const double PI = 3.1415926;
const char N = 'a';

ในตัวอย่าง เราได้ทำการประกาศค่าคงที่สามตัว ค่าคงที่แรกชื่อว่า LENGTH ซึ่งเป็นค่าคงแบบ int และค่าคงที่ที่สองชื่อว่า PI ซึ่งเป็นค่าคงแบบ float และค่าคงที่สุดท้าย N ซึ่งเป็นค่าคงที่แบบ char การตั้งชื่อให้กับค่าคงที่นั้นนิยมใช้ตัวพิมพ์ใหญ่ทั้งหมดและคั่นด้วยเครื่องหมาย Underscore (_) หากเป็นชื่อที่ยาว ต่อไปเป็นตัวอย่างการใช้งานค่าคงที่ในการเขียนโปรแกรมในภาษา C++

#include <iostream>

using namespace std;

int main()
{
    const float PI = 3.14f;

    int r1 = 3;
    int r2 = 5;
    int r3 = 10;

    cout << "Area of circle 1 is " << (PI * r1 * r1) << endl;
    cout << "Area of circle 2 is " << (PI * r2 * r2) << endl;
    cout << "Area of circle 3 is " << (PI * r3 * r3) << endl;

    cout << "Circumstance of circle 1 is " << (2 * PI * r1) << endl;
    cout << "Circumstance of circle 2 is " << (2 * PI * r2) << endl;
    cout << "Circumstance of circle 3 is " << (2 * PI * r3) << endl;

    return 0;
}

ในตัวอย่าง เป็นโปรแกรมในการหาพื้นที่และเส้นรอบวงของวงกลม เรามีค่าคงที่ PI ซึ่งเก็บค่าคงที่ทางคณิตศาสตร์ที่เป็นสัดส่วนระหว่างเส้นรอบวงและเส้นผ่านศูนย์กลางของวงกลม และเรามีตัวแปร r1 r2 และ r3 ที่เก็บรัศมีของวงกลมสามวงตามลำดับ

ในตัวอย่างคุณจะเห็นประโยชน์ของการใช้งานค่าคงที่คือ เป็นการทำให้ตัวแปรนั้นมีความหมายมากขึ้น คุณสามารถอ้างถึงค่า 3.14f โดยการใช้ PI แทน ซึ่งจะช่วยลดความผิดพลาดในการเขียนโปรแกรมและทำให้โปรแกรมของคุณเข้าใจง่ายมากขึ้น ซึ่งโดยทั่วไปแล้วค่าคงที่นั้นจะนิยมตั้งชื่อโดยใช้ตัวใหญ่ทั้งหมด ทำให้มันสังเกตุได้ง่ายจากตัวแปรปกติ

Area of circle 1 is 28.26
Area of circle 2 is 78.5
Area of circle 3 is 314
Circumstance of circle 1 is 18.84
Circumstance of circle 2 is 31.4
Circumstance of circle 3 is 62.8

นี่เป็นผลลัพธ์การทำงานของโปรแกรมในการใช้งานค่าคงที่ในภาษา C++ และเพื่อให้คุณเข้าใจกับการใช้งานค่าคงที่มากขึ้นมาดูตัวอย่างเพิ่มเติม กับโปรแกรมการเดินทางของยานอวกาศ

#include <iostream>

using namespace std;

int main()
{
    const float SPEED = 182305.92f; // mph

    cout << "Spacecraft can travel in space with average speed at " << SPEED << " mph." << endl;
    cout << "How far does it move in 1 second: " << (1 * SPEED / 3600.f) << " miles." << endl;
    cout << "How far does it move in 1 minute: " << (60 * SPEED / 3600.f) << " miles." << endl;
    cout << "How far does it move in 1 hour: " << (3600 * SPEED / 3600.f) << " miles." << endl;
    cout << "How far does it move in 1 day: " << (86400 * SPEED / 3600.f) << " miles." << endl;
    cout << "How far does it move in 1 month: " << (86400 * 30 * SPEED / 3600.f) << " miles." << endl;
    cout << "How far does it move in 1 year: " << (86400 * 365 * SPEED / 3600.f) << " miles." << endl;

    cout << "How long does it take from the earth to the moon: " << (238855.086 / SPEED) << " hours." << endl;
    cout << "How long does it take from the earth to the sun: " << (92.95713e6 / SPEED / 24) << " days." << endl;
    cout << "How long does it take to travel in 1 light year: " << (5.8786e12 / SPEED / 24 / 365) << " years." << endl;

    return 0;
}

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

Spacecraft can travel in space with average speed at 182306 mph.
How far does it move in 1 second: 50.6405 miles.
How far does it move in 1 minute: 3038.43 miles.
How far does it move in 1 hour: 182306 miles.
How far does it move in 1 day: 4.37534e+006 miles.
How far does it move in 1 month: 1.3126e+008 miles.
How far does it move in 1 year: 1.597e+009 miles.
How long does it take from the earth to the moon: 1.31019 hours.
How long does it take from the earth to the sun: 21.2457 days.
How long does it take to travel in 1 light year: 3681.03 years.

นี่เป็นผลลัพธ์การทำงานของโปรแกรม

Preprocessor definitions

ในการเขียนโปรแกรมในภาษา C++ มีอีกทางหนึ่งในการประกาศค่าคงที่คือการใช้ Processor definitions โดยมีรูปแบบดังนี้

 #define identifier replacement 

โดยใช้คำสั่ง #define ตามด้วยชื่อของค่าคงที่ identifier และตามด้วยค่าของมัน replacement ค่านี้สามารถเป็น Literal ของ Primitive datatype ใดๆ ซึ่งคำสั่งนี้จะถูกประมวลผลโดย Preprocessor และเกิดขึ้นในตอนที่โปรแกรมคอมไพล์ และมันไม่จำเป็นต้องจบด้วยเครื่องหมายเซมิโคลอน นี่เป็นตัวอย่างสำหรับการใช้วิธีนี้

#define PI 3.14159
#define NAME 'Mateo'

ตอนนี้ เราสามารถใช้ค่าคงที่ที่เราเพิ่งได้สร้าง โดยการใช้ชื่อของมัน

#include <iostream>

#define PI 3.14159
#define NAME "Mateo"

using namespace std;

int main()
{
    cout << "Pi is " << PI << endl;
    cout << "Name is " << NAME ;
    return 0;
}

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

#include <iostream>

#define SIZE 10

using namespace std;

int number[SIZE];

int main()
{
    for (int i = 0; i < SIZE; i++)
    {
        cout << "Enter number " << (i + 1) << ": ";
        cin >> number[i];
    }

    cout << "Numbers in array: ";
    for (int i = 0; i < SIZE; i++)
    {
        cout << number[i] << ", ";
    }

    return 0;
}

ในตัวอย่าง เป็นโปรแกรมสำหรับรับตัวเลข 10 ตัวเก็บไว้ในอาเรย์ และแสดงผลตัวเลขเหล่านั้นออกมาทางหน้าจอ เราได้ประกาศค่าคงที่ในตัวแปร SIZE เมื่อโปรแกรมทำงานคอมไพเลอร์จะทำการแทนที่ทุกที่ที่มี SIZE เป็น 10 ซึ่งมันมีผลกับการที่คุณเขียน 10 ลงไปในโค้ดโดยตรง แต่การเขียนโดยตรงนั้นจะทำให้คุณสับสนและอาจจะเกิดความผิดพลาดได้มาก และในกรณีที่คุณต้องการเปลี่ยนขนาดของอาเรย์เป็น 20 คุณสามารถเปลี่ยนได้โดยเปลี่ยนเป็น #define SIZE 20

Enter number 1: 2
Enter number 2: 5
Enter number 3: 3
Enter number 4: 2
Enter number 5: 7
Enter number 6: 0
Enter number 7: 7
Enter number 8: 2
Enter number 9: 3
Enter number 10: 6
Numbers in array: 2, 5, 3, 2, 7, 0, 7, 2, 3, 6,

นี่เป็นผลลัพธ์การทำงานของโปรแกรม เราได้กรอกตัวเลข 10 จำนวนลงไปในอาเรย์และแสดงผลออกมา

ในบทนี้ คุณรู้จักและเรียนรู้เกี่ยวกับค่าคงที่ในภาษา C++ เราได้พูดถึงวิธีการประกาศและการใช้งานค่าคงที่ รวมทั้งคุณได้ทราบถึงประโยชน์ในการใช้งานค่าคงที่ และสถานการณ์ของการเขียนโปรแกรมที่จำเป็นต้องใช้ค่าคงที่ และเราได้พูกถึงการใช้งานค่าคงที่แบบ Preprocessor definitions

บทความนี้เป็นประโยชน์หรือไม่?Yes·No