การแปลงชนิดหรือ Type ของตัวแปร จัดทำโดย : Mr.POP พิมพ์
 Untitled Document

สวัสดีครับ เป็นอย่างไรกันบ้างครับหาคำตอบของบทความคราวที่แล้วกันได้หรือเปล่าครับ ผมคิดว่าไม่น่าจะยากนะครับ ในบทความคราวนี้เราจะมาต่อกันด้วย เรื่องของการแปลงชนิดหรือ Type ของตัวแปรต่างๆ กันนะครับ ฝรั่งเขาจะเรียกว่าการ Casting ครับ เราจะมาดูกลไกการทำงานของ java กันครับว่าเราจะสามารถ Casting ตัวแปรจากชนิดหนึ่งไปเป็นอีกชนิดหนึ่งได้อย่างไร ลองมาชมตัวอย่างต่อไปนี้กันก่อนครับ

float x = 100 ;

double y= x*3+4 ;

ครับเป็นไงบ้างครับ บางคนบอกวันนี้ผมเป็นไรป่าวมาแปลกๆ ให้ดูอะไรง่ายๆ ก็เห็นๆ กันอยู่ว่าประกาศตัวแปร x เป็น float แล้วกำหนดค่าเริ่มต้นเป็น 100 ไง ส่วนบรรทัดที่ 2 ก็ประกาศ y เป็น double แล้วหาผลลัพธ์ที่ได้จากการคูณ x กับ 3 แล้วเอามาบวกกับ 4 ไง ไม่เห็นมีอะไรแปลกเลยนี่ อืม...ครับผมก็ว่าไม่แปลกอะไรเลยถ้าเรามองแบบผ่านๆ แต่ในความเป็นจริงแล้วมีสิ่งที่ซ่อนเร้นอยู่นะครับ ที่ผมบอกว่าเป็นกลไกของมัน ลองมาพิจารณาใหม่อีกทีนะครับ

float x = 100 ;

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

double y= x*3+4 ;

กำหนด y เป็นชนิด double แล้วลองพิจารณาดูนะครับว่า 3 และ 4 เป็น int ส่วน x เป็น float มีค่าเท่ากับ 100 (จากบรรทัดที่ 1) เมื่อเราคอมไพล์โปรแกรม คอมไพเลอร์จะแปลงตัวเลข 3 กับ 4 และตัวแปร x เป็น double แล้วทำการคูณและบวกตัวเลขเหล่านั้นแลัวนำมาเก็บไว้ที่ตัวแปร y จะเห็นว่ากลไกเหล่านี้เกิดขึ้นเองโดยอัตโนมัติครับโดยคอมไพเลอร์จะจัดการให้เราเองซึ่งเราไม่ต้องไปกังวลเรื่องตัวแปรที่มีชนิดต่างกัน มาดูตัวอย่างต่อไปครับ

เมื่อเราลองคอมไพล์ดูจะเห็นว่ามีข้อผิดพลาดเกิดขึ้นครับ พอจะดูออกไหมครับว่าจุดไหนบ้าง? พิจารณาดูจะเห็นว่า x มีชนิดเป็น double ครับแต่ว่าเรามาประกาศให้ y เป็น int ซะนี่ ส่วนอีกจุดหนึ่งก็คือ ตัวเลข 4.0 มันเป็น float แน่ๆ เห็นไหมครับว่าเกิดข้อขัดแย้งกันโดยสิ้นเชิง เนื่องจากมันไม่สามารถแปลงชนิดของตัวแปรหรือตัวเลขที่มีชนิด ใหญ่ไปสู่ตัวแปรหรือตัวเลขที่มีชนิดเล็กกว่าได้นั่นเองครับ ซึ่งผิดกับตัวอย่างในตอนแรกที่ผมให้ดู

ข้อสังเกต ตัวอย่างในตอนแรก y เป็น double ส่วน x เป็น float และตัวเลข 3 กับ 4 เป็น int ซึ่งมีชนิดที่เล็กกว่า y แน่นอนดังนั้นการคอมไพล์จึงไม่เกิดข้อผิดพลาด ส่วนในตัวอย่างต่อมา y เป็น int ส่วน x เป็น double และตัวเลข 3 เป็น int ตัวเลข 4.0 เป็น float ซึ่งมีชนิดทีใหญ่กว่า y ครับ จึงเกิดข้อผิดพลาด

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

จากโปรแกรมจะเห็นว่าเราได้ใส่ (int) ไว้ที่หน้า x กับ 4.0 ซึ่งเป็นการ Casting ให้กับมันเพื่อให้มีชนิดเหมือนกับ y ส่วนเลข 3 เป็น int อยู่แล้วจึงไม่ต้องไป Casting มันอีก เมื่อแก้โปแกรมแล้วลองคอมไพล์ดูใหม่จะไม่เกิดข้อผิดพลาดแล้วครับ จะเห็นว่านี่เป็นเทคนิคอีกอย่างหนึ่งในการเขียนโปรแกรมครับ ในกรณีที่เราไม่สามารถหลีกเลี่ยงการใช้ ตัวแปรหรือตัวเลขที่มีชนิดต่างกันได้

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

 

คุณอาจสนใจ
การสร้างโลโก้โดยใช้เส้น Path(ตอนที่ 1)
เว็บไทยดีดี (57,485 - 20 ต.ค. 50)
เทคนิคการทำแถบเมนูบาร์ XP
Mr.GuruZ (54,147 - 22 ก.ย. 50)
การบันทึกเอกสาร เพื่อส่งไปยังแฟ้มข้อมูล
Mr.GuruZ (28,786 - 02 ก.ค. 49)
โหลด Windows แบบเร่งด่วน
เว็บไทยดีดี (16,232 - 26 ม.ค. 51)
การเปลี่ยนสีวัตถุ
Mr.GuruZ (51,024 - 04 มิ.ย. 49)
แจ้งเตือนฮาร์ดดิสก์ใกล้ตาย
เว็บไทยดีดี (15,551 - 22 ก.ย. 50)
การตกแต่งพื้นหลังแบบ Gradient
nut (37,647 - 17 มี.ค. 51)
การวาดรูป Flowchart
หมูขุน (22,577 - 04 ก.พ. 50)