1. น้ำตาลสังเคราะห์
โปรแกรมเมอร์ชื่นชอบเมื่อสามารถเขียนโค้ดหรือลอจิกที่ซับซ้อนได้ในสองสามบรรทัด ทำให้โค้ดมีขนาดกะทัดรัดและสามารถอ่านได้ และบางครั้งผู้สร้างภาษาโปรแกรมก็ช่วยในเรื่องนี้
คุณลักษณะภาษาลื่นไหลที่ช่วยให้คุณสามารถใช้ทางลัด (เขียนโค้ดน้อยลง) เรียกว่าsyntactic sugar แต่ตามจริงแล้วมีน้อยมากใน Java
ผู้สร้าง Java ทำทุกอย่างที่ทำได้เพื่อกำจัดความซ้ำซ้อนใน Java ถ้า C++ ให้คุณทำได้ 20 วิธี Java ก็ให้คุณทำได้วิธีเดียว
แต่โปรแกรมเมอร์ Java และผู้สร้าง Java ไม่ชอบการขาดอิสระ และบางครั้งน้ำตาลก็ทำให้ชีวิตคนธรรมดาเช่นคุณและฉันง่ายขึ้น
ยังไงก็ตาม คุณเคยพบคำเสริมประโยคมาบ้างแล้ว: autoboxingและunboxing ลองเปรียบเทียบ:
รหัสยาว | รหัสกะทัดรัด |
---|---|
|
|
|
|
|
|
แทนที่จะเขียนโค้ดยาวๆ เหมือนทางด้านซ้าย คุณสามารถเขียนโค้ดที่กะทัดรัดกว่าทางด้านขวาได้ และคอมไพเลอร์จาวา อัจฉริยะ จะสร้างโค้ดเวอร์ชันละเอียดตามเวอร์ชันย่อของโค้ด นี่คือสิ่งที่เป็นน้ำตาลวากยสัมพันธ์
2. การอนุมานประเภทของตัวแปร: var
คำหลัก
ใน Java 11 คอมไพเลอร์จะฉลาดยิ่งขึ้น และตอนนี้สามารถกำหนดประเภทของตัวแปรที่ประกาศตามประเภทของค่าที่กำหนดให้ ในรหัสดูเหมือนว่า:
var name = value;
โดยที่name
ชื่อของตัวแปรใหม่valueคือค่าเริ่มต้น และvar
เป็นคีย์เวิร์ดที่ใช้ในการประกาศตัวแปร ประเภทของ ตัวแปร ชื่อจะเหมือนกับประเภทของค่าที่กำหนด
ตัวอย่าง:
วิธีที่เราเห็นรหัส | สิ่งที่คอมไพเลอร์เห็น |
---|---|
|
|
|
|
|
|
|
|
|
|
ตัวคอมไพเลอร์จะกำหนดหรืออนุมานประเภทของตัวแปรตามค่าที่กำหนดให้
โปรแกรมเมอร์ถกเถียงกันอย่างถึงพริกถึงขิงว่าจะเพิ่มคุณสมบัติดังกล่าวให้กับภาษาหรือไม่ หลายคนกลัวว่าvar
จะถูกนำไปใช้ในทางที่ผิดและการอ่านโค้ดจะได้รับผลกระทบตามมา
มีความจริงเล็กน้อยเกี่ยวกับเรื่องนี้ ดังนั้นจึงเป็นการดีที่สุดที่จะใช้var
เมื่อเพิ่มความสามารถในการอ่านโค้ด ตัวอย่างเช่นในสองกรณี:
กรณีที่ 1: ดูค่าที่กำหนดให้กับตัวแปร ชนิดของตัวแปรจะชัดเจนทันที
รหัส | คำอธิบาย |
---|---|
|
ตัวแปรคือInputStream |
|
ตัวแปรคือ aString |
ในกรณีเหล่านี้ คุณไม่var
ควรใช้ ประเภทของตัวแปรคืออะไร?
รหัส | คำอธิบาย |
---|---|
|
เป็นการยากที่จะกำหนดประเภทของตัวแปร |
|
เป็นการยากที่จะกำหนดประเภทของตัวแปร |
กรณีที่ 2: ประเภทของตัวแปรไม่สำคัญต่อการทำความเข้าใจโค้ด
โค้ดมักไม่จำเป็นต้องเรียกใช้เมธอดบนตัวแปร เช่น เมื่อตัวแปรถูกใช้เพื่อเก็บข้อมูลบางอย่างชั่วคราว ในกรณีนี้ การใช้var
แบบแน่นอนจะไม่ลดความสามารถในการอ่านโค้ด:
รหัสยาว | รหัสกะทัดรัด |
---|---|
|
เราได้รับข้อมูลเมตาจากstream สตรีมและบันทึกไว้ในstorage พื้นที่เก็บข้อมูล ประเภทdata เฉพาะของตัวแปรไม่สำคัญ |
หมายถึงสีทอง
ตอนนี้ฉันจะให้สามวิธีในการเขียนรหัสเดียวกัน การใช้var
จะเป็นตัวเลือกที่ดีที่สุด
รหัส | บันทึก |
---|---|
|
กะทัดรัดเกินไป |
|
ถูกต้อง |
|
รายละเอียดมากเกินไป |
การย้ายจากเวอร์ชันที่มี 1 บรรทัดเป็นเวอร์ชันที่มี 2 บรรทัด เราทำให้โค้ดอ่านง่ายขึ้นเล็กน้อยโดยใช้ชื่อตัวแปร ( headerInfo
) ตอนนี้เป็นที่ชัดเจนว่าเมธอดไม่ส่งคืนข้อมูลเมตาเท่านั้น แต่ยังรวมถึงข้อมูลส่วนหัวด้วย
รุ่นที่สามมีรายละเอียดมากเกินไป ความจริงที่ว่าheaderInfo
a นั้นFileMetaInfo
ค่อนข้างชัดเจนจากgetFileMetaInfo()
วิธีการ จุดประสงค์ของข้อมูลเมตานั้นน่าสนใจกว่ามาก
3. การละเว้นประเภทด้วยตัวดำเนินการเพชร:<>
แม้กระทั่งก่อนที่var
โอเปอเรเตอร์จะปรากฏตัว ก็มีความพยายามที่จะสอนคอมไพเลอร์ถึงวิธีการอนุมานประเภทคอลเลกชัน คุณจะยอมรับว่าสัญลักษณ์นี้ดูซ้ำซ้อนเล็กน้อย:
ArrayList<String> list = new ArrayList<String>();
ตั้งแต่เวอร์ชันที่เจ็ดของ Java เมื่อเขียนประเภทคอลเลกชัน คุณสามารถละเว้นประเภทขององค์ประกอบคอลเลกชันได้หากมีการระบุเมื่อประกาศตัวแปร กล่าวอีกนัยหนึ่ง โค้ดด้านบนสามารถเขียนในรูปแบบย่อเล็กน้อย:
ArrayList<String> list = new ArrayList<>();
อย่างที่คุณเห็น คุณไม่จำเป็นต้องเขียน String เป็นครั้งที่สองอีกต่อไป ไม่เจ๋งเท่าตัวดำเนินการ var แต่ดูเหมือนว่าจะมีความคืบหน้าในเวลานั้น
วงเล็บมุมว่างในประเภทคอลเลกชันเรียกว่าตัวดำเนินการเพชรเนื่องจากวงเล็บมุมสองอันมีลักษณะคล้ายเพชร
ไม่พึงปรารถนาที่จะใช้var
คำหลักและตัวดำเนินการรูปสี่เหลี่ยมขนมเปียกปูน ในเวลาเดียวกัน :
var list = new ArrayList<>();
ไม่มีข้อมูลเกี่ยวกับประเภทขององค์ประกอบที่จัดเก็บไว้ในคอลเล็กชัน และประเภทคอลเล็กชันจะเป็นArrayList < Object >
4. วงเล็บปีกกาคู่
จำการเริ่มต้นอาร์เรย์อย่างรวดเร็วได้หรือไม่
เราเพิ่งระบุค่าในวงเล็บปีกกาดังนี้:
ตัวอย่าง |
---|
|
|
ผู้สร้าง Java ชอบแนวคิดในการใช้วงเล็บปีกกาเพื่อลดความซับซ้อนในการเขียนองค์ประกอบของอาร์เรย์ แต่สิ่งที่เกี่ยวกับคอลเลกชัน?
ผู้สร้างของ Java มีความคิดสร้างสรรค์เพียงพอสำหรับคอลเลกชันเช่นกัน ทำให้พวกเขาสามารถใช้กลอุบายด้วยปีกกาคู่
ด้วยน้ำตาล | ปราศจากน้ำตาล |
---|---|
|
|
หากคอมไพลเลอร์พบโค้ดตามตัวอย่างทางด้านซ้าย ก็จะแปลงเป็นโค้ดทางด้านขวา
รหัสไม่ได้กระชับขึ้นมากนัก การประหยัดที่นี่ค่อนข้างไม่มีนัยสำคัญ: คุณไม่จำเป็นต้องเขียนlist
ทุกครั้ง สิ่งนี้มีประโยชน์หากชื่อตัวแปรยาวมาก
แต่ถ้าคุณเจอโค้ดแบบนี้ในโครงการ ไม่ต้องแปลกใจ 🙂
GO TO FULL VERSION