เมื่อ Java ถูกออกแบบครั้งแรกถือว่าเหมาะสมที่จะละทิ้งฟังก์ชันที่ไม่ระบุชื่อ ฉันคิดได้สองเหตุผล (แต่อาจแตกต่างจากของทางการ):
- Java ได้รับการออกแบบเป็นภาษาเชิงวัตถุโดยไม่มีฟังก์ชั่นดังนั้นจึงไม่เป็นธรรมชาติเลยที่จะมีฟังก์ชั่นนิรนามในภาษาที่ไม่มีฟังก์ชั่น หรืออย่างน้อยก็จะมีอิทธิพลต่อการออกแบบภาษามาก
- ฟังก์ชั่นนิรนามไม่ได้รับความนิยมในชุมชนโปรแกรมเมอร์ที่ Java ตั้งใจจะดึงดูด (C, C ++, Pascal?) แม้ตอนนี้โปรแกรมเมอร์ Java หลายคนดูเหมือนจะพิจารณาคุณสมบัติเหล่านี้ค่อนข้างแปลกใหม่ (แต่อาจจะเปลี่ยนอย่างรวดเร็วด้วย Java 8)
ในปีต่อ ๆ ไปดังที่ Robert Harvey ได้อธิบายไว้นโยบายของ Sun มักจะรักษาความเข้ากันได้ของ Java ย้อนหลังและมีความเสถียรมาก
ในขณะที่ภาษาการแข่งขันอื่น ๆ ได้เกิดขึ้น (ที่สำคัญที่สุดคือ C # ซึ่งเกิดเป็นโคลน Java แล้วทิศทางการพัฒนาของตัวเอง)
ภาษาที่ใช้ในการแข่งขันทำให้ Java ตกอยู่ภายใต้แรงกดดันด้วยเหตุผลสองประการ:
พลังการแสดงออก
คุณลักษณะใหม่สามารถทำให้สำนวนการเขียนโปรแกรมบางอย่างง่ายต่อการเขียนทำให้ภาษาน่าสนใจยิ่งขึ้นสำหรับโปรแกรมเมอร์ โดยปกติแล้วชุดของคุณลักษณะที่มีให้โดยภาษาจะมีการประนีประนอมระหว่างพลังการแสดงออกความซับซ้อนของภาษาการเชื่อมโยงการออกแบบ: การเพิ่มคุณสมบัติเพิ่มเติมทำให้ภาษามีความชัดเจนมากขึ้น แต่ก็มีความซับซ้อนและยากต่อการควบคุม
อย่างไรก็ตามในช่วงไม่กี่ปีที่ผ่านมาคู่แข่งของ Java ได้เพิ่มคุณสมบัติใหม่ ๆ ที่ Java ไม่ได้มีและสิ่งนี้ถือเป็นข้อได้เปรียบ
hype
ใช่น่าเสียดายที่นี่เป็นปัจจัยในการเลือกเทคโนโลยีอย่างน้อยที่สุดจากสิ่งที่ฉันเห็นในชีวิตประจำวันของฉันในฐานะโปรแกรมเมอร์: เครื่องมือต้องมีคุณสมบัติบางอย่างแม้ว่าสมาชิกส่วนใหญ่ของทีมจะไม่รู้วิธีใช้และ ผู้ที่สามารถใช้งานได้ไม่จำเป็นต้องใช้มันเป็นส่วนใหญ่
Hype อาจมีความสำคัญมากกว่าสำหรับคนที่ไม่ใช่ด้านเทคนิคเช่นผู้จัดการซึ่งอาจเป็นคนที่ตัดสินใจเลือกแพลตฟอร์มสำหรับโครงการบางโครงการ ผู้จัดการบางครั้งจำคำหลักบางคำเท่านั้นเช่นแลมบ์ดา, ขนาน, มัลติคอร์, การเขียนโปรแกรมการทำงาน, คลาวด์คอมพิวติ้ง, ... หากเทคโนโลยีที่เราเลือกมีเครื่องหมายสีเขียวในแต่ละรายการของรายการ
ดังนั้น IMO สำหรับบางครั้ง Java ถูกจับระหว่าง
- นโยบายดั้งเดิมของความเสถียรทางภาษาและความเรียบง่ายในการออกแบบฐานของโค้ดขนาดใหญ่และชุมชนนักพัฒนาในมือเดียวและ
- ความกดดันของภาษาที่แข่งขันกันซึ่งสามารถดึงดูดโปรแกรมเมอร์ Java, C # ในตอนแรกและจากนั้น Scala, Clojure, F # (ฉันชื่อคนที่ฉันรู้ว่าอาจมีคนอื่น)
ในที่สุด Oracle ตัดสินใจอัพเกรด Java เพื่อให้สามารถแข่งขันได้มากขึ้น ในความคิดของฉันคุณสมบัติใหม่ที่อยู่โดยเฉพาะอย่างยิ่งโปรแกรมเมอร์ Java ที่อาจถูกล่อลวงให้เปลี่ยนเป็น C # และผู้ที่เห็นภาษาอื่นเช่น Scala และ Clojure แตกต่างจาก Java มากเกินไป ในทางกลับกันนักพัฒนาซอฟต์แวร์ที่มีประสบการณ์เกี่ยวกับการเขียนโปรแกรมการทำงานและยังต้องการใช้ JVM ได้เปลี่ยนไปใช้ Scala, Clojure หรือภาษาอื่นแล้ว
ดังนั้นคุณสมบัติใหม่ของ Java 8 จะทำให้ Java มีประสิทธิภาพมากขึ้นในฐานะภาษาและโฟกัสที่ประกาศไว้คือการเขียนโปรแกรมพร้อมกันและขนาน แต่การอัพเกรดดูเหมือนว่าจะอยู่ด้านการตลาด (Mark Reinhold หัวหน้าสถาปนิกของ Java ที่ Oracle กล่าวว่า: " บอกว่าการเพิ่มการแสดงออกของแลมบ์ดาเป็นเพียงการรักษาเด็กที่น่าสนใจและมีความจริงบางประการ แต่เหตุผลที่แท้จริงคือตัวประมวลผลแบบมัลติคอร์วิธีที่ดีที่สุดในการจัดการพวกเขาคือการใช้แลมบ์ดา "ดูบทความนี้ )
ดังนั้นใช่คุณสมบัติ Java 8 (ทั้งหมด) เป็นที่รู้จักกันดีอยู่แล้ว แต่ทำไมและเมื่อมีการเพิ่มคุณสมบัติให้กับภาษาขึ้นอยู่กับปัจจัยหลายประการ: ผู้ชมเป้าหมายชุมชนที่มีอยู่
แก้ไข
บันทึกย่อเกี่ยวกับ "... ฉันได้อ่านเกี่ยวกับสตรีมใน SIC (1996)": คุณหมายถึงว่าคุณต้องการ Java 8 lambdas ในการติดตั้งสตรีมหรือไม่? ที่จริงคุณสามารถใช้พวกเขาโดยใช้คลาสภายในที่ไม่ระบุชื่อ