อ่าน 7 นาที
ประเภทข้อมูล
ใน วิทยาการคอมพิวเตอร์ และ การเขียนโปรแกรมคอมพิวเตอร์ ประเภท ข้อมูล (หรือเรียกสั้น ๆ ว่า ประเภท ) คือชุดหรือการจัดกลุ่มของ ค่าข้อมูล ซึ่งโดยปกติจะระบุโดยชุดของค่าที่เป็นไปได้...
ประเภทข้อมูล

ในวิทยาการคอมพิวเตอร์และการเขียนโปรแกรมคอมพิวเตอร์ประเภทข้อมูล (หรือเรียกสั้น ๆ ว่าประเภท ) คือชุดหรือการจัดกลุ่มของค่าข้อมูลซึ่งโดยปกติจะระบุโดยชุดของค่าที่เป็นไปได้ ชุดของการดำเนินการที่อนุญาตบนค่าเหล่านี้ และ/หรือการแสดงค่าเหล่านี้ในรูปของประเภทเครื่อง[ 1 ]การกำหนดประเภทข้อมูลในโปรแกรมจะจำกัดค่าที่เป็นไปได้ที่นิพจน์เช่นตัวแปรหรือการเรียกฟังก์ชัน อาจรับได้ สำหรับข้อมูลตัวอักษร จะบอกคอมไพเลอร์หรือตัวแปลภาษาว่าโปรแกรมเมอร์ตั้งใจจะใช้ข้อมูลอย่างไร ภาษาโปรแกรมส่วนใหญ่รองรับประเภทข้อมูลพื้นฐานของจำนวนเต็ม (ที่มีขนาดแตกต่างกัน) จำนวน ทศนิยม (ซึ่งประมาณค่าจำนวนจริง ) อักขระและบูลีน[ 2 ] [ 3 ]
แนวคิด
อาจมีการระบุประเภทข้อมูลด้วยเหตุผลหลายประการ เช่น ความคล้ายคลึง ความสะดวก หรือเพื่อเน้นความสนใจ บ่อยครั้งที่เป็นเรื่องของการจัดระเบียบที่ดีซึ่งช่วยให้เข้าใจคำจำกัดความที่ซับซ้อนได้ ภาษาโปรแกรมเกือบทั้งหมดรวมแนวคิดของประเภทข้อมูลไว้อย่างชัดเจน แม้ว่าประเภทข้อมูลที่เป็นไปได้มักจะถูกจำกัดด้วยข้อพิจารณาด้านความเรียบง่าย ความสามารถในการคำนวณ หรือความสม่ำเสมอ การประกาศประเภทข้อมูลอย่างชัดเจนมักจะช่วยให้คอมไพเลอร์สามารถเลือกการแสดงผลเครื่องจักรที่มีประสิทธิภาพได้ แต่ไม่ควรละเลยการจัดระเบียบเชิงแนวคิดที่นำเสนอโดยประเภทข้อมูล[ 4 ]
ภาษาโปรแกรมที่แตกต่าง กันอาจใช้ชนิดข้อมูลที่แตกต่างกันหรือชนิดข้อมูลที่คล้ายกันแต่มีความหมายต่างกัน ตัวอย่างเช่น ในภาษาโปรแกรม Pythonintแสดงถึงจำนวนเต็มที่มีความแม่นยำสูงซึ่งมีการดำเนินการทางคณิตศาสตร์แบบดั้งเดิม เช่น การบวก การลบ และการคูณ อย่างไรก็ตาม ในภาษาโปรแกรม Javaชนิดข้อมูลนี้intแสดงถึงเซตของจำนวนเต็ม32 บิต ที่มีค่าตั้งแต่ −2,147,483,648 ถึง 2,147,483,647 โดยมีการดำเนินการทางคณิตศาสตร์ที่วนซ้ำเมื่อเกิดการโอเวอร์โฟลว์ในRustชนิดข้อมูลจำนวนเต็ม 32 บิตนี้แสดงด้วยและจะเกิดข้อผิดพลาดเมื่อเกิดการโอเวอร์โฟลว์ในโหมดดีบัก[ 5 ]i32
ภาษาโปรแกรมส่วนใหญ่ยังอนุญาตให้โปรแกรมเมอร์กำหนดชนิดข้อมูลเพิ่มเติมได้ โดยปกติแล้วจะทำได้โดยการรวมองค์ประกอบหลายอย่างจากชนิดข้อมูลอื่น ๆ และกำหนดการดำเนินการที่ถูกต้องของชนิดข้อมูลใหม่นั้น ตัวอย่างเช่น โปรแกรมเมอร์อาจสร้างชนิดข้อมูลใหม่ชื่อ " จำนวนเชิงซ้อน " ซึ่งจะรวมส่วนจริงและส่วนจินตนาการ หรือชนิดข้อมูลสีที่แสดงด้วยไบต์ สามไบต์ ที่ระบุปริมาณของสีแดง สีเขียว และสีน้ำเงิน และสตริงที่แสดงชื่อของสีนั้น ๆ
ชนิดข้อมูลถูกใช้ภายในระบบชนิดข้อมูลซึ่งมีวิธีการต่างๆ ในการกำหนด การใช้งาน และการนำไปใช้ ในระบบชนิดข้อมูล ชนิดข้อมูลแสดงถึงข้อจำกัดที่วางไว้บนการตีความข้อมูล โดยอธิบายถึงการแสดง การตีความ และโครงสร้างของค่าหรือวัตถุที่จัดเก็บในหน่วยความจำคอมพิวเตอร์ ระบบชนิดข้อมูลใช้ข้อมูลชนิดข้อมูลเพื่อตรวจสอบความถูกต้องของโปรแกรมคอมพิวเตอร์ที่เข้าถึงหรือจัดการข้อมูลคอมไพเลอร์อาจใช้ชนิดข้อมูลแบบคงที่ของค่าเพื่อเพิ่มประสิทธิภาพการจัดเก็บที่ต้องการและการเลือกอัลกอริทึมสำหรับการดำเนินการกับค่า ในคอมไพเลอร์ภาษาซีfloat หลายๆ ตัว ชนิดข้อมูล ตัวอย่างเช่น จะถูกแสดงใน 32 บิตตามข้อกำหนดของ IEEE สำหรับเลขทศลอยความแม่นยำเดี่ยว ดังนั้นจึงจะใช้ การดำเนินการของไมโครโปรเซสเซอร์เฉพาะสำหรับเลขทศลอยกับค่าเหล่านั้น (การบวก การคูณ ฯลฯ)
คำนิยาม
Parnas, Shore & Weiss (1976)ได้ระบุคำจำกัดความของ "ประเภท" ไว้ห้าประการ ซึ่งถูกนำมาใช้ในเอกสารทางวิชาการในบางครั้งโดยปริยาย:
- ไวยากรณ์
- ประเภท (Type) คือ ป้ายกำกับ ทางไวยากรณ์ ล้วนๆ ที่เกี่ยวข้องกับตัวแปรเมื่อมีการประกาศตัวแปรนั้น แม้ว่าจะมีประโยชน์สำหรับระบบประเภทขั้นสูง เช่นระบบประเภทเชิงโครงสร้างย่อย (substructural type systems ) แต่ คำจำกัดความดังกล่าวไม่ได้ให้ความหมายที่เข้าใจง่ายเกี่ยวกับประเภทเหล่านั้น
- การเป็นตัวแทน
- ประเภทหนึ่งๆ จะถูกกำหนดโดยการประกอบขึ้นจากประเภทพื้นฐานที่เล็กกว่า ซึ่งมักจะเป็นประเภทเครื่องจักร
- การแสดงออกและพฤติกรรม
- ประเภทข้อมูลถูกกำหนดโดยการแสดงผลของข้อมูลนั้น ๆ และชุดของตัวดำเนินการที่ใช้ในการจัดการการแสดงผลเหล่านั้น
- พื้นที่คุณค่า
- ประเภทคือเซตของค่าที่เป็นไปได้ที่ตัวแปรสามารถมีได้ คำจำกัดความดังกล่าวทำให้สามารถพูดถึงการรวมกัน ( ที่ไม่ซ้ำกัน ) หรือผลคูณคาร์ทีเซียนของประเภทได้
- คุณค่าของพื้นที่และพฤติกรรม
- ประเภท คือ เซตของค่าที่ตัวแปรสามารถมีได้ และเซตของฟังก์ชันที่สามารถนำมาใช้กับค่าเหล่านั้นได้
การกำหนดนิยามในแง่ของการแสดงผล มักทำในภาษาเชิงคำสั่ง เช่นALGOLและPascalในขณะที่การกำหนดนิยามในแง่ของพื้นที่ค่าและพฤติกรรม ใช้ในภาษาระดับสูง เช่นSimulaและCLUประเภทที่รวมถึงพฤติกรรมนั้นสอดคล้องกับแบบจำลองเชิงวัตถุ มากกว่า ในขณะที่แบบจำลอง การเขียนโปรแกรมเชิงโครงสร้างมักจะไม่รวมโค้ด และเรียกว่า โครงสร้างข้อมูล แบบ ธรรมดา
การจำแนกประเภท
ประเภทของข้อมูลสามารถจำแนกได้ตามปัจจัยหลายประการ:
- ชนิดข้อมูลพื้นฐานหรือชนิดข้อมูลในตัวคือชนิดข้อมูลที่ถูกสร้างขึ้นมาในระบบของภาษาส่วนชนิดข้อมูลที่ผู้ใช้กำหนดเองนั้นไม่ใช่ชนิดข้อมูลพื้นฐาน ตัวอย่างเช่น ชนิดข้อมูลตัวเลขของ Java เป็นชนิดข้อมูลพื้นฐาน ในขณะที่คลาสเป็นชนิดข้อมูลที่ผู้ใช้กำหนดเอง
- ค่าของประเภทอะตอมิกคือรายการข้อมูลเดียวที่ไม่สามารถแยกออกเป็นส่วนประกอบได้ ค่าของประเภทคอมโพสิต หรือประเภทรวมคือชุดของรายการข้อมูลที่สามารถเข้าถึงได้ทีละรายการ[ 6 ]ตัวอย่างเช่น จำนวนเต็มโดยทั่วไปถือว่าเป็นอะตอมิก แม้ว่าจะประกอบด้วยลำดับของบิต ในขณะที่อาร์เรย์ของจำนวนเต็มเป็นคอมโพสิตอย่างแน่นอน
- ประเภทข้อมูลพื้นฐานหรือประเภทข้อมูลหลักถูกกำหนดโดยสัจพจน์จากแนวคิดพื้นฐานหรือโดยการแจงนับองค์ประกอบของมันประเภทข้อมูลที่สร้างขึ้นหรือประเภทข้อมูลที่ได้มานั้นถูกกำหนดและนิยามบางส่วนโดยอาศัยประเภทข้อมูลอื่น ประเภทพื้นฐานทั้งหมดเป็นอะตอมิก[ 7 ]ตัวอย่างเช่น จำนวนเต็มเป็นประเภทพื้นฐานที่กำหนดไว้ในทางคณิตศาสตร์ ในขณะที่อาร์เรย์ของจำนวนเต็มเป็นผลลัพธ์ของการใช้ตัวสร้างประเภทอาร์เรย์กับประเภทจำนวนเต็ม
คำศัพท์มีความแตกต่างกัน - ในเอกสารทางวิชาการ คำว่า ดั้งเดิม, ในตัว, พื้นฐาน, อะตอม และพื้นฐาน อาจใช้แทนกันได้[ 8 ]
ตัวอย่าง
ประเภทข้อมูลเครื่องจักร
ข้อมูลทั้งหมดในคอมพิวเตอร์ที่ใช้ระบบอิเล็กทรอนิกส์ดิจิทัลจะถูกแสดงในรูปของบิต (ค่า 0 และ 1) ในระดับต่ำสุด หน่วยข้อมูลที่เล็กที่สุดที่สามารถระบุตำแหน่งได้มักจะเป็นกลุ่มของบิตที่เรียกว่าไบต์ (โดยปกติ คือ อ็อกเท็ตซึ่งมี 8 บิต) หน่วยที่ประมวลผลโดย คำสั่ง รหัสเครื่องเรียกว่าเวิร์ด (ณ ปี 2026 โดยทั่วไปคือ 32/64 บิต)
ประเภทข้อมูลเครื่องจักรเปิดเผยหรือทำให้สามารถควบคุมฮาร์ดแวร์ได้อย่างละเอียด แต่สิ่งนี้อาจเปิดเผยรายละเอียดการใช้งานที่ทำให้โค้ดพกพาได้ยากขึ้น ดังนั้นประเภทข้อมูลเครื่องจักรจึงส่วนใหญ่ใช้ในการเขียนโปรแกรมระบบหรือภาษาการเขียนโปรแกรมระดับต่ำในภาษาการเขียนโปรแกรมระดับสูง ประเภทข้อมูลส่วนใหญ่จะถูกทำให้เป็นนามธรรม กล่าวคือไม่มีการแสดงแทนเครื่องจักรที่กำหนดโดยภาษา ตัวอย่างเช่น ภาษาการเขียนโปรแกรม Cมีประเภทต่างๆ เช่น บูลีน จำนวนเต็ม จำนวนทศนิยม ฯลฯ แต่การแสดงแทนบิตที่แม่นยำของประเภทเหล่านี้ถูกกำหนดโดยการใช้งาน ประเภท C เพียงประเภทเดียวที่มีการแสดงแทนเครื่องจักรที่แม่นยำคือcharประเภทที่แสดงแทนไบต์[ 9 ]
ประเภทบูลีน
ชนิดข้อมูลบูลีน (Boolean)แทนค่าจริง (true)และเท็จ (false ) แม้ว่าจะมีค่าที่เป็นไปได้เพียงสองค่า แต่โดยทั่วไปแล้วมักจะแทนด้วยไบต์หรือเวิร์ดมากกว่าบิตเดียว เนื่องจากต้องใช้คำสั่งเครื่องมากกว่าในการจัดเก็บและเรียกใช้บิตแต่ละบิต ภาษาโปรแกรมหลายภาษาไม่มีชนิดข้อมูลบูลีนที่ระบุอย่างชัดเจน แต่จะใช้ชนิดข้อมูลจำนวนเต็มแทน และตีความ (เช่น) 0 เป็นเท็จ และค่าอื่นๆ เป็นจริง ข้อมูลบูลีนหมายถึงโครงสร้างเชิงตรรกะของวิธีการตีความภาษาเป็นภาษาเครื่อง ในกรณีนี้ บูลีน 0 หมายถึงตรรกะเท็จ ส่วนค่าจริงจะต้องไม่ใช่ศูนย์ โดยเฉพาะอย่างยิ่งหนึ่ง ซึ่งเรียกว่าบูลีน 1
ประเภทตัวเลข
ภาษาโปรแกรมเกือบทั้งหมดมีชนิดข้อมูล จำนวนเต็มอย่างน้อยหนึ่งชนิดอาจมีชนิดย่อยที่กำหนดไว้ล่วงหน้าจำนวนน้อยซึ่งจำกัดอยู่ในช่วงที่กำหนด (เช่น 1 shortถึง 12 longและunsignedรูปแบบต่างๆ ใน C/C++) หรืออาจอนุญาตให้ผู้ใช้กำหนดช่วงย่อยได้อย่างอิสระ เช่น 1 ถึง 12 (เช่นPascal / Ada ) หากไม่มีชนิดข้อมูลพื้นฐานที่ตรงกันบนแพลตฟอร์มเป้าหมาย คอมไพเลอร์จะแปลงเป็นโค้ดโดยใช้ชนิดข้อมูลที่มีอยู่ ตัวอย่างเช่น หากต้องการจำนวนเต็ม 32 บิตบนแพลตฟอร์ม 16 บิต คอมไพเลอร์จะถือว่ามันเป็นอาร์เรย์ของจำนวนเต็ม 16 บิตสองตัวโดยปริยาย
ประเภทข้อมูลจุดลอยตัว (Floating point) ใช้แทนค่าเศษส่วนบางค่า ( จำนวนตรรกยะทางคณิตศาสตร์) แม้ว่าจะมีข้อจำกัดที่กำหนดไว้ล่วงหน้าทั้งในด้านค่าสูงสุดและความแม่นยำ แต่บางครั้งก็ถูกเรียกอย่างผิดๆ ว่าจำนวนจริง (real) (ซึ่งชวนให้นึกถึงจำนวนจริง ทางคณิตศาสตร์ ) โดยทั่วไปจะจัดเก็บภายในในรูปแบบa × 2 b (โดยที่aและbเป็นจำนวนเต็ม) แต่แสดงผลในรูปแบบ ทศนิยม ที่คุ้นเคย
ชนิดข้อมูล แบบจุดคงที่ (Fixed point data types) สะดวกสำหรับการแสดงค่าเงิน โดยทั่วไปแล้วจะถูกนำไปใช้ภายในในรูปแบบของจำนวนเต็ม ซึ่งนำไปสู่ขีดจำกัดที่กำหนดไว้ล่วงหน้า
เพื่อความเป็นอิสระจากรายละเอียดทางสถาปัตยกรรม อาจมีการจัดหาประเภท Bignumหรือ ประเภท ความแม่นยำตามอำเภอใจnumericซึ่งแสดงถึงจำนวนเต็มหรือจำนวนตรรกยะด้วยความแม่นยำที่จำกัดเฉพาะหน่วยความจำและทรัพยากรการคำนวณที่มีอยู่บนระบบเท่านั้น การใช้งาน Bignum สำหรับการดำเนินการทางคณิตศาสตร์บนค่าที่มีขนาดเท่ากับเครื่องจักรนั้นช้ากว่าการดำเนินการของเครื่องจักรที่สอดคล้องกันอย่างมาก[ 10 ]
การแจงนับ
ประเภทข้อมูลแบบแจงนับ (enumerated type)มีค่าที่แตกต่างกัน ซึ่งสามารถเปรียบเทียบและกำหนดได้ แต่ไม่จำเป็นต้องมีการแสดงผลที่เป็นรูปธรรมใดๆ ในหน่วยความจำของคอมพิวเตอร์ คอมไพเลอร์และอินเตอร์พรีเตอร์สามารถแสดงค่าเหล่านั้นได้ตามอำเภอใจ ตัวอย่างเช่น ชุดไพ่ทั้งสี่ในสำรับอาจเป็นตัวแจงนับสี่ตัวชื่อCLUB , DIAMOND , HEART , SPADEซึ่งอยู่ในประเภทข้อมูลแบบแจงนับชื่อsuitหากตัวแปรVถูกประกาศโดยมีsuitเป็นประเภทข้อมูล มันสามารถกำหนดค่าใดๆ ในสี่ค่าเหล่านั้นให้กับมันได้ การใช้งานบางอย่างอนุญาตให้โปรแกรมเมอร์กำหนดค่าจำนวนเต็มให้กับค่าแบบแจงนับ หรือแม้กระทั่งถือว่าค่าเหล่านั้นเทียบเท่ากับจำนวนเต็ม
ประเภทสตริงและข้อความ
สตริงคือลำดับของอักขระที่ใช้เก็บคำหรือข้อความธรรมดาซึ่งส่วนใหญ่มัก เป็น ภาษามาร์กอัป ข้อความ ที่ใช้แสดงข้อความที่จัดรูปแบบแล้วอักขระอาจเป็นตัวอักษรตัวเลขช่องว่าง เครื่องหมายวรรคตอน ฯลฯ อักขระถูกดึงมาจากชุดอักขระ เช่นASCIIหรือUnicodeประเภทของอักขระและสตริงสามารถมีประเภทย่อยที่แตกต่างกันได้ตามการเข้ารหัสอักขระ ชุด ASCII 7 บิตดั้งเดิมพบว่ามีข้อจำกัด และถูกแทนที่ด้วยชุด 8, 16 และ 32 บิต ซึ่งสามารถเข้ารหัสตัวอักษรที่ไม่ใช่ภาษาละตินได้หลากหลาย (เช่นภาษาฮิบรูและภาษาจีน ) และสัญลักษณ์อื่นๆ สตริงอาจมีความยาวแปรผันหรือความยาวคงที่ และภาษาโปรแกรมบางภาษามีทั้งสองประเภท นอกจากนี้ยังสามารถแบ่งประเภทย่อยตามขนาดสูงสุดได้อีกด้วย
เนื่องจากชุดอักขระส่วนใหญ่ประกอบด้วยตัวเลขจึงเป็นไปได้ที่จะมีสตริงตัวเลข เช่น"1234"สตริงตัวเลขเหล่านี้มักถือว่าแตกต่างจากค่าตัวเลข เช่น1234แม้ว่าบางภาษาจะแปลงระหว่างกันโดยอัตโนมัติก็ตาม
ประเภทสหภาพ
คำจำกัดความของประเภท Union จะระบุว่าประเภทย่อยใดบ้างที่สามารถจัดเก็บในอินสแตนซ์ของมันได้ เช่น "float หรือ long integer" แตกต่างจากRecordที่สามารถกำหนดให้มีทั้ง float และ integer ได้ แต่ Union สามารถมีประเภทย่อยได้เพียงประเภทเดียวในแต่ละครั้ง
ยูเนียนที่มีแท็ก (หรือเรียกอีกอย่างว่าตัวแปร , บันทึกตัวแปร, ยูเนียนแบบแยกแยะ หรือ ยูเนียนแบบไม่ทับซ้อน) จะมีฟิลด์เพิ่มเติมที่ระบุประเภทปัจจุบันเพื่อเพิ่มความปลอดภัยของประเภทข้อมูล
ประเภทข้อมูลเชิงพีชคณิต
ประเภทข้อมูลเชิงพีชคณิต ( ADT) คือประเภทผลรวม ที่อาจเรียกซ้ำได้ ของประเภทผลคูณ ค่าของ ADT ประกอบด้วยแท็กตัวสร้างพร้อมกับค่าฟิลด์ตั้งแต่ศูนย์ค่าขึ้นไป โดยจำนวนและประเภทของค่าฟิลด์จะถูกกำหนดโดยตัวสร้าง เซตของค่าที่เป็นไปได้ทั้งหมดของ ADT คือการรวมกันแบบไม่ทับซ้อนทางทฤษฎีเซต (ผลรวม) ของเซตของค่าที่เป็นไปได้ทั้งหมดของตัวแปรต่างๆ (ผลคูณของฟิลด์) ค่าของประเภทเชิงพีชคณิตจะถูกวิเคราะห์ด้วยการจับคู่รูปแบบ ซึ่งจะระบุตัวสร้างของค่าและดึงฟิลด์ที่บรรจุอยู่ภายในออกมา
ถ้ามีคอนสตรัคเตอร์เพียงตัวเดียว ADT จะสอดคล้องกับประเภทผลิตภัณฑ์ที่คล้ายกับทูเปิลหรือเรคอร์ด คอนสตรัคเตอร์ที่ไม่มีฟิลด์จะสอดคล้องกับผลิตภัณฑ์ว่างเปล่า (ประเภทหน่วย) ถ้าคอนสตรัคเตอร์ทั้งหมดไม่มีฟิลด์ ADT จะสอดคล้องกับประเภทแจงนับ
ADT ทั่วไปอย่างหนึ่งคือประเภทตัวเลือกซึ่งกำหนดไว้ใน Haskell เป็น[ 11 ]dataMaybea=Nothing|Justa
โครงสร้างข้อมูล
ข้อมูลบางประเภทมีประโยชน์มากสำหรับการจัดเก็บและเรียกใช้ข้อมูล และเรียกว่าโครงสร้างข้อมูลโครงสร้างข้อมูลที่พบได้ทั่วไป ได้แก่:
- อาร์เรย์(หรือเรียกว่าเวกเตอร์ลิสต์หรือซีเควนซ์) เก็บข้อมูลจำนวนหนึ่งและสามารถเข้าถึงแต่ละองค์ประกอบได้แบบสุ่ม โดยทั่วไปแล้ว (แต่ไม่ใช่ในทุกบริบท) องค์ประกอบของอาร์เรย์จะต้องมีชนิดข้อมูลเดียวกัน อาร์เรย์อาจมีขนาดคงที่หรือขยายได้ ดัชนีในอาร์เรย์โดยทั่วไปจะต้องเป็นจำนวนเต็ม (หากไม่ใช่เช่นนั้น อาจใช้คำว่าอาร์เรย์แบบเชื่อมโยง เพื่ออธิบายข้อยกเว้น ) จากช่วงที่กำหนด (หากดัชนีทั้งหมดในช่วงนั้นไม่ตรงกับองค์ประกอบ อาจเป็นอาร์เรย์แบบเบาบาง )
- เรคอร์ด (เรียกอีกอย่างว่า ทูเปิล หรือ สตรัค) เรคอร์ดเป็นหนึ่งในโครงสร้างข้อมูล ที่ง่ายที่สุด เรคอร์ดคือค่าหนึ่งที่บรรจุค่าอื่นๆ ไว้ โดยทั่วไปจะมีจำนวนและลำดับที่แน่นอน และมักจะใช้ชื่อเป็นดัชนีในการกำหนด องค์ประกอบของเรคอร์ดมักเรียกว่าฟิลด์หรือสมาชิก
- อ็อบเจ็กต์ประกอบด้วยฟิลด์ข้อมูลจำนวนหนึ่ง เช่นเดียวกับเรคอร์ด และยังมีฟังก์ชันย่อยจำนวนหนึ่งสำหรับเข้าถึงหรือแก้ไขฟิลด์เหล่านั้น ซึ่งเรียกว่าเมธอด
- รายการเชื่อมโยงเดี่ยวซึ่งสามารถใช้ในการสร้างคิวและถูกกำหนดใน Haskell ว่าเป็น ADT และ
dataLista=Nil|Consa(Lista) - ต้นไม้ไบนารีซึ่งช่วยให้ค้นหาได้อย่างรวดเร็ว และสามารถกำหนดใน Haskell เป็น ADT ได้[ 12 ]
dataBTreea=Nil|Node(BTreea)a(BTreea)
ประเภทข้อมูลนามธรรม
ชนิดข้อมูลนามธรรม (Abstract data type ) คือชนิดข้อมูลที่ไม่ระบุการแสดงข้อมูลอย่างเป็นรูปธรรม แต่จะใช้ข้อกำหนด อย่างเป็นทางการที่อิงตามการดำเนินการของชนิดข้อมูลนั้นในการอธิบาย การนำข้อกำหนดไปใช้จะต้องเป็นไปตามกฎที่กำหนดไว้ ตัวอย่างเช่นสแต็กมีการดำเนินการ push/pop ที่เป็นไปตามกฎ Last-In-First-Out และสามารถนำไปใช้ได้อย่างเป็นรูปธรรมโดยใช้ลิสต์หรืออาร์เรย์ ชนิดข้อมูลนามธรรมใช้ในความหมายเชิง รูปธรรมและ การตรวจสอบโปรแกรม และใช้ใน การ ออกแบบในระดับที่ไม่เคร่งครัดนัก
คำแนะนำและข้อมูลอ้างอิง
ชนิดข้อมูลหลักที่ไม่ใช่ชนิดข้อมูลผสมและเป็นชนิดข้อมูลที่ได้มาจากชนิดข้อมูลอื่น คือ พอยน์เตอร์ ซึ่งเป็นชนิดข้อมูลที่มีค่าอ้างอิงโดยตรงไปยัง (หรือ "ชี้ไปยัง") ค่าอื่นที่จัดเก็บไว้ที่อื่นใน หน่วยความจำของคอมพิวเตอร์โดยใช้ที่อยู่ ของมัน มันเป็นการอ้างอิง แบบดั้งเดิม (ในแง่ทั่วไป หมายเลขหน้าในหนังสืออาจถือได้ว่าเป็นข้อมูลที่อ้างอิงถึงอีกหน้าหนึ่ง) พอยน์เตอร์มักถูกจัดเก็บในรูปแบบที่คล้ายกับจำนวนเต็ม อย่างไรก็ตาม การพยายามเข้าถึงค่าที่พอยน์เตอร์ชี้หรือ "ค้นหา" ค่าของมันซึ่งไม่เคยเป็นที่อยู่หน่วยความจำที่ถูกต้อง จะทำให้โปรแกรมหยุดทำงาน เพื่อลดปัญหาที่อาจเกิดขึ้นนี้ ชนิดข้อมูลพอยน์เตอร์จึงมักถูกพิจารณาว่าแตกต่างจากชนิดข้อมูลจำนวนเต็มที่สอดคล้องกัน แม้ว่าการแสดงผลพื้นฐานจะเหมือนกันก็ตาม
ประเภทฟังก์ชัน
ภาษา การเขียนโปรแกรมเชิงฟังก์ชันถือว่าฟังก์ชันเป็นชนิดข้อมูลที่แตกต่างกัน และอนุญาตให้เก็บค่าของชนิดนี้ไว้ในตัวแปรและส่งผ่านไปยังฟังก์ชัน ภาษาแบบหลายพาราดิกม์บางภาษา เช่นJavaScriptก็มีกลไกในการจัดการฟังก์ชันเป็นข้อมูลเช่นกัน[ 13 ]ระบบประเภทในปัจจุบันส่วนใหญ่ก้าวไปไกลกว่า "ออบเจ็กต์ฟังก์ชัน" แบบง่ายๆ ของ JavaScript และมีตระกูลของประเภทฟังก์ชันที่แตกต่างกันตามประเภทของอาร์กิวเมนต์และประเภทการส่งคืน เช่น ประเภทที่Int -> Boolแสดงถึงฟังก์ชันที่รับจำนวนเต็มและส่งคืนค่าบูลีน ในภาษา C ฟังก์ชันไม่ใช่ชนิดข้อมูลชั้นหนึ่ง แต่ตัวชี้ฟังก์ชันสามารถจัดการได้โดยโปรแกรม Java และ C++ เดิมทีไม่มีค่าฟังก์ชัน แต่ได้เพิ่มเข้ามาใน C++11 และ Java 8
ตัวสร้างประเภท
ตัวสร้างประเภท (Type Constructor) สร้างประเภทใหม่จากประเภทเดิม และสามารถมองได้ว่าเป็นตัวดำเนินการที่รับประเภทตั้งแต่ศูนย์ประเภทขึ้นไปเป็นอาร์กิวเมนต์ และสร้างประเภทขึ้นมา ประเภทผลคูณ ประเภทฟังก์ชัน ประเภทกำลัง และประเภทรายการ สามารถสร้างเป็นตัวสร้างประเภทได้
ประเภทเชิงปริมาณ
ประเภทที่กำหนดปริมาณแบบสากลและแบบมีอยู่จริงนั้นอิงตามตรรกะเชิงประพจน์การกำหนดปริมาณแบบสากลเขียนได้ว่า " หรือ" และเป็นการตัดกันของทุกประเภทในตัวมัน กล่าว คือ ค่าจะเป็นประเภทสำหรับทุก ๆการกำหนดปริมาณแบบมีอยู่จริงเขียนได้ว่า"หรือ" และเป็นการรวมกันของทุกประเภทในตัวมันกล่าวคือ ค่าจะเป็นประเภทสำหรับบางๆ forall x. f xxf xf xxexists x. f xxf xf xx
ในภาษา Haskell การกำหนดปริมาณแบบสากล (universal quantification) เป็นสิ่งที่ใช้กันทั่วไป แต่ประเภทเชิงการมีอยู่ (existential types) จะต้องถูกเข้ารหัสโดยการแปลงexists a. f aเป็นforall r. (forall a. f a -> r) -> rหรือประเภทที่คล้ายคลึงกัน
ประเภทการปรับแต่ง
ประเภทการปรับปรุง (Refinement type) คือประเภทที่มีภาคแสดง (predicate) ซึ่งถือว่าใช้ได้กับทุกองค์ประกอบของประเภทการปรับปรุงนั้น ตัวอย่างเช่น ประเภทของจำนวนธรรมชาติที่มากกว่า 5 อาจเขียนได้ดังนี้
ประเภทที่ขึ้นอยู่กับ
ประเภทที่ขึ้นอยู่กับค่า (Dependent type) คือประเภทที่นิยามของมันขึ้นอยู่กับค่าอื่น ตัวอย่างที่พบได้ทั่วไปสองอย่างของประเภทที่ขึ้นอยู่กับค่า ได้แก่ ฟังก์ชันที่ขึ้นอยู่กับค่า (Dependent functions) และคู่ที่ขึ้นอยู่กับค่า (Dependent pairs) ประเภทค่าส่งคืนของฟังก์ชันที่ขึ้นอยู่กับค่าอาจขึ้นอยู่กับค่า (ไม่ใช่แค่ประเภท) ของอาร์กิวเมนต์ตัวใดตัวหนึ่ง คู่ที่ขึ้นอยู่กับค่าอาจมีค่าที่สองซึ่งประเภทของมันขึ้นอยู่กับค่าแรก
ประเภทของทางแยก
ประเภทจุดตัดคือประเภทที่มีค่าที่เป็นสมาชิกของสองประเภทที่ระบุไว้ ตัวอย่างเช่น ในJavaคลาสBooleanจะใช้อินเทอร์เฟซทั้งSerializableและComparableดังนั้นวัตถุของประเภท จึงBooleanเป็นสมาชิกของประเภทSerializable & Comparableเมื่อพิจารณาประเภทเป็นเซตของค่า ประเภทจุดตัด คือ จุดตัดเชิงเซตของและนอกจากนี้ยังสามารถกำหนดประเภทจุดตัดแบบขึ้นอยู่ได้ ซึ่งแสดงด้วยโดยที่ประเภทอาจขึ้นอยู่กับตัวแปรเทอม[ 14 ]
เมตาไทป์
ภาษาโปรแกรมบางภาษาแสดงข้อมูลประเภทในรูปแบบของข้อมูลดิบ ทำให้สามารถตรวจสอบประเภทและเขียนโปรแกรมแบบสะท้อน (reflection) ได้ ในทางตรงกันข้ามระบบประเภทลำดับสูงกว่า แม้ว่าจะอนุญาตให้สร้างประเภทจากประเภทอื่นและส่งผ่านไปยังฟังก์ชันเป็นค่าได้ แต่โดยทั่วไปแล้วจะหลีกเลี่ยง การใช้ ประเภทเหล่านั้นเป็นพื้นฐานในการตัดสินใจ เชิงคำนวณ
ประเภทความสะดวกสบาย
เพื่อความสะดวก ภาษาและฐานข้อมูลระดับสูงอาจจัดเตรียมประเภทข้อมูล "โลกแห่งความเป็นจริง" สำเร็จรูป เช่น เวลา วันที่ และค่าเงิน (สกุลเงิน) [ 15 ] [ 16 ]สิ่งเหล่านี้อาจถูกสร้างขึ้นในภาษาหรือนำไปใช้เป็นประเภทผสมในไลบรารี[ 17 ]
ดูเพิ่มเติม
- ประเภทข้อมูล C
- พจนานุกรมข้อมูล
- ใจดี
- ประเภท (ทฤษฎีแบบจำลอง)
- ทฤษฎีประเภทสำหรับแบบจำลองทางคณิตศาสตร์ของประเภท
- การแปลงประเภท
- ISO/IEC 11404 , ประเภทข้อมูลอเนกประสงค์
- ประเภทข้อมูลทางสถิติ
อ่านเพิ่มเติม
- Parnas, David L. ; Shore, John E.; Weiss, David (1976). "ประเภทนามธรรมที่กำหนดเป็นคลาสของตัวแปร". รายงานการประชุมปี 1976 เรื่องข้อมูล: นามธรรม คำจำกัดความ และโครงสร้าง -หน้า 149–154 . doi : 10.1145/800237.807133 . S2CID 14448258 .
- Cardelli, Luca ; Wegner, Peter (ธันวาคม 1985). "เกี่ยวกับการทำความเข้าใจประเภท การนามธรรมของข้อมูล และพหุรูป" (PDF) . ACM Computing Surveys . 17 (4): 471– 523. CiteSeerX 10.1.1.117.695 . doi : 10.1145/6041.6042 . ISSN 0360-0300 . S2CID 2921816 . เก็บถาวร(PDF)จากต้นฉบับเมื่อ 2008-12-03.
- Cleaveland, J. Craig (1986). บทนำเกี่ยวกับชนิดข้อมูล . Addison-Wesley. ISBN 978-0201119404.
ลิงก์ภายนอก
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ ประเภทข้อมูล
ใน วิทยาการคอมพิวเตอร์ และ การเขียนโปรแกรมคอมพิวเตอร์ ประเภท ข้อมูล (หรือเรียกสั้น ๆ ว่า ประเภท ) คือชุดหรือการจัดกลุ่มของ ค่าข้อมูล ซึ่งโดยปกติจะระบุโดยชุดของค่าที่เป็นไปได้...
แนวคิด
อาจมีการระบุประเภทข้อมูลด้วยเหตุผลหลายประการ เช่น ความคล้ายคลึง ความสะดวก หรือเพื่อเน้นความสนใจ บ่อยครั้งที่เป็นเรื่องของการจัดระเบียบที่ดีซึ่งช่วยให้เข้าใจคำจำกัดความที่ซับซ้อนได้ ภาษาโปรแกรมเกือบทั้งหมดรวมแนวคิดของประเภทข้อมูลไว้อย่างชัดเจน...
คำนิยาม
Parnas, Shore & Weiss (1976) ได้ระบุคำจำกัดความของ "ประเภท" ไว้ห้าประการ ซึ่งถูกนำมาใช้ในเอกสารทางวิชาการในบางครั้งโดยปริยาย:
การจำแนกประเภท
ประเภทของข้อมูลสามารถจำแนกได้ตามปัจจัยหลายประการ: