/ 365วันแห่งโปรแกรม

[365 วันแห่งโปรแกรม #day42] Primitive Data Type

วันที่สี่สิบสองของ ‪#‎365วันแห่งโปรแกรม วันนี้เราจะคุยกันเรื่อง Primitive Data Type


ทุกคนน่าจะเคยได้ยินคำว่า Primitive Data Type กันมาบ้างแล้ว ซึ่งส่วนใหญ่เราก็รู้จักในฐานะที่มันเป็น type ที่ predefined มาโดยภาษษโปรแกรมนั้นๆ เช่น int, char, boolean แล้วจริงๆ Primitive Data Type คืออะไรล่ะ?

Primitive หมายความว่า ดั้งเดิม พื้นฐาน รากฐาน ดังนั้น Primitive Data Type ก็หมายถึง Data Type พื้นฐานนั่นเอง ในความเป็นสิ่งพื้นฐานของมันก็ทำให้มีคุณสมบัติว่า ไม่สามารถแยกออกได้ (อย่างน้อยก็ในเชิงโปรแกรมมิ่ง เราไม่สามารถแบ่ง Primitive Data Type ออกเป็นส่วนย่อยๆ ได้อีก) บางคนอาจจะเถียงว่า Primitive Data Type ก็ประกอบด้วยบิต จริงอยู่ที่เราแบ่งได้ แต่การแบ่งลึกลงไปนั้นเราคงเรียกมันว่า Data Type ไม่ได้อีกแล้ว

เราสร้าง Primitive Data Type เองได้ไหม?

เรื่องนี้เป็นเรื่องที่เราเข้าใจผิดกันเยอะครับ เราเรียนกันมาแค่ว่า Primitive Data Type คือ Data Type ที่ predefined มาโดยภาษาโปรแกรมนั้นๆ เราก็เลยเข้าใจกันไปว่าไม่มีทางสร้าง Primitive Data Type ขึ้นมาใหม่ได้ อย่างที่บอกไปในช่วงแรก เราแบ่งแยก Primitive Data Type ออกจาก Compound Data Type ตรงที่แยกได้หรือแยกไม่ได้ ดังนั้นถ้าเราสามารถสร้าง Data Type ที่แยกออกไม่ได้ มันก็คือ Primitive Data Type ครับ

แล้วมีภาษาไหนที่ยอมให้เราทำแบบนั้นได้ล่ะ? ต้องบอกเลยครับว่าน้อยมาก แต่ก็ไม่ใช่ว่าไม่มี อย่างใน C++ นั้นบอมให้เราสร้าง Type name ใหม่ให้ Type อื่น รวมไปถึง Primitive Data Type ได้ (Alias ของ Primitive Data Type ย่อมเป็น Primitive Data Type) ใน Ada ยอมให้เราสร้าง scalar type ขึ้นมาใหม่ได้

ตัวอย่างที่เห็นชัดเจนใน C++ คือการสร้าง Type สำหรับเก็บไบต์ (ใน C++ ไม่มี Type แบบ Byte อยู่) โดยใช้ unsigned char ซึ่งมีขนาด 1 ไบต์พอดี

typedef unsigned char BYTE;

int main(){
    BYTE a = 255;
    cout << (int)a << endl;
}

===output===
255

จากโค้ดด้านบนเป็นการสร้าง Alias ให้ unsigned char ชื่อว่า BYTE เพื่อใช้สำหรับเก็บข้อมูลขนาด 1 ไบต์ ถึงแม้จะไม่ได้เป็นการสร้าง Data Type ใหม่จริงๆ (ไม่ได้มีการจัดการ infrastructure ของ type ใหม่เอง) แต่ก็นับว่าเป็น Data Type ครับ และเมื่อเราแยกมันออกเป็น Type อื่นไม่ได้อีก มันก็คือ Primitive Data Type

#‎day42 #365วันแห่งโปรแกรม ‪#‎โครงการ365วันแห่ง‬...