การปิดใน Java จะส่งผลกระทบต่อชุมชน Java อย่างไร


11

เป็นหนึ่งในคุณสมบัติที่ได้รับการกล่าวถึงมากที่สุดเกี่ยวกับ Java: Closures พวกเราหลายคนโหยหาพวกเขา พวกเราบางคน (รวมถึงฉัน) มีความอดทนเพิ่มขึ้นและหันไปใช้ภาษาสคริปต์เพื่อเติมเต็มความว่างเปล่า

แต่ในที่สุดเมื่อการปิดมาถึง Java: พวกเขาจะส่งผลกระทบต่อชุมชน Java อย่างไร ความก้าวหน้าของภาษาสคริปต์ที่ตั้งเป้าหมายไว้กับ VM จะช้าลงในการรวบรวมข้อมูลอยู่เหมือนเดิมหรือเพิ่มพูน? ผู้คนจะแห่กันไปยังซินแท็กซ์ปิดใหม่ดังนั้นการเปลี่ยนรหัส Java ให้เป็นโครงสร้างที่มีฟังก์ชั่นการใช้งานมากขึ้นหรือไม่? เราจะเห็นเฉพาะการปิดโปรยใน Java ตลอดไหม? สิ่งที่จะมีผลต่อการสนับสนุนเครื่องมือ / IDE? ประสิทธิภาพเป็นอย่างไร และในที่สุดความหมายของการยอมรับอย่างต่อเนื่องของ Java ในฐานะภาษาคืออะไรเมื่อเทียบกับภาษาอื่น ๆ ที่ได้รับความนิยมเพิ่มขึ้น

ในการจัดเตรียมตัวอย่างหนึ่งของรายละเอียดทางไวยากรณ์ Java Closure ที่เสนอล่าสุด:

public interface StringOperation {
   String invoke(String s);
}

// ...

(new StringOperation() {
   public invoke(String s) {
       new StringBuilder(s).reverse().toString();    
   }
}).invoke("abcd");    

จะกลายเป็น ...

String reversed = { 
    String s => 
    new StringBuilder(s).reverse().toString()
  }.invoke("abcd");

[แหล่งที่มา: http://tronicek.blogspot.com/2007/12/closures-closure-is-form-of-anonymous_28.html]


ตัวอย่างที่คุณโพสต์มาจากหลายปีที่ผ่านมา - คุณแน่ใจหรือว่ามันเป็นตัวแทนของข้อเสนอปัจจุบัน
Daniel Earwicker

มันอาจจะไม่ใช่: อย่าลังเลที่จะแก้ไขตัวอย่างของฉัน

3
ฉันหยุดใช้ Java เมื่อไม่นานมานี้ ฉันยังคงหวังว่าจะปิด
Anto

@Daniel - นี่ไม่ใช่ข้อเสนอในปัจจุบันดูเหมือนว่าจะมีอยู่ในปัจจุบัน (และแตกต่างกันมาก) ที่นี่: baptiste-wicht.com/2010/05/…
Nicole

มันเหมือนกับการแสดงออก C # lambda?
หลุยส์ริส

คำตอบ:


4

ฉันคิดว่ามันต้องใช้เวลาสักครู่สำหรับนักพัฒนา Java 'ธรรมดา' จำนวนมากเพื่อทำความเข้าใจกับแนวคิดนี้หากพวกเขายังไม่คุ้นเคย มันจะดีมากถ้ามันได้รับการยอมรับอย่างรวดเร็วเหมือนกับชื่อสามัญเมื่อ Java 5 มาถึง

ฉันคิดว่ามันจะไม่ส่งผลต่อภาษาสคริปต์ของ VM ที่กำหนดเป้าหมายมากเท่าที่จะเป็นประโยชน์เพียงข้อเดียวในการใช้ภาษาที่มี


3

มีรอบปกติที่จะไปกับเครื่องมือใหม่ ๆ :

  • ความตื่นเต้นครั้งใหญ่พร้อมกับผู้ใช้รายใหม่ ๆ นี่เป็นเรื่องปกติและมีสุขภาพดีเนื่องจากช่วยให้เราเข้าใจข้อ จำกัด ของเครื่องมือใหม่และวิธีการใช้งาน
  • ผู้คนที่สงวนไว้มากขึ้นจะพูดอย่างใกล้ชิดและทำให้ผู้ที่รับอุปถัมภ์ต้นลงว่าโง่
  • ในที่สุดความตื่นเต้นจะหมดไปและผู้ใช้งานรุ่นแรก ๆ จะใช้วิธีการที่มีสุขภาพดีในการใช้เครื่องมือใหม่
  • คนที่สงวนไว้มากขึ้นจะเริ่มอิจฉาผลิตภาพของผู้คนโดยใช้เครื่องมือใหม่และเริ่มนำไปใช้ - ใช้รูปแบบที่มีสุขภาพดีในขณะนี้

ทั้งหมดนี้ใช้เวลาสองสามปีในการหมุนเวียน มันเป็นเรื่องจริงของคำอธิบายประกอบและข้อมูลทั่วไปและมันจะเป็นจริงสำหรับการปิดเช่นกัน

ส่งผลกระทบกับกลุ่มภาษาสคริปต์:

  • สำหรับภาษาที่สนับสนุนการปิดสิ่งนี้จะช่วยให้ผู้เขียนภาษาสคริปต์ทำงานได้อย่างมีประสิทธิภาพยิ่งขึ้น เนื่องจากพวกเขารู้วิธีใช้การปิดพวกเขาไม่จำเป็นต้องทำสิ่งที่บ้า
  • สำหรับภาษาที่ไม่รองรับการปิดนี่จะถูกละเว้นส่วนใหญ่

1

ผู้ที่ชื่นชอบการเขียนโปรแกรมแบบมัลติเธรดจะสามารถฝังโครงสร้างข้อมูลที่ไม่เปลี่ยนรูปแบบใน Java และจัดการกับพวกเขาในลักษณะเหมือนเสียงกระเพื่อมมากขึ้นโดยไม่จำเป็นต้องหันไปใช้ที่ไม่ใช่ซีเควนซ์เนื่องจากความไม่ตรงกันของภาษาระหว่าง Java และ Lisp

ผู้ที่ไม่ได้ใช้ (หรือเข้าใจ) ข้อใดข้อหนึ่งข้างต้นจะสามารถทำสิ่งต่าง ๆ ได้เหมือนที่เคยทำมาก่อน


1
มันไม่สมเหตุสมผล การปิดไม่เกี่ยวข้องกับเกลียวหรือความไม่แน่นอน
davidk01

พวกเขาทำ. การปิดที่เหมาะสมนั้นไม่สามารถใช้งานได้โดยไม่เกิดการระเบิดของสมอง
permeakra

ไม่พวกเขาทำไม่ได้ การปิดเป็นส่วนหนึ่งของรหัสที่รู้เกี่ยวกับสภาพแวดล้อมที่ถูกสร้างขึ้นนั่นแหล่ะ
davidk01

1
@ davidk01 คำจำกัดความเป็น OK แต่เมื่อการปิดมีลิงค์ไปยังตัวแปรที่ไม่แน่นอนผลลัพธ์จะเปลี่ยนไปพร้อมกับตัวแปรที่เปลี่ยนแปลง โดยทั่วไปนี่ไม่ใช่สิ่งที่เราต้องการ แต่ถ้าคอมไพเลอร์ไม่คัดค้านข้อผิดพลาดก็แทบจะไม่สามารถตรวจจับได้
permeakra

1
@ davidk01 ไม่ฉันไม่ ประเด็นของฉันคือการปิด / แลมบ์ดาทำงานได้ดีถ้าพวกมันเชื่อมโยงกับตัวแปรที่จับไม่ได้ มิฉะนั้นคุณจะอยู่ในความเมตตาของ Tzeentch และมีเพียงผู้นมัสการที่อุทิศตนเท่านั้นที่มีโอกาสมาที่นี่
permeakra

1

ฉันสงสัยว่าคนที่คุ้นเคยกับการปิดจะเริ่มใช้พวกเขาในรหัสแอปพลิเคชัน พวกเขาจะหลีกเลี่ยงพวกมันในไลบรารีชั่วครู่เพื่อรักษาความเข้ากันได้ย้อนหลังกับ Java เวอร์ชันเก่า

โปรแกรมเมอร์ที่ไม่คุ้นเคยกับการปิดจากภาษาอื่น ๆ จะช้าในการนำมาใช้ใน Java

ยาสามัญถูกนำมาใช้อย่างรวดเร็วเมื่อพวกเขาได้รับการแนะนำให้รู้จักกับ Java บางส่วนเนื่องจากคำเตือนทั้งหมดที่ปรากฏขึ้นเมื่อคุณอัพเกรดและเนื่องจากการรวมตัวกันของพวกเขาใน SDK สิ่งนี้จะไม่เป็นจริงเมื่อปิด มันจะยากที่จะหาหลักฐานการมีอยู่ของพวกเขาดังนั้นเฉพาะผู้ที่ต้องการใช้พวกเขาจะใช้พวกเขา

ฉันไม่คิดว่าการพัฒนาภาษาสคริปต์ JVM อื่น ๆ จะหยุดลง ภาษาเหล่านั้นมีโมเมนตัมและคุณสมบัติมากมายนอกเหนือจากการปิด อย่างไรก็ตามเราอาจเห็นภาษา JVM ใหม่น้อยลงเนื่องจากการปิดเป็นแรงผลักดันหลักในการสร้างภาษา JVM ใหม่


คุณควรดูmseifed.blogspot.se/2012/09/… ฉันคิดว่ามันยอดเยี่ยมมาก!
mmm
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.