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) ตอนนี้เป็นที่ชัดเจนว่าเมธอดไม่ส่งคืนข้อมูลเมตาเท่านั้น แต่ยังรวมถึงข้อมูลส่วนหัวด้วย
รุ่นที่สามมีรายละเอียดมากเกินไป ความจริงที่ว่าheaderInfoa นั้น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