ฉันมักจะคิดในแง่ของคุณสมบัติ:
ไวยากรณ์:
C-Based หรือ what-have-you Java มีไวยากรณ์ที่ใช้ C ฉันขอแนะนำให้ลองใช้สิ่งที่คล้ายกับ Python หรือ Ruby เพื่อนำหน้าออกมาจากไวยากรณ์และการพิจารณาเพิ่มเติมในแง่ของพื้นฐานของการทำงานของภาษาที่กำหนด ฉันเห็นว่าไม่จำเป็นต้องใช้ไวยากรณ์เป็นกลุ่มมากกว่า C-based และไม่มีปัญหาการสร้างบล็อกรอบพื้นที่สีขาว
รวบรวมกับตีความ w Build-Process vs. Interpreted / Console:
ฉันมีความคุ้นเคยน้อยมากกับการรวบรวมเวลากับข้อกังวลเกี่ยวกับสภาพแวดล้อมแบบรันไทม์ แต่ฉันเข้าใจว่ามีความกังวลมากมายที่ฉันไม่ได้คิดถึง
ในทำนองเดียวกันมีภาษาที่ตีความมากมายที่ยังคงมีกระบวนการคอมไพล์ ish สำหรับการทำงานภายในเครื่องเสมือนเช่น Java คุณยังต้องสร้างใหม่เพื่อดูการเปลี่ยนแปลงกับสิ่งต่าง ๆ
และจากนั้นก็มี JavaScript และ Python ซึ่งคุณสามารถดำเนินการได้ทันทีโดยใช้คำสั่งในคอนโซลในสภาพแวดล้อมจริง ทั้งสามสามารถนำไปสู่วิธีการเขียนโค้ดที่แตกต่างกันมาก
การพิมพ์แบบไดนามิกและแบบเข้มงวด:
ฉันมักจะเห็นทั้งสองเป็นการแลกเปลี่ยนการออกแบบ เมื่อคุณอยู่ในระดับที่ต่ำกว่ามากและประสิทธิภาพเป็นสิ่งสำคัญการพิมพ์แบบสแตติกทำให้รู้สึกได้อย่างมาก ฉันไม่เคยเข้าใจความคิดของคนที่ "ปลอดภัย" กว่าอย่างใด แต่ฉันคิดว่าภาษาพลาสติก / ไดนามิกที่คุณเรียนรู้ว่าระบบการพิมพ์ทำงานอย่างไรและคาดหวังอะไรโดยทั่วไป ประเภท shenanigans ไม่ค่อยน่าเป็นห่วงสำหรับฉันใน JS ในบางวิธีความยืดหยุ่นสามารถทำให้สิ่งต่าง ๆ มีความทนทานมากขึ้นแม้ว่าจะเป็นความลับที่สัมผัสได้มากกว่าสำหรับผู้พัฒนาระดับจูเนียร์มากขึ้นถ้าคุณไม่รู้เกี่ยวกับหลุมในภาษา
ขอบเขตระดับบล็อกกับขอบเขตของฟังก์ชันเทียบกับ?:
ระดับบล็อกนั้นเป็นเรื่องที่พบได้บ่อยที่สุด (ทุกสิ่งระหว่าง {} ในภาษาซินแทกซ์ส่วนใหญ่) ขอบเขต JavaScript ถูกสร้างขึ้นรอบ ๆ ฟังก์ชัน (ซึ่งใช้ในการสร้างวัตถุด้วยเช่นกันเช่นกัน) นอกจากนี้ยังมีรูปแบบที่หลากหลายในการเข้าถึงแบบที่คุณมีตั้งแต่ขอบเขตด้านในไปจนถึงขอบเขตด้านนอก ฉันไม่คุ้นเคยกับแผนการกำหนดขอบเขตอื่น ๆ แต่ฉันแน่ใจว่ามีอยู่
คลาสสิก OOP เทียบกับ Prototypal OOP เทียบกับเกือบ -OOP (structs ใน C?) เทียบกับ Non-OOP:
แม้ใน OOP แบบอิงคลาสก็มีช่องว่างมากมายสำหรับการเปลี่ยนแปลง ไม่ว่าคุณจะสามารถทำหลายมรดก (ew, ดีเกิน, ew), กำหนดอินเตอร์เฟส, ฯลฯ ...
ในจาวาสคริปต์เรามี OOP ต้นแบบลูกผสมแบบผาดโผนที่วัตถุมีความเรียบง่ายมากไม่แน่นอนสูง แต่เรายังคงมีความสามารถในการแยกอินเทอร์เฟซจากข้อกังวลภายในซึ่ง IMO เป็นส่วนสำคัญของการห่อหุ้ม
สิ่งที่เกี่ยวกับ OOP คือมีหลายสิ่งหลายอย่างที่คุณสามารถดึงออกมาได้ซึ่งก็คือ OOP-oriented โดยไม่มีเทคนิคเป็น OOP มีคนพิถีพิถันแน่นอน แต่ในตอนท้ายของวันรูปแบบการออกแบบนั้นเกี่ยวกับการบรรลุ abstractions ที่ทำงานได้ดีในบางสถานการณ์ อย่าคิดเร็วเกินไปที่จะคิดความคิดจากภาษาที่ใช้ OOP ไม่ได้ใช้ในสิ่งที่มุ่งเน้นกระบวนการเชิงปฏิบัติมากกว่า และฉันไม่ได้พูดถึง JavaScript มันไม่ได้ถูก จำกัด โดยรุ่นขำของต้นแบบ OOP กระบวนทัศน์
ฟังก์ชั่นชั้นหนึ่ง:
การไม่มีภาษาเหล่านี้เป็นเรื่องยากสำหรับฉันที่จะยอมแพ้ คุณสามารถส่งฟังก์ชั่นรอบ ๆ เหมือนเป็นข้อมูลเพื่อใช้ในบริบทอื่น ๆ สิ่งนี้ทำให้รูปแบบการจัดการเหตุการณ์โดยเฉพาะอย่างยิ่งเป็นเรื่องง่ายที่จะนำไปใช้ แต่มันก็ทำให้มันง่ายมากที่จะปรับภาษาให้ทำงานในแบบที่คุณต้องการ มันเป็นมากกว่าสิ่งใดที่ฉันสงสัยว่าสิ่งที่ทำให้ JavaScript ประสบความสำเร็จที่ดีที่สุดนั้นได้รับการออกแบบในสองสัปดาห์และได้รับไวยากรณ์ Java- โดยประมาณตบเป็นแผนการตลาด
ปิดกิจการ
ฉันไม่แน่ใจว่าการอภิปรายอยู่ที่ Java แต่ฉันรู้ว่า Java devs จำนวนมากกำลังถกเถียงกันเรื่องคุณลักษณะนี้เมื่อสองถึงสามปีที่แล้ว ในภาษาที่ไม่ได้ปิดเมื่อฟังก์ชั่นปิดสิ่งใดก็ตามที่สามารถอ้างอิงสิ่งต่าง ๆ จากภายในฟังก์ชั่นนั้นจะไม่สามารถเข้าถึงได้เพราะเป็นขยะที่เก็บรวบรวม ในการปิดบริบทการดำเนินการถูกผูกไว้เช่นถ้าคุณสามารถอ้างอิงสิ่งที่อยู่ภายในฟังก์ชั่นที่ปิดจากขอบเขตอื่นเช่นในวัตถุที่ส่งคืนหรือฟังก์ชั่นคุณโดยทั่วไปได้รับ vars เหล่านั้นเหมือนพวกเขาเมื่อฟังก์ชั่นปิด มันเหมือนกับการเหยียบเท้าของคุณในประตูของการเก็บขยะแม้ว่าฉันคิดว่ามันจะมีการใช้งานมากขึ้นเช่นสำเนาของ vars เหล่านั้นที่ทำไว้ใน vars ท้องถิ่นของหน่วยงานอ้างอิง
เข้มงวด / เข้มงวด / ปลอดภัยเมื่อเทียบกับการมอบเชือกทั้งหมดที่คุณต้องการ:
JS devs และ Java devs มักจะไม่เข้าใจกันเลยและฉันคิดว่ามันมีหลายอย่างที่เกี่ยวข้องกับภาษาทั้งสองที่ตกลงมาทางด้านตรงข้ามของสเปกตรัมการออกแบบนี้โดยเฉพาะ ฉันไม่ต้องการให้คุณปกป้องฉันจากตัวเองหรือจาก devs อื่น ๆ ในทีมของฉัน ฉันต้องการที่จะทำมากขึ้นในรหัสน้อยมากและจะทำทั้งหมดในวิธีที่แตกต่างกันมาก (แต่สอดคล้องกันสำหรับโดเมนที่กำหนด) ขึ้นอยู่กับสถานการณ์ มีการแลกเปลี่ยนกันอย่างสิ้นเชิงกับทั้งสองและหลายภาษามีแนวโน้มที่จะตกอยู่ตรงกลาง