วันอังคารที่ 5 มิถุนายน พ.ศ. 2555

Java and C# for MiniCompiler part 2

จาก part ที่ผ่านมาเพื่อนๆทราบแล้วว่าภาษาจาวาสามารถแสดงผลด้วยคำสั่ง println และภาษาซีชาร์ปแสดงผลด้วยคำสั่ง WriteLine ต่อไปเรามาทำความรู้จักกับคลาส (class) ของทั้งสองภาษากันดีกว่า


โดยสรุปปแล้วเขาพูดถึงเรื่อง
- การสร้างคลาสภาษาจาวาต้องประกอบด้วยคำว่า class แล้วตามด้วยชื่อ ในที่นี้มีสามคลาสสามชื่อคือ A, B และ JavaFile (เขียนสลับกันอย่างไรก็ได้นะ)
- ไฟล์ของภาษาจาวามีนามสกุล .java ในแต่ละไฟล์บรรจุได้มากกว่าหนึ่งคลาส
- และคลาสในไฟล์นั้นเป็น public class ได้เพียงคลาสเดียวเท่านั้น ซึ่งต้องมีชื่อเช่นเดียวกับไฟล์ดังกล่าว ตัวอย่าง ไฟล์ชื่อ JavaFile.java ดังนั้นคลาส JavaFile เพียงคลาสเดียวเท่านั้นที่มีสิทธิ์ใช้คำ 'public' นำหน้า คลาส A และ B ไม่มีสิทธิ์ (กลไกเช่นนี้คิดขึ้นเพื่ออะไร ?)

อธิบายเปรียบเทียบโค้ด

ถึงคราวภาษาซีชาร์ปแล้ว หนึ่งไฟล์มีได้กี่คลาส แต่ละคลาสเป็น public class ได้หรือไม่ มาดูกัน

จากโค้ดเราจะเห็นว่าชื่อไฟล์คือ Program.cs หมายความว่าไฟล์ภาษาซีชาร์ปมีนามสกุลเป็น .cs ภายในไฟล์นี้บรรจุคลาสไว้สามคลาสด้วยกัน ได้แก่ Program, A และ B เราจะเปรียบเทียบว่าคลาส Program ก็คือ JavaFile ในภาษาจาวา ซึ่งความคิดของทั้งสองภาษานี้แตกต่างกัน
- ภาษาจาวาคิดว่าหนึ่งไฟล์ควรมี public class เพียงคลาสเดียว (ซึ่งจะไม่มีเลยสักคลาสที่เป็น public class ก็ได้) ในเบื้องต้นนี้คำตอบคือให้สอดคล้องกับชื่อไฟล์และนิยามที่ว่า "หนึ่งไฟล์หนึ่งคลาส" กล่าวคือภาษาจาวานิยมให้สร้างหนึ่งไฟล์สำหรับบรรจุเพียงคลาสเดียว และให้คลาสนั้นใช้สิทธิ์ public class ได้อย่างเต็มที่ หากในเบื้องลึกคำตอบนี้จะเกี่ยวข้องกับโครงสร้างข้อมูลของคลาสย่อยที่ชื่อ Loader ที่มีหน้าที่โหลดคลาสเข้าสู่หน่วยความจำของเครื่องคอมพิวเตอร์เสมือน (Java Virtual Machine) ซึ่งจะไม่ขอกล่าวถึง (เรื่องมันยาว)
- ภาษาซีชาร์ปคิดว่าหนึ่งไฟล์ก็ควรมีเพียงหนึ่งคลาสเช่นกัน และไม่ได้ห้ามว่าต้องมี public class เพียงคลาสเดียว จะมีกี่ public class ก็ได้งานนี้ซีชาร์ปไม่แคร์สื่อค่ะ (แท้จริงเกี่ยวข้องกับตัวคอมไพล์ของภาษาซีชาร์ปเอง และมันเป็นเบื้องลึกเราจึงไม่ขอกล่าวถึงอีกเช่นเคย)

นอกประเด็นนิดหน่อยเกี่ยวกับเมธอดหลัก (main method) ของทั้งสองภาษา จากที่สังเกต

จาวาซีชาร์ป
public static void main(String[] args)static void Main(string[] args)

สำหรับภาษาซีชาร์ปเราสามารถเพิ่ม 'public' เข้าไปได้เช่นเดียวกับภาษาจาวา กลายเป็น
public static void Main(string[] args)

และเมธอดหลักของภาษาจาวาใช้เอ็มพิมพ์เล็ก (main) ส่วนซีชาร์ปใช้เอ็มพิมพ์ใหญ่ (Main) ซึ่งเป็นไปตามกฏไวยากรณ์ของแต่ละภาษาครับ ขัดขืนมิได้โทษถึงประหาร

เอาล่ะแล้วฉันควรเขียนเป็น class เฉยๆหรือ public class ดีล่ะ คำตอบคือแล้วแต่งานและการออกแบบครับ การไม่เขียน public ให้คลาสในภาษาจาวาเท่ากับกำหนดขอบเขตเป็น default ต่างจากภาษาซีชาร์ปที่เป็น internal (อะไรคือ default และอะไรคือ internal ไม่เข้าใจ งง ? ไว้จะอธิบายอย่างละเอียดใน part อื่นซึ่งเป็นเรื่องของ access modifier) จากนี้ไปเราจะใช้ public class กับทุกๆคลาสที่สร้างขึ้นไปก่อน และแบ่งหนึ่งไฟล์สำหรับบรรจุเพียงหนึ่งคลาสเท่านั้น ประโยชน์คืออ่านชื่อไฟล์ก็ทราบชื่อคลาส ไม่ใช่อ่านชื่อไฟล์ยังต้องไปเปิดไฟล์ดูว่ามีคลาสอะไรบ้าง แบบหลังนี้ไม่เอานะเสียเวลา แล้วพบกันใน part หน้าเด้อ

ไม่มีความคิดเห็น:

แสดงความคิดเห็น