ค่าคงที่

15 August 2016

ในบทนี้ คุณจะได้เรียนรู้เกี่ยวกับค่าคงที่ (constants) ในภาษา Java ตั้งแต่วิธีการประกาศค่าคงที่ การใช้งาน ประโยชน์และข้อได้เปรียบของการใช้งานค่าคงที่ และเรียนรู้เกี่ยวกับคำสั่ง final ที่สามารถใช้กับค่าคงที่และอื่นๆ

ค่าคงที่ คืออะไร

ค่าคงที่ คือตัวแปรที่ใช้อ้างอิงข้อมูลของค่าๆ หนึ่งที่ไม่ถูกเปลี่ยนแปลง และไม่สามารถเปลี่ยนแปลงได้ การใช้ค่าคงที่นั้นมีประโยชน์ในการเขียนโปรแกรม มันสามารถทำเข้าใจได้ว่าตัวแปรหรือค่านั้นหมายถึงอะไร ยกตัวอย่างเช่น เมื่อเราอยากจะบอกถึงแรงโน่มถวงของโลก เรามักจะพูดว่าค่า g (gravity) เรามักจะไม่พูดว่าค่า 9.8 ถึงแม้ว่ามันมีค่าเท่ากับ 9.8 ก็ตาม แนวคิดนี้ได้นำมาใช้สำหรับการสร้างค่าคงที่ในการเขียนโปรแกรมภาษา Java เช่นกัน

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

final dataType constantName = value;

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

สร้างและใช้งานค่าคงที่ในภาษา Java

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

Constant.java
public class Constant {

    public static void main (String[] args) {
        final float PI = 3.14f;

        int r = 8;

        System.out.println("Circle with radius: " + r );
        System.out.println("Area = " + (PI * r  * r ));
        System.out.println("Circumference = " + (2 * PI * r ));
        System.out.println("Volume = " + (4.0f / 3.0f * PI * r  * r  * r));
        System.out.println("Surface Area = " + (4.0f * PI * r  * r ));

        r = 10;

        System.out.println("\nCircle with radius: " + r );
        System.out.println("Area = " + (PI * r  * r ));
        System.out.println("Circumference = " + (2 * PI * r ));
        System.out.println("Volume = " + (4.0f / 3.0f * PI * r  * r  * r));
        System.out.println("Surface Area = " + (4.0f * PI * r  * r ));
    } 

}

ในตัวอย่างด้านบน เราได้ประกาศตัวแปรค่าคงที่ในคำสั่ง final float PI = 3.14f; โดยตัวแปรนี้เก็บค่า floating-point ของค่า PI เพื่อนำไปใช้ในการคำนวณหารายละเอียดของวงกลม เราสามารถใช้ identifier PI แทนค่า 3.14 ได้ทั้งหมด และผลลัพธ์ของโปรแกรมด้านล่าง

Circle with radius: 8
Area = 200.96
Circumference = 50.24
Volume = 2143.5735
Surface Area = 803.84

Circle with radius: 10
Area = 314.0
Circumference = 62.800003
Volume = 4186.667
Surface Area = 1256.0

ครั้งต่อไปคุณคิดว่ามันไม่ละเอียดเพียงพอ คุณสามารถเปลี่ยนค่าของ PI ได้ที่เดียว โดยเปลี่ยนแค่เป็น final float PI = 3.14159f; ค่า PI และค่าของ PI ทั้งหมดจะเปลี่ยนไป และจะได้ผลลัพธ์ดังนี้ ซึ่งขึ้นกับค่า PI ของคุณ

Circle with radius: 8
Area = 201.06177
Circumference = 50.26544
Volume = 2144.659
Surface Area = 804.2471

Circle with radius: 10
Area = 314.159
Circumference = 62.831802
Volume = 4188.787
Surface Area = 1256.636

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

Constant2.java
import java.util.Scanner;

public class Constant2 {    

    public static void main(String[] args) {
        final int SIZE = 10;
        int[] n = new int[SIZE];

        Scanner reader = new Scanner(System.in);

        for (int i = 0; i < SIZE; i++) {
            System.out.print("n[" + i + "] = ");
            n[i] = reader.nextInt();
        }

        System.out.print(SIZE  + " numbers in array: ");
        for (int i = 0; i < SIZE; i++) {
            System.out.print(n[i] + ", ");
        }      
    }

}

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

final int SIZE = 10;
int[] n = new int[SIZE];

ในตอนแรกของโปรแกรม เราได้ทำการประกาศค่าคงที่ SIZE ซึ่งมีค่าเท่ากับ 10 และนำไปสร้างอาเรย์ตามขนาดของค่าคงที่ที่กำหนด

Scanner reader = new Scanner(System.in);

ในคำสั่งนี้ เป็นการประกาศออบเจ็คสำหรับการรับค่าด้วยคลาส Scanner ซึ่งเราจะใช้รับค่าจากคีย์บอร์ดลงไปในอาเรย์ที่ได้สร้างขึ้น คลาสนี้มีหน้าที่จัดการเกี่ยวกับการรับค่าทาง Stream เช่น คีย์บอร์ด

for (int i = 0; i < SIZE; i++) {
    System.out.print("n[" + i + "] = ");
    n[i] = reader.nextInt();
}

System.out.print(SIZE  + " numbers in array: ");
for (int i = 0; i < SIZE; i++) {
    System.out.print(n[i] + ", ");
}

ต่อมาเราได้ใช้คำสั่ง For loop ในการวนอ่านค่าตามจำนวนของค่าคงที่ SIZE โปรแกรมจะทำการอ่านค่าตัวเลขลงในอาเรย์จนครับ เมธอด nextInt() เป็นเมธอดสำหรับการอ่านค่าของ Integer และหลังจากนั้นเราได้แสดงผลข้อมูลในอาเรย์โดยการใช้คำสั่ง For loop เช่นเดียวกัน

n[0] = 10
n[1] = 23
n[2] = 35
n[3] = 18
n[4] = 5
n[5] = 82
n[6] = 43
n[7] = 54
n[8] = 20
n[9] = 92
10 numbers in array: 10, 23, 35, 18, 5, 82, 43, 54, 20, 92,

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

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

คำสั่ง final

คำสั่ง final หรือ final modifier นั้น นอกจากจะใช้กับตัวแปรแล้ว ยังใช้เกี่ยวกับการเขียนโปรแกรมแบบออบเจ็คด้วย โดยเมื่อใช้

  • final กับ method จะทำให้ method ไม่สามารถ override (การเขียนทับ) ได้โดย sub class
  • final กับ class จะทำให้ class นั้นไม่สามารถสือบทอด inherit ได้
final class NoInherit {
    final void noOverride () {
        ...
    }
} 

ข้างบนเป็นตัวอย่างของคลาสและเมธอด ที่ใช้คำสั่ง final ในการสร้าง อย่างไรก็ตาม คุณจะเรียนเกี่ยวกับการโปรแกรมแบบออบเจ็คในภายหลัง มันเป็นพื้นฐานของภาษา Java และสำคัญที่คุณจะต้องรู้

ในบทนี้ คุณได้เรียนรู้เกี่ยวกับค่าคงที่ การสร้างและประโยชน์ในการใช้ของมันในภาษา Java และรู้จักเกี่ยวกับการใช้คำสั่ง fina

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