ฉันได้ยินเกี่ยวกับ 'sugaring' และ 'desugaring' บ่อยขึ้นใน Java 8 คำศัพท์เหล่านี้หมายความว่าอย่างไร เป็นแนวความคิดหรือเชิงสังเคราะห์
ตัวอย่างบางส่วน:
เริ่มต้นการวนซ้ำที่เริ่มต้นการคืนค่าเป็น java
ข้อสังเกตเกี่ยวกับน้ำตาลวากยสัมพันธ์ในการรวบรวม.
ฉันได้ยินเกี่ยวกับ 'sugaring' และ 'desugaring' บ่อยขึ้นใน Java 8 คำศัพท์เหล่านี้หมายความว่าอย่างไร เป็นแนวความคิดหรือเชิงสังเคราะห์
ตัวอย่างบางส่วน:
เริ่มต้นการวนซ้ำที่เริ่มต้นการคืนค่าเป็น java
ข้อสังเกตเกี่ยวกับน้ำตาลวากยสัมพันธ์ในการรวบรวม.
คำตอบ:
น้ำตาลในการเขียนโปรแกรมมักจะหมายถึงการเพิ่มความหวานซึ่งส่วนใหญ่เป็นทางลัดที่ทำให้โครงสร้างบางส่วนพิมพ์และอ่านได้ง่ายขึ้น (ในทางปฏิบัติในทางปฏิบัติสำคัญที่สุดในวงจรชีวิตของโปรแกรมของคุณ)
Wikipedia มีคำจำกัดความของ น้ำตาลวากยสัมพันธ์แต่คุณควรสังเกตว่าในสาระสำคัญไม่ใช่น้ำตาลทั้งหมดคือ syntactical (ไม่ใช่แค่การเพิ่มความหวานล่าสุดทั้งหมดเป็นเพียงการเปลี่ยนแปลงของคอมไพเลอร์)
นี่คือตัวอย่างบางส่วน:
i++
และ++i
) จุดประสงค์เดียวของพวกเขาคือหลีกเลี่ยงการเขียนข้อความเพิ่มเติม เป็นน้ำตาลบริสุทธิ์+=
, |=
, &=
และอื่น ๆ ที่ทำจากชนิดเดียวกันของน้ำตาลJava ถูกมองอย่างกว้างขวางว่าไม่กระชับเพียงพอโดยเฉพาะเมื่อเทียบกับภาษาสมัยใหม่ นั่นเป็นเหตุผลว่าทำไมส่วนเพิ่มเติมที่ช่วยให้อ่านโค้ดได้เร็วขึ้นจึงยินดีต้อนรับ
เพื่อให้เสร็จสิ้นฉันเพิ่งทราบว่าในขณะที่การขาดน้ำตาลอาจทำให้โปรแกรมของคุณอ้วน แต่น้ำตาลส่วนเกินซึ่งนำไปสู่วิธีการต่างๆในการเขียนสิ่งเดียวกันสามารถทำให้ภาษาของคุณไม่สะดวกและโปรแกรมของคุณไม่สอดคล้องกันและยากต่อการดูแลรักษา . น้ำตาลอีกชนิดหนึ่งคือน้ำตาล API ส่วนใหญ่มักเป็นโรคระบาดซึ่งทำให้ API เข้าใจได้ยากขึ้นโดยเฉพาะอย่างยิ่งเมื่อมีการเพิ่มเติม (เช่นการใช้งานมากเกินไป)
ที่ถูกกล่าวว่าdesugaringหมายถึงอย่างใดอย่างหนึ่ง
"Desugaring" ดูเหมือนจะมีความหมายที่เฉพาะเจาะจงมากใน Java 8 ดูเหมือนว่าจะเป็นคำที่จับได้ทั้งหมดเพื่อแสดงวิธีต่างๆที่นิพจน์แลมบ์ดาอาจถูกผูกไว้กับการเรียกวิธีการที่เป็นรูปธรรมจริง
เอกสารนี้เกี่ยวกับ"การแปลนิพจน์แลมด้า"ดูเหมือนว่าจะมีรายละเอียดที่แท้จริงว่าเกิดอะไรขึ้นหากคุณสนใจข้อมูลเฉพาะ
วลีสำคัญจากเอกสาร:
ขั้นตอนแรกของการแปล lambdas เป็น bytecode คือการแยกร่างกายแลมด้าให้เป็นวิธีการ
โดยทั่วไปแล้ว "desugaring" ใน javac อนุญาตให้แสดงคุณลักษณะภาษาบางอย่างกับคุณลักษณะที่มีอยู่ก่อน สิ่งนี้ช่วยให้แสดงได้ใน bytecode โดยไม่ต้องทำการเปลี่ยนแปลงขนาดใหญ่กับรูปแบบไฟล์คลาส ด้วยเหตุนี้ส่วนหลังของคอมไพเลอร์จึงมีเสถียรภาพมากกว่าส่วนหน้า นี่ไม่ได้หมายความว่าคุณลักษณะของภาษาใหม่ทั้งหมดเป็นเพียงแค่น้ำตาลในการสังเคราะห์เท่านั้นเนื่องจากไม่ใช่กรณีของ lambdas และการอ้างอิงวิธีการ มีตัวอย่างเพิ่มเติมของ "desugaring" ในคอมไพเลอร์:
คุณสามารถตรวจสอบสิ่งที่เกิดขึ้นกับสวิตช์ String พิมพ์ erasure ...
ดังที่คนอื่น ๆ ได้กล่าวไว้ในการเขียนโปรแกรมคอมพิวเตอร์และในบริบทนี้ "น้ำตาล" หมายถึงคุณลักษณะของภาษาที่ทำให้โค้ดดีขึ้นในการอ่าน / เขียน "Desugaring" หมายถึงการแปลโครงสร้าง "น้ำตาล" เป็นโครงสร้างอื่นโดยอัตโนมัติเมื่อคอมไพเลอร์หรือรันไทม์ขาดการสนับสนุนดั้งเดิมสำหรับเวอร์ชันที่มีน้ำตาล
แนวคิดเหล่านี้เกิดขึ้นบ่อยสำหรับ Java ในบริบทของ Android Android ไม่มี JDK ใด ๆ แต่เป็นการใช้งานรันไทม์ Java ซ้ำแทน ดังนั้นการสนับสนุนคุณลักษณะภาษา Java ใหม่จึงขึ้นอยู่กับ Android ที่สนับสนุนคุณลักษณะภาษาใหม่ ในปัจจุบันแอป Android ทั้งหมดสามารถรองรับคุณสมบัติ Java 7 ทั้งหมดและคุณสมบัติย่อยของ Java 8 โดยใช้การแยกส่วน โปรดดู"ใช้คุณลักษณะและ API ภาษา Java 8"สำหรับรายละเอียด
ต่อไปนี้เป็นบทความโดยละเอียดเกี่ยวกับรายละเอียดเกี่ยวกับคุณสมบัติ Java ใน Android: "การสนับสนุน Java 8 ของ Android"ของ" จากบทความนั้น lambdas มักจะถูกออกแบบมาในไบนารีของ Android ("นี่คือเหตุผลที่ความสิ้นหวังมักเกิดขึ้นในเวลาคอมไพล์โดยไม่คำนึงถึงระดับ API ขั้นต่ำของคุณ")