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

