งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ

งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ

3. ชนิดข้อมูล และการดำเนินการกับข้อมูล

งานนำเสนอที่คล้ายกัน


งานนำเสนอเรื่อง: "3. ชนิดข้อมูล และการดำเนินการกับข้อมูล"— ใบสำเนางานนำเสนอ:

1 3. ชนิดข้อมูล และการดำเนินการกับข้อมูล
บทนี้ เป็นพื้นฐานทั่วไป อีกบทหนึ่ง ที่เป็นพื้นฐานมาก ที่จำเป็นแรกๆ เริ่ม ที่จะต้องรู้จัก ควบคุม การดำเนินการของข้อมูล ของชนิดข้อมูล ต่างๆ การจะดำเนินการกับข้อมูลได้ จะต้องรู้จักว่าใครเป็นใคร ใครทำงานกับใครได้ ใครในที่นี้คือ ชนิดข้อมูล เช่น ตัวเลข บวกกับ ตัวอักษร ได้หรือไม่ บางภาษาก็ทำได้ บางภาษาก็ไม่ได้ มีเหตุผลคนและแบบ ดี เลว คนละแบบ แต่ถ้าเรา รุ้จักธรรมชาติ ของ การใช้ชนิดข้อมูล ของภาษา นั้นๆ ก็จะสามารถเลือกดำเนินการกับข้อมูล ได้อย่างมีเหตุผล ถึงความทำได้ และความทำไม่ได้ หรือทำได้บ้างไม่ได้บาง ภาษาซีชาร์ป อยู่ในรูปแบบหลัก ที่ควรจะทำไม่ได้ เพราะมีลักษณะภาษาที่เรียกว่า type safe แต่เมื่ออ่านไปเรื่อยในบทหลังๆ จะพบได้อีกว่า ทำได้กับต่างชนิดข้อมูลก็ได้ อื่ม.. แต่ก่อนถึงตอนนั้น มาศีกษาโดยหลักการก่อนดีว่า แต่อย่างไรก็ตาม เป็นการหลีกเลี่ยงไม่ได้ ที่สมควรอย่างมากที่ควรจะเข้าใจพื้นฐาน ชนิดข้อมูล และการดำเนินการข้อมูล เสียก่อน ก่อนจะเดินทางไปยังบทต่อไป แม้มันจะดูน่าเบื่อ การเริ่มต้น มักก็น่าเบื่อทั้งหนั้นแหละ เหมือนการหัดขับรถ น่าเบื่อจังเลย เมื่อไหร่จะเป็นเสียที พื้นฐานที่ดี จะช่วยให้เราประยุกต์ในขั้นสูงได้ดี ขอให้คิดแบบนี้ เป็นกำลังใจ ให้ตนเองไปก่อน การดำเนินกันของข้อมูล จะต้องทราบชนิดข้อมูลนั้นก่อน C# Programming with Visual C# 2010 Express

2 เป้าหมายการเรียนรู้ ชนิดข้อมูล (Data Type) และ Common Type System (CTS) การประกาศตัวแปร อโนนิมัสไทป์ และการแปลงชนิด ข้อมูล ขอบเขตการใช้ตัวแปร ค่าคงที่ และค่าอ่านได้อย่างเดียว การดำเนินการของข้อมูลทางคณิตศาสตร์ การดำเนินการของข้อมูลทางตรรกศาสตร์ ลำดับการทำงานของตัวถูกดำเนินการ การกำหนดชนิดข้อมูลใช้เอง ชนิดข้อมูล และ CTS เป็นเรื่องสำคัญมากๆ ในการใช้งานกับ ดอทเน็ตเฟรมเวิร์ค จึงเป็นเรื่องที่ระมัดระวังให้ดี เพราะจะมีการอ้างถึง cts นี้อยู่บ่อยในภายภาคหน้า ของหนังสือเล่มนี้ แต่อาจจะไม่เรียก cts โดยตรง แต่จะเรียกผ่าน ชนิดช้อมูลอย่าง ที่ได้ถูกแยกประเภทใน cts นี้แทน เมื่อรู้จักชนิดช้อมูลพื้นฐานแล้ว ลองมาดำเนินการอย่างง่ายกับชนิดข้อมูลต่างๆ ในบทนี้ จะเน้นการดำเนินกับข้อมูลพื้นฐาน เช่น ตัวเลข ตัวอักษร ไปก่อน เพราะชนิดข้อมูลแบบอื่น โดยเฉพาะ ชนิดข้อมูลประเภทอ๊อปเจ็ค จะต้องใช้ความรู้อื่นๆ เพิ่มเติม แต่หนังสือเล่มจะพูดแน่นอน เพราะชนิดช้อมูลประเภทอ๊อปเจ็ค มีบทบาทสำคัญกับเขียนโปรแกรมในระดับสูง เราจะเรียนรู้การประกาศตัวแปร เพื่อใช้งาน การประกาศตัวแปรแบบไม่เปิดเผยตัวตน (อะ -โน -นิ -มัส ) ตัวแปรประเภทนี้ ในบทนี้ไม่ยาก แต่จะพบว่า มีใช้มากขึ้นไปอีก และพบว่า อาจทำให้งงๆ ได้ง่าย ซึ่งก็พบที่ยากๆ กว่านี้ในบทต่อๆ ไป สำหรับการแปลงชนิดข้อมูล ไปมา ระหว่างชนิด การทราบก็ดี จะช่วยให้ทราบข้อจำกัด ในการดำเนินการว่าทำได้เพียงใด ของเขตของตัวแปร ในการประกาศ และใช้งานตัวแปร ก็ดูเป็นเรื่องง่าย ๆ แต่บางทีก็อาจ หลงลืมผิดพลาดได้ จึงควรทำความเข้าใจความรู้พื้นฐานนี้ไว้ อย่างให้เหมือนสุภาสิษ ที่ว่า ปลาตายน้ำตื้น C# Programming with Visual C# 2010 Express

3 ชนิดข้อมูล ในการเขียนโปรแกรมต้องมีการดำเนินการกับข้อมูลใน รูปแบบของภาษาซีชาร์ป นักเขียนโปรแกรมต้องรู้จักชนิด ข้อมูลเพื่อดำเนินกับตัวแปร ชนิดข้อมูลอาจเรียกทับศัพท์ว่า ไทป์ (Type) ไทป์มีหลายลักษณะ คือ Dynamic Type Static Type Safety Strong Type ชนิดข้อมูล มีลักษณะแยกเป็นประเภท ต่างๆ เท่าที่พบมา มีเรียกเป็นไทป์แบบต่างๆ คือ ไดนามิก ไทป์ สเตติกไทป์ ไทป์เซฟตี้ (ในหนังสือพิมพ์ผิด เขียนว่า type save แก้ใหม่ว่า type safety หรือ type-safe) และสตรองไทป์ คำเหล่านี้พูดไปพูดมากันบ่อย ๆ นึกว่าเข้าใจกัน เพราะความหมายใกล้เคียง หรือตรงกันข้ามกัน คุณเคยเขียนโปรแกรมแบบไม่ต้องประกาศชนิดตัวแปรก่อนใหม่ เช่น ให้ 5 + ก = ? คอมไพล์เลอร์ที่ฉลาดอาจให้คำตอบว่า 5ก ดูดี มีเหตุผล และถ้า 1+1 = ? ได้ 11 หรือ สิบเอ็ด (“11”) ถ้าไม่บอกชนิดตัวแปรว่าเป็นตัวเลขหรืออักษร คอมไพล์เลอร์ที่ฉลาดก็จะคิดหาคำตอบที่เหมาะสมให้ คุณรู้ไหมว่า การทำให้คอมไพล์เลอร์ ต้องคิดนะ มันใช้เวลา หนึ่ง นะ โอเค ถ้าเราคิดว่าเครื่องมันฉลาดพอ ก็เชื่อถือได้ แต่ที่น่าห่วง คนเขียนโปรแกรม ฉลาดพอ กับทุกสถานการณ์ หรือ คนอาจผิดพลาดได้ เช่น เมามา นี้นะ การตัดสินใจอาจผิดพลาดไปบ้าง แม้จะได้งานเยอะ อารมณ์พาไป ทำงานเพลิน คำตอบแล้วแต่จะตอบ ซีชาร์ป เลือกให้แล้ว ว่า ซีชาร์ปเป็นประเภท สเตติก คือ ต้องประกาศตัวแปรให้แน่ชัดก่อนว่าเป็นชนิดข้อมูลอะไร (โดยหลักการ แต่ในทางปฏิบัติอาจเป็นอีกอย่างหนึ่ง) และประเภท ไดนามิก ตรงกับข้ามกับสเตติก นั้น เอง เหตุที่ซีชาร์ปเลือกที่จะเป็นแบบนี้ เพราะต้องการให้มีความปลอดภัยในการเขียนโปรแกรม ซึ่งเรียกอีกทีว่า ไทป์เซฟ แต่ในบางครั้ง อยู่นอกเหนือความสามารถของซีชาร์ป เพราะขณะรันไทป์ (ขณะที่โปรแกรมกำลังทำงานอยู่) ชนิดข้อมูลอาจไม่แน่นอนได้ ซึชาร์ปก็มีการป้องกันได้ด้วยการสร้างชนิดข้อมูลแบบ เจเนอริกได้อีก เพื่อคง ไทป์เซฟไว้ ลักษณะเช่นนี้เรียกอีกทีว่า สตรองไทป์ เป็นการป้องกันขนณะรันไทป์ C# Programming with Visual C# 2010 Express

4 ชนิดข้อมูลใน C# ชื่อ คำอธิบาย ขนาด(ไบท์) ระยะ int จำนวนเต็ม 4
-2,147,483,648 ถึง 2,147,483,647 long 8 -9223,372,036,854,775, ,372,036,854,775,807 float เลขทศนิยม +/- 3.4 x 10^38 double +/- 1.7 x 10^308 decimal หน่วยเงินตรา 16 สามารถระบุเลขทศนิยมได้ 28 หลัก char หนึ่งอักษร 2 ไม่สามารถระบุได้ bool True, False 1 2 ค่า คือ True หรือ False DateTime Date- Time 0:00:00 01/01/ :59:59 ง 12/31/9999 string อักษรหลายตัว 2 ต่อหนึ่งอักษร จากตารางนี้ จะเห็นชนิดช้อมูล พื้นฐาน ที่ให้มาให้แล้ว หรือเรียกว่า built-in type ในดอทเน็ต ชนิดข้อมูลพื้นฐานนี้เรียก อีกชื่อว่า primitive data type ชนิดข้อมูลประเภทนี้ มีเป็นตัวเลขจำนวนเต็ม อยู่ในหลายลักษณะ คือ ตัวเลข จำนวนเต็ม ที่เก็บ แปอดไบท์ เรียก int (มาจากคำว่า Integer) มีช่วง บวกลบ ที่สองพันล้านกว่า ถ้าต้องการเก็บช่วงให้ใหญ่กว่า ก็ใช้ long (มาจากคำว่า long integer) เก็บ แปดไบท์ ตัวเลขทศนิยม มีให้เลือกแบบ float, double, decimal ตัวอักษร มีแบบ char และ string วันที่ ใช้ DateTime และ ค่า True, False ใช้ bool (มาจากคำว่า boolean) ชนิดข้อมูลใดที่ เหมาะสมกับตัวเลขจำวนเต็มทั่วไปมากที่สุด คำตอบคือ int นักอะไรไม่ออก ก็กำหนดเป็น int ไว้ก่อน มีข้อสังเกตประการหนึ่งว่า ชนิดข้อมูล bool มีค่าเป็น true กับ false มิใช่เป็น 0 หรือ 1 คำถาม ถ้าต้องการจะเก็บช้อมูล ในรูปแบบอักษร หลายตัว จะเก็บด้วยชนิดข้อมูลอะไรดี C# Programming with Visual C# 2010 Express

5 Common Type System (CTS)
Reference Type Value Type User- defined Type Built-in Type ในบรรดา ชนิดช้อมูลทั้งหมด ที่เรียกรวมว่า ไทป์ นั้น แยกออกเป็นสองลักษณะคือ วาลูไทป์ กับ เรฟเฟอร์เร็นไทป์ ความแตกต่างของสองชนิดข้อมูลนี้ อยู่ที่การนำไปเก็บในหน่วยความจำของคอมพิวเตอร์ เรฟฯ ไทป์ เก็บข้อมูลในลักษณะฮีป (ใช้การอ้างอิงตำแหน่งข้อมูล ด้วยเพอร์เตอร์ อยู่ในรูปโครงสร้างข้อมูลรูปต้นไม้) ส่วน วาลูไทป์ ใช้การอ้างอิงข้อมูลในลักษณะสะแต็ก (ใช้ การอ้างอิงข้อมูล ด้วย อะเรย์ อยู่ในรูปโครงสร้างข้อมูลแบบแถวลำดับชั้นเดียว) การเข้าถึงข้อมูล ของสองชนิดนี้จึงต่างกัน การอ้างอิงข้อมูลใ นรูปแบบฮีป ใช้กับ ช้อมูลที่เป็น อ๊อปเจ็ก เป็นหลัก ส่วน รูปแบบ แวลูไทป์ ใช้กับ ดังนั้นเมื่อใช้แบบเรพฯ จึง สามารถอ้างอิงได้หลายครั้ง ส่วนแวลูไทป์ เก็บข้อมูลค่าของตนเองไว้ที่ตนเอง แต่มีข้อสังเกตเพิ่มเติมว่า string แม้อยู่ใน built-in data type แต่ยกเว้น ว่าเป็น เรฟฯ ไทป์ มีข้อแตกต่างอีกประการหนึ่งของ แวลูไทป์ กับ เรฟฯ ไทป์ คือ แวลูไทป์ กำหนดให้มีค่าเป็น null ไม่ได้ ค่า null แปรว่า ว่างเปล่าไม่ได้ เช่น บอกให้ ค่า int มีค่าเป็นความว่างเปล่า ไม่ได้ แต่บอกให้ ค่า เรฟฯ เป็นค่าว่างเปล่าได้ ในแวลูไทป์ แบบออกเป็นสองประเภทคือ built-in กับ User defined โดย user defined เป็นการกำหนดข้อมูลในรูปแบบต้นเอง โดยนำมาจาก ข้อมูล built-in มาสร้างใหม่ ให้อยู่ในรูปโครงสร้าง ที่เรียก strut และรุปแบบชุด ที่เรียกว่า enum C# Programming with Visual C# 2010 Express

6 การเก็บชนิดข้อมูลในหน่วยความจำ
String: Int16:21 สัญลักษณะที่ใช้ Int32:55 Char: A Reference Type “Hello” Value Type Stack Heap รูปนี้อธิบายการเก็บข้อมูล แวลูไทป์ กับ เรพเฟอร์เร็นไทป์ กรอบสีเข้ม แทน ขนิดข้อมูลแบบ อ้างอิง (เรพเฟอร์เร็นไทป์) และกรอบสีไม่เข้ม แทน ชนิดข้อมูล แบบแวลูไทป์ ชนิดข้อมูลแบบแวลูไทป์ มีช้อมูลอยู่ที่ตนเอง การครองข้อมูล อยู่ในลักษณะ copy ข้อมูลมา แต่ชนิดข้อมูลแบบอ้างอิง ได้ข้อมูลมาจาก ชี้ตำแหน่ง ซึ่ง ใครก็ชี้ตำแหน่งเดียวกันได้ เนื่องด้วยโครงสร้างการเก็บข้อมูลที่ต่างกัน ทีฝ่ายแวลูไทป์ ใช้ โครงสร้างข้อมูล อะเรย์เป็นหลัก และอีกฝ่ายหนึ่งใช้ ตัวชี้ตำแหน่งเป็นหลัก การดำเนินการของข้อมูลของอ้างอิง จะมีผลกระทบกับ ตัวแปรทุกตัวที่อ้างอิง แวลูไทป์นี้ แวลูไทป์ทุกตัว ได้มาจาก เนมสเปน System.ValueType และ ข้อมูลแบบอ้างอิงทุกตัวได้มาจากแนมสเปส System.Object C# Programming with Visual C# 2010 Express

7 ตาราง 3.2 คีย์เวิร์ด ที่เป็นชื่อพ้องกับชนิดข้อมูล
ชื่อที่ใช้แทนใน struct type sbyte System.SByte byte System.Byte short System.Int16 ushort System.UInt16 int System.UInt32 uint System.Int64 char System.Char float System.Single double System.Double bool System.Boolean decimal System.Decimal Built-in value type เป็นชนิดข้อมูลพื้นฐาน หรือ Simple type ชื่อของชนิดข้อมูลเหล่านี้ เป็นคำสงวน ที่ นำไปเป็นชื่อตัวแปรไม่ได้ ชื่อคำสงวน เหล่านี้ มีชื่อพ้องกัน ที่ถือเป็นคำสงวนเช่นเดียวกัน เช่น byte มีคำพ้องกับ Byte (ภาษาซีชาร์ป ตัวอักษรเล็กใหญ่ มีความหมายต่างกัน ไม่เหมือนภาษาเบสิก ทีเล็กใหญ่เหมือนกัน) byte เป็นชนิดข้อมูล พื้นฐาน แต่ Byte เป็นชนิดช้อมูลแบบ struct แบบเดียวกับ user defined type ในตารางนี้ แสดงให้เห็น เปรียบเทียบ คำสงวนต่างๆ ที่เป็นชนิดข้อมูลพื้นฐาน กับ ชนิดข้อมูลแบบ struct ชนิดข้อมูลสองแบบเหล่านี้ใช้แทนกันได้ C# Programming with Visual C# 2010 Express

8 ตัวอย่าง การประกาศใช้ชนิดข้อมูลแบบต่างๆ
static void Main(string[] args) { int _int = 0; string _str = null; bool _bool= true; decimal _dec = M; double _dou = 0.00d; char _chr = 'a'; Console.WriteLine("_int = {0}", _int); Console.WriteLine("_str = {0}", _str); Console.WriteLine("_bool = {0}", _bool); Console.WriteLine("_dec = {0}", _dec); Console.WriteLine("_dou = {0}", _dou); Console.WriteLine("_chr = {0}", _chr); Console.ReadLine(); } นี้เป็นตัวอย่างโปรแกรม และผลจากการรันโปรแกรม แสดงผลชนิดข้อมูลแบบต่างๆ using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program static void Main(string[] args) int _int = 0; string _str = null; bool _bool= true; decimal _dec = M; double _dou = 0.00d; char _chr = 'a'; Console.WriteLine("_int = {0}", _int); Console.WriteLine("_str = {0}", _str); Console.WriteLine("_bool = {0}", _bool); Console.WriteLine("_dec = {0}", _dec); Console.WriteLine("_dou = {0}", _dou); Console.WriteLine("_chr = {0}", _chr); Console.ReadLine(); } C# Programming with Visual C# 2010 Express

9 การประกาศตัวแปร กฏข้อห้ามสำหรับการประกาศตัวแปร คือ
ใช้ตัวเลขขึ้นต้นชื่อตัวแปรไม่ได้ ใช้คีย์เวิร์ดแทนชื่อตัวแปรไม่ได้ คำแนะนำสำหรับการประกาศชื่อตัวแปร ซึ่งไม่ผิดกฏ ควรใช้อักษรพิมพ์เล็ก เป็นอักษรเริ่มต้น และอักษรในคำ ความหมายใหม่ ใช้อักษรพิมพ์ใหญ่เช่น myInt ไม่ควรใช้คีย์เวิร์ด ที่เลี่ยงไปใช้อักษรพิมพ์เล็กหรือใหญ่ เพื่อให้ เกิดความแตกต่าง สำหรับชื่อตัวแปรที่เป็นชื่อ เมทธอด หรือชื่อคลาส นิยมใช้ อักษรพิมพ์ใหญ่ขึ้นต้น เช่น MyClass ควรใช้ชื่อตัวแปรที่มีความหมายเพื่อความเข้าใจง่าย ชื่อตัวแปรค่าคงที่ ควรเป็นอักษรพิมพ์ใหญ่ ก่อนใช้งานตัวแปรต้องทำการประกาศใช้งานตัวแปร เพื่อเตรียมหน่วยความจำที่รองรับการใช้งานตัวแปร มีกฎการประกาศตัวแปร และแนวทางใช้ชื่อตัวแปร กฎห้ามแรกในการใช้ชื่อตัวแปร ใช้ชื่อตัวแปร เริ่มต้นเป็นตัวเลขไม่ได้ เช่น ใช้ว่า 1x แบบนี้ไม่ได้ หรือ 1_x ก็ไม่ได้ ใช้คีย์เวิร์ด เป็นชื่อตัวแปรไม่ได้ เช่น ใช้คำว่า string หรือ String ก็ไม่ได้ คำแนะนำในการตั้งชื่อตัวแปร ถึงแม้ไม่ผิดกฎ แต่ทำให้ไม่อยู่รูปแบบธรรมเนียม ที่คนส่วนใหญ่ใช้กัน ถึงถ้าเขียนเพื่อให้ตัวเอง อ่านคนเดียว ก็ยังไม่เหมาะสมอยู่ดี เพราะอาจมีให้ตัวเอง งง เอง ภายหลังได้ เพราะความไม่แน่นอน ในรูปแบบ ที่ตนเองไม่มีหลักยึดถือ นั้นเอง แนวทางที่แนะนำนั้นมีอยู่ว่า ใช้อักษรพิมพ์เล็ก เป็นตัวเริ่มต้นตัวแปร เช่น customer สำหรับสมาชิกทั่วไป หรือตัวแปรทั่วไป แต่ถ้าต้องการรวมคำสองคำเป็นชื่อตัวแปร ควรใช้ อักษรพิมพ์ใหญ่เริ่มต้นในคำที่สอง เช่น customerName บางที่ อาจใช้ customer_number สำหรับภาษาที่ไม่สนับสนุน การมีความแตกต่าง ระหว่างอักษรพิมพ์เล็ก และพิมพ์ใหญ่ แต่ภาษาซีขาร์ป พิมพ์เล็ก ใหญ่ไม่เหมือนกัน จึงใช้แบบ customerName ดีกว่า ประหยัดที่ไปหนึ่งที่ด้วย ไม่ควรใช้อักษร เล็ก หรือใหญ่ เพื่อแยกความแตกต่างระหว่างคีย์เวิร์ดที่ต้องการใช้ เช่น if เป็นคีย์เวิร์ด จะใช้ชื่อตัวแปรว่า IF ไม่เหมาะ จะทำให้สับสนในตนเองภายหลังได้ C# Programming with Visual C# 2010 Express

10 หรือจะประกาศพร้อมกันหลายตัว ที่มีชนิดข้อมูล เหมือนกันก็ได้ เช่น
ชื่อ พร็อปเพอร์ตี้ ชื่อคลาส ชื่ออินเทอร์เฟส และเมธอด ใช้อักษรพิมพ์ใหญ่นำหน้า เช่น MyMethod, MyProperty ควรใช้ชื่อตัวแปรที่สื่อความหมายเข้าใจได้ง่าย เพราะเดี่ยวนี้ การประกาศชื่อตัวแปรไม่จำกัดขนาด เหมือนยุคเก่า และอีกอย่าง การใช้ชื้อตัวแปร ที่ยาวขึ้นอีกหน่อยแต่เข้าใจได้ง่าย มี intellisense ช่วยในการเขียนได้สะดวกขึ้น เช่น ตั้งว่า customerName ดีกว่า cusName อย่างไรก็ตาม นี้เป็นเพียงคำแนะนำเท่านั้น ชื่อตัวแปรค่าคงที่ นิยมใช้เป็นอักษรพิมพ์ใหญ่ เช่น MY_NUMBER จะใช้อักษรชีดเส้นใต้ เชื่อมคำระหว่างคำที่แตกต่าง สำหรับวิธีการประกาศ จะใช้ ชนิดข้อมูลนำหน้า (ถ้ายังไม่ระบุตัวควบคุมการเข้าถึง เช่น public, private) แล้วตามด้วย ชื่อตัวแปร เช่น int id; string name; หรือจะประกาศพร้อมกันหลายตัว ที่มีชนิดข้อมูล เหมือนกันก็ได้ เช่น int id, number; หรือจะประกาศตัวแปร พร้อมกับ กำหนดค่าเริ่มได้เลย ก็ได้ เช่น int id = 1; มีข้อสังเกตอย่างหนึ่ง การประกาศ ตัวแปร แต่ยังไม่กำหนดค่าเริ่มตัน จะนำตัวแปรนั้นไปดำเนินการ จะทำไมได้ ไม่เหมือนกับภาษา วีบี ที่ สามารถนำไปใช้ได้แม้ยังไม่กำหนดค่าเริ่มต้น โดยจะกำหนดค่าเริ่มต้นให้ ที่เป็นค่าปริยาย เช่น int ค่าปริยาย คือ ศูนย์ ซีชาร์ป จะไม่กำหนดค่าปริยายให้ จึง ทำให้ ไม่สามารถดำเนินการต่อได้ จะต้องกำหนดค่าเริ่มต้นให้ก่อน นำไปใช้งาน C# Programming with Visual C# 2010 Express

11 var v = new { Amount=108, Message="Hello" };
Anonymous Type Value Type var myInt = 2; Class var v = new { Amount=108, Message="Hello" }; Array var anonArray = new[] { new { name = “A"}, new { name = “B" }}; การประกาศตัวแปรที่ยังไม่แน่ใจ ชนิดตัวแปร หรือไทป์ เรียกว่าอโนนิมัสไทป์ อโนนิมัสไทป์สามารถประกาศได้โดยใช้คีย์เวิร์ด “var” และต้องกำหนดค่าเริ่มต้นให้เพื่อให้กำหนดชนิดตัวแปรเริ่มต้นให้ และใช้เป็นชนิดตัวแปรตามค่าเริ่มต้นตลอด ไม่สามารถเปลี่ยนได้ภายหลัง การประกาศตัวแปรแบบนี้เรียกว่า “Implicit” ซึ่งตรงกันข้ามกับการประกาศแบบระบุชนิดตัวแปรทันที่ซึ่งเรียกว่า “Explicit” อโนนิมัส มีใช้ประกาศตัวแปรได้หลายแบบ อ่านๆ ไปจะพบมากขึ้นเรื่อยๆ การประกาศแบบนี้ก็ดูสะดวกดี แต่มันใช้ทรัพยากรเครื่องเยอะ ซึ่งไม่น่าใช้ แต่ บางที่ก็ควรใช้ เช่น การประกาศ ใช้แบบเร่งด้วย เฉพาะกิจ ใช้ทีเดียวแล้วเลิก จะพบใช้กับ เมธอด คลาส อะเรย์ และบางที่ก็จำเป็น เช่น ใช้กับ Linq ตัวนี้จะพบในบทสุดท้าย ซึ่งเป็นสุดยอดของดอทเน็ต ในหนังสือเล่มนี้ ที่ทำให้โลกการเขียนโปรแกรมน่ารักขึ้นเยอะเลย เปรียบได้ดัง สมัยก่อน เดินทางใช้เกวียน ปัจจุบันใช้ รถยนต์ อ่านถึงบทสุดท้าย น่าจะรู้สึกอย่างนั้นได้ การใช้ var ประกาศ ณ ตอนนี้ จะยังไม่ค่อยเห็นอะไร ที่มีประโยชน์มากนัก แต่มันมีบทบาทสำคัญ ในบทอื่นๆ ต่อไป LINQ var productQuery = from prod in products select new { prod.Color, prod.Price }; C# Programming with Visual C# 2010 Express

12 การแปลงชนิดชนิดไทป์ การแปลงชนิดข้อมูลมีสองลักษณะที่ทำได้
Casting ใช้แปลงชนิดข้อมูลในกลุ่มเดียวกัน Boxing ใช้แปลชนิดข้อมูลข้ามกลุ่มกัน แปลงชนิดข้อมูลมีสองวิธีคือ Implicit เป็นการแปลงทางอ้อม CLR จะทำให้อัตโนมัติ Explicit เป็นการแปลงทางตรง ที่จะเขียนชนิดข้อมูลที่ แปลง int a = 4; double b; b = a //Implicit conversion of int to double b = (int) a; //Explicit conversion (casting) of int to double การแปลงชนิดข้อมูลหนึ่ง ไปยังชนิดข้อมูลหนึ่ง เป็นเรื่องมีบ่อยในการเขียนโปรแกรม เช่น การรับข้อมูลจากคีย์บอร์ด หรือการรับขอมูล จาก เท็กบ๊อก ซึ่งเป็นชนิดข้อมูลอักษร ต่อมาแปลงไปเป็นตัวเลข อย่างนี้ชนิดข้อมูลเปลี่ยนไปเป็นชนิดข้อมูลใหม่ ลักษณะนี้เรียกว่า เฉพาะว่า การทำ boxing การเปลี่ยนชนิดข้อมูล มีสองลักษณะ คือ ๑ การแปลงชนิดช้อมูล กลุ่ม แวลูไทป์ ด้วยกัน เรียกว่า casting เช่น แปลงจาก int ไปเป็น bouble ๒ การแปลงชนิดข้อมูล จากกลุ่ม reference type ไปสู่ แวลูไทป์ เรียกการแปลงแบบนี้ว่า boxing ในการทำบ๊อกซิ่งนี้จะพบมาก เกี่ยวกับเรื่องของ อ๊อบเจกต์ ในการแปลงชนิดข้อมูล casting อาจทำให้ข้อมูลขาดหายได้ เช่น แปลง จาก เลขทศนิยม ไปเป็นเลขจำนวนเต็ม การแปลงแบบนี้ จะต้องเขียน โปรแกรม บังคับให้ทำงาน เพราะข้อมูลที่สูญหาย C# จะไม่อนุญาตให้ทำอัตโนมัติ การแปลงแบบบังคับเปลียนนี้เรียกว่า explicit ถ้ามีการแปลงแล้วข้อมูลไม่สูญหาญ อาจแปลงได้เลยโดยที่ไม่ต้องเขียนโปรแกรมบังคับ เพราะข้อมูลไม่สูญหาย เช่น แปลงจาก เลขจำนวนเต็ม (int) เป็นเลขทศนิยม (double) ลักษณะการแปลงแบบนี้เรียกว่า Implicit จากตัวอย่างโค้ด นี้แสดงให้การเขียนโปรแกรมการแปลงชนิดข้อมูลทั้งสองอย่าง C# Programming with Visual C# 2010 Express

13 ตาราง 3.4 การแปลงค่าแบบอิมพลิสิท
sbyte short, int, long, float, double, decimal byte short, ushort, int, uint, long, ulong, float, double, decimal short int, long, float, double, decimal ushort int, uint, long, ulong, float, double, decimal int long, float, double, decimal uint long, ulong, float, double, decimal long, uling float, double, decimal float double char ushort, int, uint, long, ulong, float, double, decimal ตารางนี้ แสดงการแปลงชนิดข้อมูลแบบ อิมพลีสิต คือแปลงแบบไม่ต้องระบุโดยตรงก็ได้ ซึ่งรับประกันว่าข้อมูลไม่สูญหาย ดูอย่างตัวแรก ชนิดช้อมูล อักษร sbyte เป็นชนิด ตัวเลขจำนวนเต็มขนาดเล็ก คือ มีขนาด แปดบิท ลองคิดว่า แปดไบท์ จะเก็บเลขได้ขนาดเท่าใด ลอง ใช้ สองยกกำลัง แปด ดู ผลคือ .... สองห้าหก ดังนั้นตัวเลข มีความแตกต่างได้แค่นี้ เอสไบท์ มีช่วงข้อมูล อยู่ในช่วง -128 ถึง 127 มีค่ารวม กัน ทุกตัว เป็น สองห้าหกไม่ ดังค่าที่ทราบช่วงของ เอสไบท์แล้วนั้น เมื่อต้องแปลงไปเป็น shot เป็น signed 16 bit integer ซึ่งมีช่วงข้อมูลที่มากกว่า เอสไบท์ ถึงสองเท่า ดังนั้นการแปลง ข้อมูล จาก เอสไบท์ ไปเป็น ช๊อท ย่อมไม่ทำให้ชนิดข้อมูลสูญหายได้ ส่วนชนิดข้อมูลอื่นๆ ก็เช่น กัน ดังเป็นตามตาราง ชนิดข้อมูลใด มีช่วงเท่าใด เราทราบหมดไม่ได้ แต่ไม่เป็นไร เมื่อต้องใช้งานจริง ลองถาม google ดูว่ามีช่วงเท่าไหร่ ลองตอบซิว่า ชนิดข้อมูล short แปลงไปเป็น sbyte ได้หรือไม่ ถ้าได้ ทำอย่างไร C# Programming with Visual C# 2010 Express

14 เมธอด TryParse( ) int number = 0; string numberString = "1234";
if (int.TryParse(numberString, out number)) { Console.WriteLine("Conversion succeeded"); Console.WriteLine(number); } else Console.WriteLine("failed"); นอกจากการแปลงข้อมูลแบบ อิมพลิสิท แล้ว ยังมีวิธีที่ดีกว่า การแปลงแบบอิมพลิสิท คือการใช้ system.convert class ทราบไหมว่า การแปลงแบบอิมพลิสิท มีข้อเสียอะไร การใช้ system.convert คลาส มี เมท็อด (method) ช่วย ในการแปลง เช่น int a = 1; string s; s = a.toString(); และยังมี เมธอดอื่นที่สนุบสนุนการแปลงชนิดข้อมูลมากมาย เราไม่ต้องจำว่ามีอะไร บ้าง เราจะใช้ intellisense ของ vc# ช่วย หาให้ โดยการพิมพ์ จุด หลัง ตัวที่ต้องการแปลง ระบบจะขึ้นเมท็อดการแปลงให้อัตโนมัติ นอกจากนี้ยัง ใช้เมธอด tryParse( ) ทดสอบการแปลงค่าว่าแปลงได้ จะคืนค่า true ถ้าแปลงไม่ได้จะคีนค่า false เราใช้สเตทเม้น if ทดสอบ การแปลงของเมท็อดนี้ เมท็อดนี้ มีตัวแปลเข้าสองตัว ตัวแรก numberString เป็นที่ต้องการแปลง ตัวที่สองคือ number เป็นตัวแปรส่งออกผลลัพธ์การแปลงชนิดข้อมูล C# Programming with Visual C# 2010 Express

15 ขอบเขตของตัวแปร Block เป็นระดับที่เล็กที่สุด เช่น บล็อกของ ของคำสั่ง if, while Procedure เป็นระดับเมทธอด พล็อบเพอร์ตี้ ตัวแปร ภายในโพรซีเตอร์จะใช้ได้เฉพาะโพรซีเดอร์นี้เท่านั้น if (x > 10) { int x = x * x; } void WhatYourName( ) { string name = Console.Read( ); Consoel.Writeln("Hello " + name); } เมื่อเราประกาศตัวแปร ตัวแปรที่ประกาศนั้น ใช้ได้อยู่ในขอบเขตใด เป็นเรื่องที่ต้องทำความเข้าใจ เพราะทำให้เรา ใช้ตัวแปร อยู่ขอบเชตใด เพื่อได้จะนำไปใช้ได้อย่างถูกต้อง ความจริงในการเขียนโปรแกรม ด้วย วิชชวล ซีชาร์ป ตัวแปรใดที่อยู่ขอบเขตที่นำไปใช้ได้ วิชชวล ซีชาร์ป จะบอกให้ทราบถึงความผิดพลาดอยู่แล้ว ทำให้เราต้องแก้โปรแกรม ได้ไม่ยาก แต่ก็มีบางครั้ง โปรแกรมไม่ได้บอกให้ทราบ เพราะมีตัวแปร นั้นมีชื่อเหมือนกัน แต่ของคนละชอบเขตกัน (ในระดับเดียวกัน ซึ่งจะมีอธิบายเพิ่มเต็ม ในระดับสุดท้าย ) จึงใช้แทนกันได้ โดยที่เรายังคงเข้าใจอะไรผิดไปเอง ซึ่งก็จะทำให้การเขียนโปรแกรมของ ผิดพลาดแบบ Logic error ขอบเขตแรกที่เล็กที่สุด เรียกว่า ตัวแปรระดับท้องถิ่น (local variable) เป็นตัวแปรที่อยู่ในบล็อก ของสแตทเม้นท์ต่าง เช่น สแตทเม้นท์ if, while, do, switch และอื่นๆ ที่จะได้เรียนในบทที่สี่ ตัวแปรเหล่านี้ใช้ได้เฉพาะในสแตทเน้นท์นี้เท่านั้น เช่น ตัวอย่าง การใช้ if มีตัวแปร x ที่ถูกประกาศภายในบล็อกนี้ ก็มีค่าใช้ได้ภายในบล็อกนี้เท่านั้น ขอบเขตต่อมา เรียกว่า โปรซีเดอร์ ใช้งานได้หลายแบบ เช่น เมท็อด พร็อปเพอร์ตี้ ตัวแปรจะอ้างอิงได้ในระดับเมท็อด หรือพร็อปเพอร์นี้ เท่านั้น ใช้อ้างอิง ภายนอกเมท๊อด หรือพร็อปเพอร์ตี้ไม่ได้ C# Programming with Visual C# 2010 Express

16 ขอบเขตของตัวแปร (ต่อ)
Module เป็นการอ้างอิงในการใช้สมาชิกในโมดูล ที่มี ทั้ง สมาชิกของโมดูล โพรซีเดอร์ บล็อก และคลาส มักใช้กับตัวแปรที่ประกาศเป็น private public class Person { private string name; public void SetName(string x) name = x; } public string GetName( ) return name; ขอบเขตก่อนสุดท้าย คือระดับ โมดูล หรือ หรือระดับภายในคลาส สมาชิก มักนิยมเขียนเป็น ประเภท private เช่น Private string name; มีตัวแปรชื่อ name มีชนิดข้อมูลเป็น string การเข้าถึงได้ เป็น private อยู่ในคลาส Person ตัวแปรนี้ ใช้ได้ในคลาสนี้ ใช้ใน โปรซีเดอร์ และใช้ได้ในระดับบล็อกด้วย เพราะตัวแปรในระดับโมดูล นี้ใหญ่กว่า เหมือน เป็นพื้นรวม ที่ทุกคนนำไปใช้ได้ ในตัวอย่างนี้ ตัวแปร name นำไปใช้ได้ ใน เมท๊อด GetName และ SetName C# Programming with Visual C# 2010 Express

17 ขอบเขตของตัวแปร (ต่อ)
Namespace เป็นการอ้างอิงในระดับที่กว้างที่สุด ที่มีทั้งระดับ บล็อก โพรซีเดอร์ และโมดูล มักใช้คีย์เวิร์ด public ที่ทำ ให้คลาสอื่นๆ สามารถใช้งานตัวแปรในทุกส่วนภายใน เนมสเปสเดียวกันได้ namespace ConsoleApplication1 { class Program { static void Main(string[] args) { Person p1; // สามารถใช้ Person ได้ เพราะ มีคีย์เวิร์ด public นำหน้า Person } public class Person { private string name; public void SetName(string x) { name = x; ตัวแปรในระดับสุดท้าน คือ ในระดับ เนมสเปส ที่ใหญ่ ที่สุด หรือระดับคลาส เนมสเปน เปรียบเหมือนกับ ห้องบ้าน และห้องแต่ละห้อง เปรียบได้ดับคลาส ในตัวอย่างนี้ คลาส Program กับ Person อยู่ใน เนมสเปส ConsoleApplication สังเกตว่า คลาส โปรแกรม มีการเรียกใช้ คลาส Person ได้ เพราะ ตัวแปรคลาส Person อยู่ในเนมสเปสเดียวกับคลาส Program มีข้อระวัง การสร้างชื่อตัวแปร พยายามให้ชิ่อตัวแปร ซ้ำกัน ในระดับขอบเขตที่ต่างกัน เพราะซีชาร์ป ไม่อนุญาตให้ทำอย่างนั้น เช่น ตัวอย่างในหน้า 84 แต่สามารถมีชื่อตัวแปรซ้ำกันได้ ในระดับเขตเขตที่เท่ากัน คำถาม : หน้า 84 ที่ผิดพลาด ควรแก้อย่างไร C# Programming with Visual C# 2010 Express

18 ค่าคงที่ และตัวแปรอ่านได้อย่างเดียว
ตัวแปรค่าคงที่ (Constant variable) จะต้องระบุค่าเริ่มต้น ด้วย ณ ตอนประกาศค่าตัวแปร ตัวแปรอ่านได้อย่างเดียว (Read-only variable)จะต้องระบุ ค่าเริ่มต้นด้วย ณ ตอนประกาศค่าตัวแปร หรือระบุตอน สร้างคอนสตรักเตอร์ (constructor) เมทธอดคอนสตรัก เตอร์จะทำงานตอนสร้างวัตถุ class Program { readonly int y; //read-only variable Program() //constructor { y=1; } static void Main(string[] args) { Program p = new Program(); const int x=2; //constant variable } ตัวแปรสองตัวนี้ คล้ายกัน เกืบเหมือนกันทีเดียว มาดูว่ากันว่ามีคืออะไรก่อน ตัวแปร ค่าคงที่ ก็คือตัวแปรที่เปลี่ยนแปลงค่าไม่ได้ เป็นค่าตายตัวตลอดโปรแกรมทำงาน ตัวแปร อ่านได้อย่างเดียว ก็เปลี่ยนแปลงค่าไม่ได้เช่น กัน ให้อ่านได้อย่างเดียว เหมือนกันใช่ใหม่ ครับ(ค่ะ) มีสิ่งต่างที่สังเกตง่ายที่สุด ตัวแปร ค่าคงที่ ใช้ คีย์เวิร์ด const และตัวแปรอ่านได้อ่านได้อย่างเดียวใช้คีย์เวิริ์ด readonly จริงๆ แล้ว สองตัวนี้ใช้งานได้เหมือนกัน ความต่างนอกจากคีย์เวิร์ด แล้ว ต่างที่ใดอีก ให้ลองสังเกตจากโปรแกรมตัวอย่าง ? สังเกตว่า การประกาศเริ่มต้น ของสองตัว ต่างกัน ตัวหนึ่งประกาศทันที ที่ประกาศตัวแปร ตัวนั้นคือ const int = 2; แต่อีกตัวหนึ่งประกาศ ผ่าน เมท็อด คอนสตรักเตอร์ (คอนสตรักเตอร์ คือเมท็อดที่มีชื่อเหมือนคลาส) readonly int y; ซึ่งจะประกาศแบบ ประกาศตัวแปรค่าคงที่ก็ได้ มีสถานการณ์ใดบ้าง ที่เราใช้ประโยชน์จาก ความแตกต่างนี้ C# Programming with Visual C# 2010 Express

19 การดำเนินการของข้อมูล
การดำเนินการกับตัวแปร หรือที่เรียกว่า เอ็กเพรสชัน (Expression) ประกอบด้วย ตัวถูกดำเนินการ (Operands) ตัว ดำเนินการ (Operator) ตัวอย่างเช่น a + b โดยที่ a, b เป็น Operands และ + เป็น Operator เปรียบเทียบ ==, !=, < >, <=, >=, is ใช้เปรียบเทียบ ได้ผลลัพธ์เป็น จริง หรือ เท็จ เช่น 5==1 ได้ผลเป็นเท็จ เงื่อนไข ?: เงื่อนไข เปรียบเทียบ ระหว่างตัวถูกดำเนินการสองตัว ถ้าเป็นจริง ได้ผลลัพธ์แรกก่อนเครื่องหมาย “:” แต่ถ้าเป็นเท็จได้ผลลัพธ์หลังเครื่องหมาย “:” เช่น a>b?a:b เพิ่ม หรือลด ค่า ++, -- เพิ่มค่าทีละหนึ่งค่า หรือลบค่าทีละหนึ่งค่า การดำเนินทางคณิตศาสตร์ +, - , *, /, % เป็นการดำเนินการทางคณิตศาสตร์ เช่น บวก ลบ การดำเนินการ ของข้อมูล เมื่อเขียนเป็นประโยค เรียกสวยๆ ได้ว่า expression เช่น a + b และเรียก a, b ว่าเป็น operands เครื่องหมาย + ว่า เป็น Operator ซีชาร์ป การดำเนินการได้หลายแบบ และครบครั้น ซึ่งเราก็พอจะรู้จักกันมาบ้างแล้ว แต่ นั้นยังไม่พบ ยังตัวดำเนินการอื่นๆ อีก ที่น่านำไปใช้ เช่น กาใช้เงื่อนไข ?: เป็นเปรียบเทียบอย่างสั้น แทนการใช้ if ได้ แต่ไม่ทั้งหมด ตัวอย่างการใช้เช่น a>b? a:b ถ้าเอ มากกว่า บี ใช้ผลลัพธ์ เอ แต่ถ้าไม่ใช้ ใช้ผลลัพธ์ บี แทน ลองดูตัวอย่างโปรแกรมนี้ คิดว่า จะพิมพ์ค่าอะไรที่หน้าจอ int a = 1; int b =2; Console.WriteLine(a > b ? a.ToString() : b.ToString()); นอกจากนี้ตัวดำเนินการหน้านี้ ยังมีตัวดำเนินการอื่นๆ อีก จากตาราง 3.4 พร้อมตัวอย่างการใช้ C# Programming with Visual C# 2010 Express

20 การดำเนินการทางคณิตศาสตร์อย่างลัด
var += expression; // var = var + expression var -= expression; // var = var - expression var *= expression; // var = var * expression var /= expression; // var = var / expression var %= expression; // var = var % expression item[(index + 1) % 32] = item[( idex + 1) % 32 ] + 1 หน้านี้แสดงวิธีทำการใช้ ดำเนินการอย่างสั้น เช่น a = a + 1 มีความหมายเหมือนกัน กับ a +=1 ซึ่งได้กับ เครื่องหมาย ทางคณิตศาสตร์ คือ บวก ลบ คูณ หาร และ เอาส่วนที่เหลือ (%) การเขียนลัดแบบนี้ใช้สะดวกดี และทำให้อ่านโปรแกรมได้ง่ายขึ้น เมื่อ มีเอกเพรสชัน ยาวๆ ดังตัวอย่าง การบวก ของ item[(index + 1) %32] Item ตัวนี้ เป็นอาร์เรย์ และภายในอาร์เรย์ ยังมีการดำเนินการภายในอีก การเพิ่มค่าที่ละหนึ่ง ของชุดนี้ ดูจะอ่านยาก ถ้าใช้วิธีการบวกแบบ ไม่ลัด แถมบางทีอ่านเขียนโปรแกรม ตกหล่นได้อีก การใช้วิธีบวกลัด ดัง บรรทัดต่อมา จะอ่านง่าย กว่า คำถาม คำสั้งต่อไปนี้ จะพิมม์ว่าอะไรที่หน้าจอ int a = 1; int b =2; a += 2; Console.WriteLine(a > b ? a.ToString() : b.ToString()); = item[(index + 1) % 32] += 1; C# Programming with Visual C# 2010 Express

21 ตาราง 3.5 ตารางความจริง Value AND OR True False
สำหรับการดำเนินทางตรรกะ จะใช้ความพื้นฐานของ ตารางความจริง เช่น การใช้ตรรกะเปรียบเทียบการใช้ คำพูดว่า (คนเป็นสัตว์เลือดเย็น) และ (คนเป็นสัตย์เลี้ยง ลูกด้วยนม) มีเท่ากับ False AND True = False Value AND OR True False ตารางความจริงนี้ ควรทำความเข้าใจให้ดี ว่าอะไรจริง อะไรเท็จ เพราะจะใช้กับ การดำเนินการทาง ตรรกะ เช่น (คนเป็นสัตว์เลือดเย็น) และ (คนเป็นสัตย์เลี้ยงลูกด้วยนม) มีเท่ากับ False AND True = False เท็จ และจริง ผลคือ เป็นไม่จริง (เท็จ) เทียบได้กับตาราง ถ้า a = 4, b = 5 (a > 4) or (b = 5) = false OR true = true คำถามว่า ม.เทคโนโลยีราชมงคลรัตนาโกสิน มีวิทยาเขต อยู่ หัวหิน และ กาญจณบุรี ประโยคนี้จริงหรือเท็จ มีนักศึกษาบางมหาวิทยาลัย ทำโปรเจ็ก ลอกกันยกรุ่น และ ไม่สร้างคุณภาพแก่นักศึกษา อาจารย์ก็ให้ผ่านได้ ประโยคนี้จริงหรือเท็จ (แต่ไม่เกี่ยวกับดีไม่ดี เพราะนอกของเขตของตรรกศาสตร์ และวิชานี้) C# Programming with Visual C# 2010 Express

22 ตัวอย่างการดำเนินการทางตรรกะ
ทดสอบการใช้ตรรกะ OR bool a, b, c; a = true; b = true; c = false; Console.WriteLine(a | b | c); // Print True ทดสอบการใช้ตรรกะ Short OR bool a, b, c; a = true; b = true; c = false; Console.WriteLine(a || b || c); // Print True นอกจาก จะมีการบวกลัด แล้ว การใช้ตัวดำเนินการของตรรกะลัด ก็ทำได้ เช่น การทดสอบ short OR ของ ตัวแปร a, b, c ที่มีค่าเป็น จริง จริง และเท็จ ทั้งสามตัวดำเนินกัน ตามลำดับ ซึงเราทราบอยู่แล้ว ว่า การดำเนินการของ หรือ (or) ถ้ามีตัวหนึ่ง เพียงตัวเดียว เป็น จริง ประโยคเอ็กเพรสชันนั้น จะเป็นจริงหมด ไม่ทดสอบตัวอื่น ที่เหลืออีกต่อไป การใช้ shortOR ด้วยเครื่องหมายสองขีด ใช้แทน การดำเนินการอย่างสั้นนี้ คำถาม : การดำเนินการอย่างสั้นของ ShortAND (&&) จะหยุดทดสอบทันที่ เมื่อค่าจริง หรือค่าเท็จ ? C# Programming with Visual C# 2010 Express

23 การดำเนินการกับบิท การดำเนินการทางตรรกะ ยังประยุกต์ได้กับบิท ซึ่ง มีตัว ดำเนินการ ^ แทน XOR, ~ แทน Complement, & แทน AND, และ| แทน OR 1 & 1 | 1 ^ 1 ~ 0- การดำเนินการกับบิท เรียกว่า bitwise หรือตัวเลข สามารถทำได้แต่ต้องเข้าใจ การแปลงเป็นเลขฐานสองก่อน เช่น 011 = 0 x 2^ x 2^1 + 1 x 2^0 = = 3 หรือตัวอย่างที่ หน้า 89 เช่น 7 & 85 = 5 ได้เพราะ 7 แทน 111 ในเลขฐานสอง และ 85 แทน ในเลขฐานสอง เมื่อ ใช้ตัวเนินการ & เทียบบิทต่อบิทดังรู้ แรก ให้ 0 แทน เท็จ 1 แทนจริง ศูนย์เจออะไรก็เป็นศูนย์ ได้ผลลัพธ์ ตามรูป ลองสำรวจ การดำเนินการกับตัวออื่น ตามรูปภาพ C# Programming with Visual C# 2010 Express

24 ตัวอย่างการดำเนินการทางตรรกะ
ทดสอบการ bitwise AND int a, b; a = 7; // b = 85;// Console.WriteLine(a & b);//print 5 // ทดสอบการ bitwise XOR int a, b; a = 7; // b = 85;// Console.WriteLine(a ^ b);//print 82 // นี้เป็นตัวอย่างการใช้งานจริง ในกาเชียน โปรแกรม เทียบกับ หน้าที่แล้ว C# Programming with Visual C# 2010 Express

25 ลำดับการทำงานของของตัวดำเนินการ
ลำดับการดำเนินการมี ความสำคัญ เพราะหาก เข้าใจผิด อาจทำให้ เขียนโปรแกรมผิดพลาด โดยไม่รู้ตัวได้ หรือที่ เรียกว่า logic error ตัวอย่างเช่น 5 – 2 * 4 = 5 – 8 = -3 สูงสุด ++, -- (prefix), +, - (unary), !, ~ *, /, % +, - <<, >> <, >, <=, >= ++, != & ^ |, && || , = ต่ำสุด ++, -- (postfix) การดำเนินการของ ข้อมูล มีลำดับ ไม่เท่ากัน เช่น เครื่องหมาย คูณ จะทำก่อนการ บวก หรือลบ เช่น ถ้าเข้าใจว่า 5-2 * 4 ว่าเป็น 3 * 4 = 12 ซึงจะผิด ทั้งที่จริง ควรจะเป็น = -3 ดังนั้นการเข้าใจ พื้นฐาน ลำดับการดำเนินการ จะช่วย ลดความผิด หรือเข้าใจ เรื่องนี้ได้ และพื่อให้การเขียน โปรแกรม มีความผิดพลาดให้น้อยลง หรือ เพื่อให้อ่าน โปรแกรมได้ง่าย จึงควร ที่จะ ใส่เครื่องหมาย วแล็บ แสดง ลำดับการดำเนินการ ให้ชัดเจน เช่น จากตัวอย่างที่ผ่านมา เขียนให้ดูอ่านง่ายได้ว่า 5 – (2*4) อย่างนี้จะอ่านได้เร็วกว่า แต่อย่างไรก็ตาม ในกรณีที่มี ลำดับ การดำเนิน การ ที่มีหลายตัว ยาว มาก การใส่วงเล็บ ก็จะทำให้ เยอะ จนลายได้ การเข้าใจ ถึงลำดับการดำเนินการจึง ยังคงมีความสำคัญอยู่ เรา อาจไม่โชคดีทุกครั้ง ที่จะมีโปรแกรมเมอร์ เขียนโปรแกรมให้อ่านได้ง่ายๆ คำถาม ตัวตำเนินการ คูณ กับหาร จะทำอะไร ก่อนกัน C# Programming with Visual C# 2010 Express

26 การสร้างชนิดข้อมูลใช้เอง
อีนัม (enum) เป็นชนิดข้อมูลที่เหมาะกับการใช้กับข้อมูลที่ ได้กำหนดเป็นชุดๆ หรือประเภท การกำหนดของอีนัม ใช้คีย์เวิร์ด enum แล้วตามด้วยชื่อตัวแปร และค่าเริ่มต้น เช่น enum Color{Blue, Yellow, Red} สตรัก (struct) เป็นชนิดข้อมูลที่เหมาะกับการเก็บ โครงสร้าง อย่าง เป็นแถว การใช้งานสตรัก เริ่มต้น จากประกาศชนิดข้อมูลด้วยคีย์เวิร์ด stuct แล้วตัวแปรชื่อ ตัวแปร ภายในบล็อก จะประกาศโครงสร้างย่อยๆ สำหรับการเรียกใช้งาน ทำได้เพียงประกาศตัวแปร และ เรียกใช้ด้วยเรียกชื่อตัวแปรและจุดตามด้วยชื่อข้อมูลใน โครงสร้าง การสร้างชนิดข้อมูล ใช้เอง จริง เรียก ตามภาษา อังกฤษ ว่า custom data type แปรตามนั้น อืม มีชนิดแบบที่ตรงปรุงเอง ในตอนนี้ มีชนิดข้อมูล ในแบบปรุงเอง สองชนิด คือ อีนัม กับ สตรัก อีนัม คือ ชุดช้อมูล ที่ต้องการ เก็บ เป็นประเภท อะไรที่เก็บเป็นประเภทบ้าง สิ่งนั้นแหละ ถูกแล้ว ขอยกตัวอย่าง ชนิดข้อมูลที่เป็นประเภท ร้านค้า มีหลายประเภท แยกตามพฤติกรรม การซื้อ กล่าวคิอ ประเภท ร้านสะด้วกซื้อ (เช่น ร้านเซเว็น ร้านขายของชำปากซอย) ประเภท ร้านซูเปอร์ (เข่น ร้าน ท็อป) ประเภทร้าน ไฮเปอร์มาร์ท (เช่น โลตัส) แบบนี้แหละ ที่เหมาะสม สำหรับชนิดช้อมูลประเภท สตรัก ซึ่งมาจากคำศัพท์ ว่าโครงสร้าง ดังนั้นเดาล่วงหน้าได้เลยว่า เหมาะสมกับ โครงสร้างข้อมูลแบบโครงสร้าง ดังนั้นแล้ว เพื่อให้ชัด ขอยกตัวอย่าง ว่าอะไรบ้าง ที่น่าจะเป็นโครงสร้าง เช่น ข้อมูลลูกต้า ที่ประกอบด้วย ชื่อ ที่อยู่ เบอร์โทร เหล่านี้ มองเป็นชุดข้อมูลก็ได้ ในที่นี้ยกตัวอย่าง ให้เห็น แนวการใช้งาน C# Programming with Visual C# 2010 Express

27 ตัวอย่างการใช้อีนัม private enum Color {Blue, Yellow, Red}
static void Main(string[] args) { Color Color1, Color2, Color3; Color1 = Color.Blue; Color2 = (Color)1; //Casting to Color enum Color3 = (Color)2; Console.WriteLine("myColor:{0}", Color1); Console.WriteLine("myColor:{0}", Color2); Console.WriteLine("myColor:{0}", Color3); } C# Programming with Visual C# 2010 Express

28 ตัวอย่างการใช้สตรักต์
public struct Customer { public string name; public string lastName; public string tel; }  static void Main(string[] args) { Customer Ae; Ae.name = "Vilasinee"; Ae.lastName = "Choti"; Ae.tel = " "; Console.WriteLine("Name:{0} {1} tel: {2}", Ae.name, Ae.lastName, Ae.tel); C# Programming with Visual C# 2010 Express

29 ทำถามทบทวน ภาษาซีชาร์ป มีระบบไทป์(Type System) เป็นแบบใด และมี ความหมายไทป์นั้นเป็นอย่างไร จะใช้ชนิดข้อมูลอะไรเก็บอักษรเพียงตัวเดียว การประกาศตัวแปรในข้อใด ไม่สามารถทำได้ และข้อใดไม่ ควรใช้ char 5Letter; int _int; float This; string MYSTRING double $double; ภายในเนมสเปสเดียวกัน ประกอบด้วยสองคลาส จะทำ อย่างไรที่จะประกาศตัวแปรให้อีกคลาสหนึ่งใช้ตัวแปรของอีก คลาสหนึ่งได้ จะต้องประกาศตัวแปรเป็นอย่างไร C# Programming with Visual C# 2010 Express

30 ทำถามทบทวน (ต่อ) ให้หาผลลัพธ์ของ การดำเนินการของข้อย่อยต่อไปนี้ และเมื่อ กำหนดให้ a = 5 ก. –a ข. a ค. 5 / 2 ง. 5.0 / 2 จ. “99” + “1” ฉ. 5==3?1: ช. 3 * * 2 จากการโค้ดต่อไปนี้ ส่วนใดเป็นแปลงข้อมูลแบบ อิมพลิสิท และเป็น การแปลงข้อมูลแบบ เอ็กพลิสิท และโปรแกรมนี้มีความผิดพลาด ให้ อธิบายความผิดพลาดในการแปลงข้อมูลด้วย int a = 4; float b; b = (float)a + 1.2; ในซีชาร์ปใช้เมทธอดอะไรเพื่อทดสอบความผิดพลาดในแปลงชนิด ข้อมูลหนึ่งไปเป็นอีกชนิดข้อมูลหนึ่ง อะไรคือความเหมือนและต่างที่สำคัญของตัวแปรประเภท read-only และ const ในกรณีใดที่ควรใช้การกำหนดชนิดข้อมูลใช้เอง C# Programming with Visual C# 2010 Express


ดาวน์โหลด ppt 3. ชนิดข้อมูล และการดำเนินการกับข้อมูล

งานนำเสนอที่คล้ายกัน


Ads by Google