190 likes | 381 Views
Data Type. Chainate, W. 01418216 Principles of programming language. Assignments. แบ่งกลุ่มๆ ละ ไม่เกิน 7 คน เลือกภาษาที่ชอบๆ แล้วทำ preview report พร้อม presentation ส่งรายงานในล๊อคเกอร์วันอังคารที่ 4 ม.ค. และนำเสนอในชม. เรียน . Python Tcl Ruby Objective C (Mac Hardware required)
E N D
Data Type Chainate, W.
01418216 Principles of programming language Assignments แบ่งกลุ่มๆ ละ ไม่เกิน 7 คน เลือกภาษาที่ชอบๆ แล้วทำ preview report พร้อม presentation ส่งรายงานในล๊อคเกอร์วันอังคารที่ 4 ม.ค. และนำเสนอในชม. เรียน • Python • Tcl • Ruby • Objective C (Mac Hardware required) • Assembly • Prolog • Scheme • Smalltalk • LISP • APL
บทนำ • การเขียนโปรแกรมเป็นการเขียนคำสั่งควบคุมการทำงาน เพื่อให้เกิดการเปลี่ยนแปลงกับข้อมูล • โครงสร้างพื้นฐาน... • การแทนข้อมูล • การปฏิบัติการกับข้อมูล • การควบคุมลำดับการทำงานกับข้อมูล • ข้อแตกต่างของแต่ละภาษาโปรแกรม... • วิธีการกำหนดรูปแบบการแทนข้อมูล • การกำหนดชนิดข้อมูลพื้นฐาน • วิธีการสั่งงานเพื่อเปลี่ยนแปลงข้อมูล
คุณสมบัติของข้อมูล (property of data) • เมื่อโปรแกรมประกาศใช้ข้อมูล คุณสมบัติหรือคุณลักษณะที่จะช่วยให้โปรแกรมใช้งานข้อมูลนั้นได้ ประกอบด้วย • Name • Location • Type • Value • Lifetime • Scope • ชนิดของข้อมูล (type) มีความสำคัญ และมีบทบาทอย่างมากในการตรวจสอบความถูกต้องของข้อความสั่ง • เช่น int n; • ขนาดเนื้อที่ในหน่วยความจำ, ช่วงของค่าที่เป็นไปได้, การกระทำที่สามารถกระทำกับตัวแปร n ได้
ระบบชนิดข้อมูล (type system) • การกำหนดชนิดข้อมูล คือ การกำหนดเซตของค่า และการกำหนดปฏิบัติการที่สามารถกระทำกับค่าเหล่านั้น • เช่น ชนิดข้อมูล int หมายถึงเซตของ {…, -2, -1, 0, 1, 2, …} และ {+, -, *, /, …} • ชนิดข้อมูล boolean หมายถึง {true, false} และ {&&, ||, !} • ระบบชนิดข้อมูล คือ ระบบที่ทำหน้าที่เชื่อมโยงชนิดข้อมูลเข้ากับตัวแปรและข้อมูลอื่นๆ ในโปรแกรม รวมถึงการมีกลไกในการตรวจสอบความถูกต้องของชนิดข้อมูล • ภาษา C, Java จะเชื่อมโยงข้อมูลเพียงชนิดเดียวให้กับตัวแปร เรียกว่า ภาษาที่มีชนิดคงตัว (statically typed language) • ภาษา APL, LISP จะอนุญาตให้ตัวแปรเปลี่ยนชนิดข้อมูลได้ เรียกว่า ภาษาที่มีชนิดข้อมูลพลวัต (dynamically typed language)
ระบบชนิดข้อมูล (ต่อ) • ระบบชนิดข้อมูลที่เข้มแข็ง (strongly typed) เช่น ภาษา Java, Pascal • ระบบชนิดข้อมูลที่อ่อนแอ (weakly typed) เช่น ภาษา C • โปรแกรมที่ปราศจากข้อผิดพลาดเกี่ยวกับชนิดข้อมูล จะเรียกว่า มีชนิดข้อมูลที่ปลอดภัย (type safe) • ข้อผิดพลาดทั้งหลายที่เกี่ยวเนื่องกับชนิดข้อมูลจะถูกตรวจพบได้โดย คอมไพเลอร์ และระบบประมวลผล • การตรวจสอบชนิดข้อมูล • ระบบชนิดข้อมูล สร้างกลไกในการตรวจสอบชนิดข้อมูล (type checking) เพื่อเป็นหลักประกันว่า โปรแกรมที่ผ่านการตรวจสอบแล้วจะไม่มีข้อผิดพลาดใดๆ เกี่ยวกับชนิดข้อมูล
การตรวจสอบชนิดข้อมูล (type checking) • สมมติให้ภาษาคอมพิวเตอร์นี้มีชนิดข้อมูลเพียง 2 ชนิดคือ intและ boolean
ขั้นตอนการตรวจสอบชนิดข้อมูลขั้นตอนการตรวจสอบชนิดข้อมูล • ตรวจสอบว่าตัวแปรที่ประกาศใช้ทุกตัวต้องมีชื่อที่ไม่ซ้ำกัน • ตรวจสอบชนิดข้อมูลว่าตรงตามไวยากรณ์ของภาษา • ตัวแปรที่มีการอ้างถึงในนิพจน์ทุกนิพจน์ต้องมีการประกาศชื่อและชนิดมาก่อน • ชนิดข้อมูลที่เป็นผลลัพธ์จากการประมวลผลนิพจน์ต้องได้รับการตรวจสอบดังนี้ • ถ้านิพจน์เป็นตัวแปรเดี่ยวหรือค่าเดี่ยว ชนิดของข้อมูลผลลัพธ์ของนิพจน์ก็จะเป็นชนิดเดียวกับตัวแปรหรือค่านั้นๆ • ถ้านิพจน์มีการใช้เครื่องหมายคำนวณทางคณิตศาสตร์ (+, -, *, /) เทอมทุกเทอมต้องเป็นชนิด int และผลลัพธ์จากการคำนวณจะเป็นชนิด int • ถ้านิพจน์มีการใช้เครื่องหมายเปรียบเทียบค่า (<, <=, >, >=, ==, !=) เทอมทุกเทอมต้องเป็นชนิด int และผลลัพธ์จากการคำนวณจะเป็นชนิด boolean • ถ้านิพจน์มีการใช้เครื่องหมายตรรกะ (&&, ||, !) เทอมทุกเทอมต้องเป็นชนิด boolean และผลลัพธ์จากการคำนวณจะเป็นชนิด boolean
ขั้นตอนการตรวจสอบชนิดข้อมูล(ต่อ)ขั้นตอนการตรวจสอบชนิดข้อมูล(ต่อ) • ข้อความสั่งกำหนดค่าต้องมีการตรวจสอบชนิดข้อมูลของตัวแปรปลายทาง ว่าตรงกันกับชนิดข้อมูลของนิพจน์ต้นทาง • ข้อความสั่งทำงานแบบมีเงื่อนไขและสั่งวนรอบ นิพจน์ในคำสั่งต้องมีการตรวจสอบว่าเป็นชนิดข้อมูล boolean • หากมีข้อผิดพลาดเกิดขึ้น และระบบตรวจสอบชนิดข้อมูลพบข้อผิดพลาดนี้ ระบบก็จะแจ้งข้อความเตือนโปรแกรมเมอร์ให้มีการแก้ไขโปรแกรม • การตรวจสอบชนิดข้อมูลนี้อาจจะเกิดขึ้นในช่วงการคอมไพล์โปรแกรม เรียกว่า static type checking เช่น ภาษา C, Java, Pascal เป็นต้น • หรือ อาจจะเกิดขึ้นในช่วงรันโปรแกรม เรียกว่า dynamic type checking เช่น ภาษา APL, LISP, PROLOG
ความเข้ากันได้ของชนิดข้อมูลความเข้ากันได้ของชนิดข้อมูล • ภาษาคอมพิวเตอร์โดยทั่วไปมักจะไม่เข้มงวดกับชนิดของตัวแปรมากจนเกินไป (More writabilityless reliability) • ตัวแปรที่มีชนิดคล้ายกันมักจะอนุโลมให้ใช้งานคำสั่งร่วมกันได้ • ดังนั้น ระบบชนิดข้อมูลจะต้องมีกลไกตรวจสอบเพิ่มขึ้น • ความเข้ากันได้ของชนิดข้อมูล (Type compatibility) • ความเท่าเทียมกันของชนิดข้อมูล (Type equivalence)
ความเข้ากันได้ของชนิดข้อมูลความเข้ากันได้ของชนิดข้อมูล • ความเข้ากันได้โดยชื่อ (name compatibility) • ชนิดข้อมูลที่มีชื่อตรงกัน เช่น int x, y; • เช่น ภาษา Pascal • ความเข้ากันได้โดยโครงสร้าง (structural compatibility) • ชนิดข้อมูลที่มีชื่อตรงกัน หรือมีโครงสร้างที่เหมือนกัน • เช่น ภาษา C (ยกเว้นข้อมูลชนิด struct) • จากตัวอย่างนี้จะเป็นอย่างไรหาก • ภาษานี้อนุญาตเฉพาะชนิดข้อมูลที่เข้ากันด้วยชื่อ • ภาษามีความยืดหยุ่นมากขึ้นด้วยลักษณะการเข้ากันได้โดยโครงสร้าง
การเปลี่ยนชนิดข้อมูล (type conversion) • บางครั้งรูปแบบคำสั่งต้องการชนิดข้อมูล T1 แต่ข้อมูลที่เกิดขึ้นจริงเป็น T2 • ถ้า T1 และ T2 เป็นข้อมูลชนิดที่เข้ากันได้ โปรแกรมก็สามารถทำงานได้ • แต่ถ้า T1 และ T2 เป็นชนิดข้อมูลที่ต่างกัน อาจต้องใช้การเปลี่ยนชนิดข้อมูล • แบบแรก: coercion เป็นการเปลี่ยนชนิดข้อมูลให้โดยอัตโนมัติโดยคอมไพเลอร์ เรียกว่า implicit conversion • คำสั่งภาษา C ต่อไปนี้ • จะได้เป็น x = (int)((float)x+z)
การเปลี่ยนชนิดข้อมูล (ต่อ) • แบบที่สอง: casting • เป็นการบังคับเปลี่ยนชนิดข้อมูลโดยโปรแกรมเมอร์ เรียกว่า explicit conversion • เช่น จากตัวอย่างเดิม โปรแกรมเมอร์อาจกำหนดให้เป็น x = x+(int)z; • ผลกระทบที่เกิดจากการเปลี่ยนชนิดของข้อมูล • การทำให้กว้างขึ้น widening • การทำให้แคบลง narrowing • นิสิต คิดว่าแบบไหนอาจส่งผลกระทบต่อโปรแกรมได้
ชนิดข้อมูลแบบสเกลาร์(Scalar data type) • เป็นชนิดข้อมูลพื้นฐาน (Primitive data type) ที่เก็บค่าเดี่ยว • เช่น จำนวนเลข, อักขระ, ค่าตรรกะ เป็นต้น • Built-in เช่น ชนิดข้อมูล int, float, char ในภาษา C • ชนิดข้อมูลเลขจำนวนเต็ม (integer) • เป็นชนิดข้อมูลที่มีค่าเรียงลำดับจากค่าจำนวนเต็มลบไปถึงค่าจำนวนเต็มบวก • การปฏิบัติการที่สามารถกระทำกับข้อมูลชนิดนี้ประกอบด้วย • การคำนวณทางคณิตศาสตร์ • การเปรียบเทียบ
Integer (cont) • การเก็บข้อมูลเลขจำนวนเต็มในคอมพิวเตอร์ นิยมใช้วิธีการสองรูปแบบ • การเก็บค่าโดยไม่ต้องมีคำอธิบายเกี่ยวกับชนิดของค่า การใช้จะต้องมีการประกาศตัวแปรล่วงหน้า และใช้วิธีตรวจสอบชนิดข้อมูล แบบ static type checking เช่น ภาษา C, Java • การเก็บคำอธิบายเกี่ยวกับชนิดของค่าแยกจากการเก็บค่าของข้อมูล เป็นวิธีการที่ใช้ในภาษาที่เป็น dynamic type checking เช่น ภาษา LISP
Integer (cont) • ในภาษาคอมพิวเตอร์บางภาษา เช่น Pascal, Adaอนุญาตให้ประกาศชนิดข้อมูลเลขจำนวนเต็มที่มีขอบเขตของค่าอยู่ภายในช่วงแคบๆ เรียกว่า subrangeหรือ subtype
ชนิดข้อมูลเลขจำนวนจริง (floating-point) • กำหนดมาตรฐานโดย IEEE ซึ่งแบ่งได้เป็น 2 กลุ่ม คือ • Single precision • Double precision • ซึ่งในภาษา C จะเรียกชนิดข้อมูลนี้ว่า float และ double
ชนิดข้อมูลตรรกะ (Boolean) • True and False • and, or, not • ชนิดข้อมูลอักขระ (character) • ASCII ใช้เนื้อที่ 1 byte • เก็บได้ 128 อักขระ • สามารถเปรียบเทียบลำดับก่อน-หลังได้
ชนิดข้อมูลแจกแจงค่า (enumeration) • เป็นชนิดข้อมูลแบบแจกแจงค่าเดี่ยว กำหนดได้โดยโปรแกรมเมอร์ ด้วยการระบุชื่อชนิดข้อมูล และค่าต่างๆ ที่เป็นไปได้ • ตัวอย่างในภาษา C • ตัวอย่างในภาษา Pascal