โปรแกรมเมอร์ใช้วิธีภาษาคงที่รับมือกับการขาดเครื่องมือ Javascript อย่างไร


28

ฉันตั้งโปรแกรมภาษาที่เรียบเรียงเป็นพิเศษโดยเฉพาะ Java สำหรับอาชีพของฉันเป็นส่วนใหญ่ หนึ่งในสิ่งที่ฉันโปรดปรานเกี่ยวกับ Java คือวิธีที่คุณใช้งานได้อย่างมีประสิทธิภาพและรหัสที่คุณต้องเขียนเมื่อใช้เครื่องมือเช่น Eclipse

คุณสามารถ:

  • อย่างง่ายดายและโดยอัตโนมัติ refactor วิธีการและคลาสของคุณ
  • ดูสถานที่ทั้งหมดทันทีที่มีการเรียกใช้เมธอดหรือใช้ค่าคงที่ (ลำดับชั้นการโทรเปิด / แสดงการอ้างอิง)
  • การพิมพ์แบบสแตติกหมายถึงคุณสามารถใช้การเติมโค้ดให้สมบูรณ์เพื่อแสดงพารามิเตอร์ / ฟังก์ชั่นทั้งหมดที่มีบนวัตถุ
  • คลิกควบคุมที่ชื่อฟังก์ชัน / สมาชิก / คลาสเพื่อไปที่คำจำกัดความ

สิ่งอำนวยความสะดวกทั้งหมดนี้ทำให้ฉันรู้สึกว่า IDE เป็นเพื่อนที่ดีที่สุดของฉัน การเขียนโค้ด Java และโดยเฉพาะการทำความเข้าใจกับโปรแกรมของคนอื่นจะง่ายขึ้นมาก

อย่างไรก็ตามฉันถูกเรียกใช้มากขึ้นเรื่อย ๆ เพื่อใช้งาน Javascript และประสบการณ์ของฉันจนถึงตอนนี้ก็ค่อนข้างเชิงลบ

โดยเฉพาะอย่างยิ่ง:

  • ไม่มีวิธีการค้นหาจุดเข้าใช้งานของฟังก์ชันในทันที (นอกเหนือจากการค้นหาข้อความธรรมดาซึ่งอาจส่งผลให้มีการค้นหาวิธีการตามลำดับชั้นการโทรที่ตามมาหลังจากนั้นสองหรือสามแห่งซึ่งคุณลืมไปว่าคุณเริ่มต้นที่ไหน)

  • พารามิเตอร์ถูกส่งผ่านไปยังฟังก์ชั่นโดยที่ไม่มีทางรู้ได้ว่าคุณสมบัติและฟังก์ชั่นใดที่มีอยู่ในพารามิเตอร์นั้น (นอกเหนือจากการรันโปรแกรมจริง ๆ แล้วนำทางไปยังจุดที่เรียกใช้ฟังก์ชันและใช้ console.logs เพื่อแสดงคุณสมบัติทั้งหมด สามารถใช้ได้)

  • การใช้งานทั่วไปของฟังก์ชั่นที่ไม่ระบุชื่อเป็นการเรียกกลับซึ่งมักจะนำไปสู่ปาเก็ตตี้ของเส้นทางรหัสสับสนที่คุณไม่สามารถนำทางไปรอบ ๆ อย่างรวดเร็ว

  • และแน่นอนว่า JSLint สามารถตรวจจับข้อผิดพลาดบางอย่างได้ก่อนที่จะทำการรันไทม์ แต่ถึงกระนั้นก็ยังไม่สะดวกเท่ากับการมีเส้นหยักสีแดงใต้รหัสของคุณในเบราว์เซอร์โดยตรง

ผลที่สุดคือคุณต้องมีโปรแกรมทั้งหมดไว้ในหัวตลอดเวลา สิ่งนี้จะเพิ่มภาระการรับรู้อย่างหนาแน่นสำหรับการเขียนโปรแกรมที่ซับซ้อน และสิ่งพิเศษทั้งหมดที่ต้องกังวลเกี่ยวกับการปล่อยให้สมองของฉันมีพื้นที่น้อยลงสำหรับความคิดสร้างสรรค์ที่แท้จริงและการแก้ปัญหา

แน่นอนว่ามันเร็วกว่าที่จะโยนวัตถุเข้าด้วยกันแทนที่จะเขียนคำจำกัดความของคลาสอย่างเป็นทางการทั้งหมด แต่ในขณะที่โปรแกรมอาจจะง่ายกว่าเล็กน้อยและเร็วกว่าในการเขียน แต่จากประสบการณ์ของฉันพวกเขาอ่านและดีบักได้ยากกว่ามาก

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

GWT อนุญาตให้คุณเขียนโค้ดสำหรับสภาพแวดล้อม Javascript ใน Java แทน แต่ดูเหมือนจะไม่ได้ใช้กันอย่างแพร่หลายอย่างที่ฉันคาดไว้ ผู้คนดูเหมือนจะชอบจาวาสคริปต์สำหรับโปรแกรมที่ซับซ้อน

ฉันพลาดอะไรไป


8
คำแนะนำของฉันสำหรับผู้พัฒนา Java ทุกคนที่มีช่วงเวลายากลำบากกับ JS คือการเรียนรู้ภาษาอื่นที่ไม่มีไวยากรณ์แบบ C มันจะช่วยให้คุณผ่านพ้นความคล้ายคลึงกันทางไวยากรณ์เมื่อคุณกลับมาที่ JS และอาจช่วยให้คุณเริ่มมองสิ่งต่าง ๆ ในแง่ของการแลกเปลี่ยนการออกแบบภาษาแทนที่จะมองสิ่งต่าง ๆ ในแง่ของวิธีการเขียนรหัสทั้งหมดและวิธีการ ทุกคนอื่นเข้าใจผิด และถ้าคุณได้ความคิดในการเขียนกรอบ UI โปรดเรียนรู้ JavaScript ก่อนที่จะทำให้เรามีขยะเหลือเฟืออีกชิ้นหนึ่งซึ่งมีความซับซ้อนในระดับตลาดที่ไม่สามารถอธิบายได้อย่างง่ายดายสู่ CTOs ที่ไม่มีใครรู้
Erik Reppen

5
เป็นคนที่น่ารังเกียจฉันเมื่อ 2 ปีที่แล้วคือ ฉันจะพยายามให้ความช่วยเหลือเล็กน้อยมากขึ้นตอนนี้ที่ฉันกดชวายากขึ้น IDE? ตรวจสอบ Jetbrains Webstorm (ฉันยังคงใช้ Scite เป็นหลัก แต่ WS ไม่ได้เลวร้าย) แต่สำหรับเว็บฝั่งไคลเอ็นต์เครื่องมือ dev ของ Chrome ทำงานได้ค่อนข้างดีในการครอบคลุมคุณในการดีบักและมันทำงานได้อัตโนมัติเมื่อเขียนตัวอย่างของ รหัสในคอนโซล นอกจากนี้ใช้เวลาคิดเกี่ยวกับ OOP IMO, คลาสที่ไม่ใช่ตัวเลือกและ IDEs ซึ่งใช้แทนความสามารถในการมองเห็นของมนุษย์ได้สังหาร OOP อย่างสิ้นเชิงใน Java จำนวนมาก
Erik Reppen

2
ฉันรู้สึกถึงความเจ็บปวดของคุณ. การวางลงในจาวาสคริปต์คือเวอร์ชันเว็บของการวางลงในภาษาแอสเซมบลีทางฝั่งไคลเอ็นต์ มันอาจเป็นเรื่องสนุก แต่ชุดเครื่องมือนั้นอ่อนแอและประสิทธิภาพลดลงอย่างแน่นอนกับงานพิเศษทั้งหมดที่คุณต้องทำ นั่นคือชีวิตในการเขียนโปรแกรม ไม่ใช่ทุกสิ่งที่จะเกิดขึ้นได้ในระดับสูงสุดของความเป็นนามธรรม :-)
Brian Knoblauch

2
@ErikReppen ฉันเริ่มต้นเป็นนักพัฒนา Java แต่ฉันคล่องแคล่วใน Obj-C โปรแกรมใน Ruby, Delphi, C ++, C #, Prolog, PHP, ทุบตีและฉันยังพบว่าจาวาสคริปต์ที่เลวร้ายที่สุดในการอ่านและ mantain
Sulthan

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

คำตอบ:


22

นิโคตินที่ใช้ IDE ไม่พร้อมใช้งาน * ในภาษาไดนามิกเช่น javascript คุณต้องเรียนรู้ที่จะทำโดยไม่มีพวกเขา คุณจะต้องแทนที่การสนับสนุนเครื่องมือด้วยการออกแบบที่ดีกว่า

ใช้รูปแบบโมดูล - ทั้งด้วยมือหรือด้วยเครื่องมือเช่นrequirejs ทำให้โมดูลมีขนาดเล็กเพื่อให้คุณสามารถให้เหตุผลได้อย่างง่ายดาย

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

พยายามหลีกเลี่ยงการเชื่อมโยงรหัสของคุณกับ DOM - พยายามอย่างหนักเพื่อ จำกัด ปริมาณการจัดการ DOM ที่คุณทำในรหัสของคุณ หากคุณสามารถส่งผ่านตัวเลือกหรือคอลเลกชัน jQuery ทำเช่นนั้นแทนที่จะให้รหัสของคุณรู้เกี่ยวกับโครงสร้างหน้า

* หากคุณกำลังใช้ห้องสมุดยอดนิยมคุณสามารถรับการเติมข้อความอัตโนมัติปลอมได้ แต่มันเหมือน "แสดงวิธีการ jquery ทั้งหมด" มากกว่าเช่น "คุณสมบัติใดที่วัตถุนี้มี" มันประหยัดการพิมพ์ แต่ไม่รับประกันความถูกต้อง


ยอมรับคำแนะนำนี้อย่างสร้างสรรค์เกี่ยวกับวิธีจัดการกับการขาดเครื่องมือ
funkybro

3
"คุณต้องเรียนรู้ที่จะทำโดยปราศจากพวกเขา" หรือเรื่องที่สนใจหรือใช้ภาษาระดับสูงกว่าที่สร้างจาวาสคริปต์และมีเครื่องมือที่เหมาะสม
Den

@Den: คุณมีข้อเสนอแนะสำหรับภาษาระดับสูงด้วยเครื่องมือขั้นสูงหรือไม่? จากประสบการณ์ของฉันมีเครื่องมือขั้นสูงสำหรับภาษายอดนิยม ภาษาระดับสูงอะไรที่คอมไพล์ลงในจาวาสคริปต์นั้นได้รับความนิยมมากพอที่จะมีเครื่องมือดังกล่าว?
Sean McMillan

1
@SeanMcMillan: บาง .NET (C # / F #) ตัวอย่าง jsil.org , projects.nikhilk.net/ScriptSharp , sharpkit.net , websharper.com
Den

1
@SeanMcMillan Java ดูที่ GWT developers.google.com/web-toolkit
funkybro

24

ฉันต้องการที่จะเพิ่มคำตอบสำหรับคำถามนี้เพราะฉันได้รับการจู่โจมผ่าน Java ที่ดี, ไม่ดี แต่ส่วนใหญ่น่าเกลียดเมื่อเร็ว ๆ นี้และฉันมีโหลดใหม่ทั้งหมดของภาระงานเกินขอบเขตทั่วๆไปเกี่ยวกับ Java และ Java devs vs. JS และ JS devs ที่อาจมีพื้นฐานมาจากสิ่งที่คล้ายกับความจริงที่เป็นประโยชน์

มี IDEs แต่มันก็มีประโยชน์ที่จะเข้าใจว่าทำไมไม่มีอะไรมากมาย

ฉันได้ลองใช้ Webstorm แล้วตอนนี้ฉันพบว่าตัวเองชอบที่จะพัฒนา Node และมันก็ไม่เลวร้ายพอที่ฉันซื้อมันจริงๆ แต่ฉันก็ยังคงมีแนวโน้มที่จะเปิดไฟล์ js ใน Scite บ่อยกว่า WS เหตุผลนี้คือคุณสามารถทำสิ่งต่างๆได้มากขึ้นด้วย JS ที่น้อยลง แต่เนื่องจาก UI ทำงานให้ความคิดเห็นทันทีเครื่องมือ dev ของเบราว์เซอร์ (โดยเฉพาะ Chrome และ Firebug โดยเฉพาะ) นั้นยอดเยี่ยมมากและ (บัญชีสำหรับบริบทที่ไม่ใช่เบราว์เซอร์) ) การเรียกใช้โค้ดที่เปลี่ยนแปลงใหม่นั้นทำได้ง่ายและรวดเร็วโดยไม่ต้องมีขั้นตอนการคอมไพล์

อีกสิ่งหนึ่งที่ฉันเชื่อว่าค่อนข้างเป็นธรรมโดยทั่วไปแล้ว IDEs สร้างความต้องการของตนเองโดยการเปิดใช้งานโค้ดเลอะเทอะซึ่งคุณไม่สามารถจ่ายได้ใน JavaScript ต้องการเรียนรู้วิธีที่เราจัดการใน JS หรือไม่ มันอาจช่วยในการเริ่มต้นโดยพยายามเขียนสิ่งที่ไม่สำคัญใน Java โดยไม่ต้อง IDE และใส่ใจกับสิ่งที่คุณต้องเริ่มต้นทำและคิดเพื่อที่จะสามารถรักษา / แก้ไขรหัสนั้นโดยไม่ต้องย้าย IDE ข้างหน้า IMO สิ่งเหล่านั้นยังคงมีความสำคัญต่อการเขียนโค้ดที่สามารถบำรุงรักษาได้ไม่ว่าคุณจะมี IDE หรือไม่ก็ตาม ถ้าฉันต้องเขียนหลักสูตรการเขียนโปรแกรม 4 ปีมันจะไม่ให้คุณสัมผัส IDE ในช่วงสองปีแรกเพื่อไม่ให้ได้รับเครื่องมือและการพึ่งพาที่บิดเบี้ยว

โครงสร้าง

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

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

แอพ JS ที่มีโครงสร้างที่ดีในระดับสูงสุดจะมีฟังก์ชั่นที่ซับซ้อน (เช่น jQuery) และวัตถุที่มีปฏิสัมพันธ์ซึ่งกันและกัน ฉันจะยืนยันว่าเครื่องหมายของแอพที่มีโครงสร้างและบำรุงรักษาง่ายในภาษาใด ๆ ก็คือมันชัดเจนว่าคุณกำลังมองหาด้วย IDE หรือ Notepad ++ มันเป็นหนึ่งในเหตุผลหลักที่ฉันมีความสำคัญอย่างยิ่งต่อการฉีดขึ้นต่อกันและการทดสอบ TDD ครั้งแรกที่นำไปสู่จุดสูงสุด

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

หลักการสำคัญก่อน

ฉันกำลังพูดถึงสิ่งสำคัญที่การปฏิบัติที่ดีอื่น ๆ ควรมาจาก: DRY, YAGNI หลักการของความประหลาดใจอย่างน้อยที่สุดการแยกโดเมนปัญหาอย่างชัดเจนการเขียนไปยังอินเทอร์เฟซและการเขียนรหัสที่อ่านง่ายของมนุษย์ สิ่งที่ซับซ้อนกว่าเล็กน้อยที่สนับสนุนการละทิ้งการปฏิบัติเหล่านั้นควรได้รับการพิจารณาว่าเป็น Kool Aid ในภาษาใด ๆ โดยเฉพาะอย่างยิ่งภาษาอย่าง JavaScript ซึ่งมันง่ายมากที่จะทิ้งรหัสที่สับสนไว้สำหรับคนต่อไป ยกตัวอย่างเช่นการมีเพศสัมพันธ์แบบหลวม ๆ เป็นสิ่งที่ดีจนกระทั่งคุณไม่สามารถบอกได้ว่ามีปฏิสัมพันธ์ระหว่างวัตถุเกิดขึ้นที่ไหน

อย่ากลัวการพิมพ์แบบไดนามิก

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

เรียนรู้ Crap จากฟังก์ชั่น JS และการปิด

ฟังก์ชั่นชั้นหนึ่งของ JS นั้นเป็นเหตุผลหลักที่ JS ได้รับรางวัล "ภาษาที่ควรค่าแก่การสัมผัสกับเว็บไคลเอ็นต์ที่มีรางวัล" และใช่มีการแข่งขันจริง พวกเขายังเป็นคุณลักษณะสำคัญของ JS เราสร้างวัตถุกับพวกเขา ทุกอย่างถูกกำหนดขอบเขตไว้ที่ฟังก์ชัน และพวกเขามีคุณสมบัติที่มีประโยชน์ เราสามารถตรวจสอบพารามิเตอร์ผ่านคีย์เวิร์ดอาร์กิวเมนต์ เราสามารถแนบและยิงพวกมันชั่วคราวในบริบทของการเป็นวิธีการของวัตถุอื่น ๆ และพวกเขาสร้างวิธีการที่ขับเคลื่อนด้วยเหตุการณ์สำหรับสิ่งต่าง ๆ ที่ง่ายต่อการใช้งาน ในระยะสั้นพวกเขาทำให้ JS เป็นสัตว์ร้ายที่ลดความซับซ้อนและปรับใช้การใช้งานที่แตกต่างกันของ JS ตัวเอง (แต่ส่วนใหญ่ DOM API) ที่แหล่งที่มา

ประเมินรูปแบบ / การปฏิบัติซ้ำอีกครั้งก่อนนำไปใช้

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

ทำตามเป้าหมายของภาษาและทำสิ่งต่างๆได้มากขึ้นด้วยการใช้น้อยลง

ฉันเชื่อว่าหนึ่งในหัวหน้าจาวาจาวาทำให้เกิดการโต้แย้งที่ไหนสักแห่งที่ความฟุ่มเฟื่อยเป็นจริงคุณลักษณะที่เป็นบวกที่ทำให้โค้ดเข้าใจได้ง่ายขึ้นสำหรับทุกฝ่าย hogwash หากเป็นเรื่องจริงนักกฎหมายจะอ่านง่ายขึ้น มีเพียงนักเขียนเท่านั้นที่สามารถทำให้สิ่งที่พวกเขาเขียนเข้าใจง่ายขึ้นและคุณทำได้โดยใส่ตัวเองในรองเท้าของผู้ชายคนอื่นเป็นครั้งคราว ดังนั้นยอมรับกฎทั้งสองนี้ 1. เป็นคนตรงและชัดเจนที่สุด 2. ไปที่จุดแช่งแล้ว การชนะคือรหัสที่สะอาดและรัดกุมคือคำสั่งของขนาดที่ง่ายต่อการเข้าใจและบำรุงรักษามากกว่าสิ่งที่คุณต้องสำรวจเลเยอร์ยี่สิบห้าเพื่อรับจากทริกเกอร์ไปสู่การกระทำที่ต้องการจริง รูปแบบส่วนใหญ่ที่สนับสนุนสิ่งนั้นในภาษาที่เข้มงวดนั้นเป็นวิธีแก้ไขข้อ จำกัด ที่ JavaScript ไม่มีอยู่จริง

ทุกอย่างอ่อนและไม่เป็นไร

JS น่าจะเป็นหนึ่งในภาษาที่นิยมใช้น้อยที่สุด ยอมรับว่า มันใช้งานได้ดี เช่นคุณสามารถเขียนออบเจ็กต์ด้วย vars "ส่วนตัว" ที่ไม่สามารถเข้าถึงได้โดยเพียงประกาศ vars ปกติในฟังก์ชัน constructor และฉันทำสิ่งนี้บ่อยๆ แต่ไม่ใช่เพื่อปกป้องรหัสหรือผู้ใช้ของฉัน "จากตัวเอง" (พวกเขาสามารถแทนที่มันด้วยเวอร์ชันของตัวเองในช่วงรันไทม์อยู่ดี) แต่แทนที่จะส่งสัญญาณความตั้งใจเพราะข้อสันนิษฐานก็คือผู้ชายคนอื่นมีความสามารถพอที่จะไม่ต้องการทำลายการอ้างอิงใด ๆ และจะเห็นว่าคุณไม่ได้ตั้งใจที่จะไปที่นั่นโดยตรงด้วยเหตุผลที่ดี

ไม่มีการ จำกัด ขนาดเฉพาะโดเมนที่มีปัญหา

ปัญหาที่ใหญ่ที่สุดที่ฉันมีกับโค้ด Java ทั้งหมดที่ฉันเห็นคือไฟล์คลาสมากเกินไป ก่อนอื่น SOLID เป็นเพียงการกล่าวซ้ำที่สับสนของสิ่งที่คุณควรทราบเกี่ยวกับ OOP คลาสควรจัดการกับชุดของปัญหาที่เกี่ยวข้อง ไม่ใช่ปัญหาเดียวกับวิธีหนึ่ง นั่นเป็นเพียงการใช้โค้ด C func-spaghetti เก่าที่ไม่ดีเท่านั้นด้วยการเพิ่มไวยากรณ์คลาสที่ไม่มีจุดหมายทั้งหมดเพื่อเริ่มระบบ ไม่มีการ จำกัด ขนาดหรือวิธีการ ถ้ามันสมเหตุสมผลที่จะเพิ่มบางสิ่งลงในฟังก์ชันหรือคลาสหรือคอนสตรัคเตอร์ที่มีความยาวอยู่แล้ว รับ jQuery มันเป็นชุดเครื่องมือที่มีความยาวไลบรารีทั้งหมดในฟังก์ชั่นเดียวและไม่มีอะไรผิดปกติกับมัน ไม่ว่าเราจะต้องการ jQuery ก็ขึ้นอยู่กับการถกเถียงที่สมเหตุสมผล แต่ในแง่ของการออกแบบ

หาก Java เป็นสิ่งที่คุณรู้ว่าตะลุยสิ่งที่มีไวยากรณ์ที่ไม่ใช่ C

เมื่อฉันเริ่มยุ่งกับ Python เพราะฉันชอบสิ่งที่ฉันได้ยินเกี่ยวกับ Django ฉันเรียนรู้ที่จะเริ่มแยกไวยากรณ์จากการออกแบบภาษา เป็นผลให้มันง่ายขึ้นที่จะเข้าใจ Java และ C เป็นผลรวมของส่วนการออกแบบภาษาของพวกเขามากกว่าผลรวมของสิ่งที่พวกเขาทำแตกต่างกับไวยากรณ์เดียวกัน ผลข้างเคียงที่ดีคือยิ่งคุณเข้าใจภาษาอื่นในแง่ของการออกแบบมากเท่าไหร่คุณก็ยิ่งเข้าใจจุดแข็ง / จุดอ่อนของคนที่คุณรู้จักดีที่สุดในทางตรงกันข้ามได้ดีขึ้น

ข้อสรุป

ทีนี้เมื่อพิจารณาถึงสิ่งเหล่านี้แล้วลองมาดูปัญหาของคุณทั้งหมด:

  • ไม่มีวิธีการค้นหาจุดเข้าใช้งานของฟังก์ชันในทันที (นอกเหนือจากการค้นหาข้อความธรรมดาซึ่งอาจส่งผลให้มีการค้นหาวิธีการตามลำดับชั้นการโทรที่ตามมาหลังจากนั้นสองหรือสามแห่งซึ่งคุณลืมไปว่าคุณเริ่มต้นที่ไหน)

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

function ObjectConstructor(){
    //No need for an init method.
    //Just pass in params and do stuff inside for instantiation behavior

    var privateAndPersistent = true;

    //I like to take advantage of function hoisting for a nice concise interface listing
    this.publicAndPointlessEncapsulationMurderingGetterSetter
    = publicAndPointlessEncapsulationMurderingGetterSetter;
    //Seriously though Java/C# folks, stop with the pointless getter/setters already

    function publicAndPointlessEncapsulationMurderingGetterSetter(arg){
        if(arg === undefined){
            return privateAndPersistent;
        }
        privateAndPersistent = arg;
    }

}

ObjectConstructor.staticLikeNonInstanceProperty = true;

var instance = new ObjectConstructor();//Convention is to  capitalize constructors

ในรหัสของฉันฉันแทบจะไม่เคยใช้ตัวอักษรวัตถุ{}เป็นส่วนประกอบแอพโครงสร้างเพราะพวกเขาไม่สามารถมี vars ภายใน (ส่วนตัว) และชอบที่จะสำรองไว้เพื่อใช้เป็นโครงสร้างข้อมูล ที่ช่วยกำหนดความคาดหวังที่รักษาความชัดเจนของเจตนา (หากคุณเห็น curlies เป็นข้อมูลไม่ใช่องค์ประกอบของสถาปัตยกรรมแอป)

  • พารามิเตอร์ถูกส่งผ่านไปยังฟังก์ชั่นโดยที่ไม่มีทางรู้ได้ว่าคุณสมบัติและฟังก์ชั่นใดที่มีอยู่ในพารามิเตอร์นั้น (นอกเหนือจากการรันโปรแกรมจริง ๆ แล้วนำทางไปยังจุดที่เรียกใช้ฟังก์ชันและใช้ console.logs เพื่อแสดงคุณสมบัติทั้งหมด สามารถใช้ได้)

ดูเครื่องมือเบราว์เซอร์ที่ทันสมัยอีกครั้ง แต่ทำไมมันถึงเป็นคนเกียจคร้านที่จะรันโปรแกรมอีกครั้ง? โหลดซ้ำเป็นสิ่งที่เว็บ dev ฝั่งไคลเอ็นต์มักจะพบเห็นทุกสองสามนาทีเพราะคุณไม่ต้องทำอะไรเลย นี่เป็นอีกจุดหนึ่งที่โครงสร้างแอปมีประโยชน์ แต่เป็นข้อเสียอย่างหนึ่งของ JS ที่คุณต้องทำการตรวจสอบความถูกต้องของตัวเองเมื่อการบังคับใช้สัญญามีความสำคัญ (สิ่งที่ฉันทำที่จุดปลายสัมผัสกับสิ่งอื่น ๆ เท่านั้น ไม่สามารถควบคุมได้) IMO การค้าขายนั้นคุ้มค่ากับผลประโยชน์

  • การใช้งานทั่วไปของฟังก์ชั่นที่ไม่ระบุชื่อเป็นการเรียกกลับซึ่งมักจะนำไปสู่ปาเก็ตตี้ของเส้นทางรหัสสับสนที่คุณไม่สามารถนำทางไปรอบ ๆ อย่างรวดเร็ว

ใช่มันเป็นสิ่งที่ไม่ดีเลย อย่าทำอย่างนั้น ตั้งชื่อลูกของคุณฟังก์ชั่น ง่ายต่อการติดตามสิ่งต่าง ๆ เช่นกัน คุณสามารถกำหนดประเมิน (จำเป็นต้องกำหนด) และกำหนดฟังก์ชั่นเรื่องง่าย ๆ ในแนวเดียวกันกับ:

doSomethingWithCallback( (function callBack(){}) );

ตอนนี้ Chrome จะมีชื่อให้คุณเมื่อคุณติดตามการโทร สำหรับ func ที่ไม่สำคัญฉันจะนิยามมันนอกการโทร นอกจากนี้โปรดทราบว่าฟังก์ชั่น anonoymous ที่กำหนดให้กับตัวแปรยังคงไม่ระบุชื่อ

  • และแน่นอนว่า JSLint สามารถตรวจจับข้อผิดพลาดบางอย่างได้ก่อนที่จะทำการรันไทม์ แต่ถึงกระนั้นก็ยังไม่สะดวกเท่ากับการมีเส้นหยักสีแดงใต้รหัสของคุณในเบราว์เซอร์โดยตรง

ฉันไม่เคยแตะต้องสิ่งของเลย Crockford ได้มอบสิ่งที่ดีให้กับชุมชน แต่ JSLint ข้ามเส้นไปสู่การตั้งค่าโวหารและการแนะนำองค์ประกอบบางอย่างของ JavaScript เป็นส่วนที่ไม่ดีโดยไม่มีเหตุผลที่ดีโดยเฉพาะ IMO ละเว้นสิ่งหนึ่งอย่างแน่นอนเกี่ยวกับคลาส regEx และ negation ตามด้วย * หรือ + อักขระตัวแทนมีประสิทธิภาพต่ำกว่าและคุณสามารถ จำกัด การซ้ำซ้อนได้อย่างง่ายดายด้วย {} อย่าสนใจสิ่งที่เขาพูดเกี่ยวกับตัวสร้างฟังก์ชัน คุณสามารถพันคำเหล่านั้นใน func จากโรงงานได้หากคำหลักใหม่ทำให้คุณรำคาญ CSSLint (ไม่ใช่ของคร็อคฟอร์ด) ยิ่งแย่กว่าคำแนะนำที่ไม่ดี มักจะพาคนที่ทำธุระที่พูดเยอะ ๆ ด้วยเกลือเม็ดหนึ่ง บางครั้งฉันสาบานว่าพวกเขาแค่ต้องการสร้างอำนาจหรือสร้างเนื้อหาใหม่

และอีกครั้งคุณต้องคลายความเข้าใจในสิ่งที่คุณเรียนรู้ด้วยความกังวลที่เกิดขึ้นในตอนนี้ (เป็นเรื่องปกติที่ฉันเคยเห็นด้วย Java / C # devs จำนวนมาก) หากพบข้อผิดพลาดในเวลาทำงานยังคงรบกวนคุณอีก 2 ปีต่อมาฉันต้องการให้คุณนั่งลงและสแปมโหลดในเบราว์เซอร์จนกว่ามันจะจมลงมา ไม่มีการคอมไพล์เวลา / รันไทม์ (ไม่เห็นอย่างใดอย่างหนึ่งอยู่แล้ว - JS ทำงานบน JIT ตอนนี้) ไม่เพียง แต่จะค้นพบข้อบกพร่องในเวลาทำงานเท่านั้น แต่ยังมีประโยชน์อย่างมากในการโหลดสแปมในราคาถูกและง่ายดายและค้นหาข้อบกพร่องที่จุดหยุดทุกจุดที่คุณไป

และรับ crackin 'บนเครื่องมือ dev Chrome พวกมันถูกติดตั้งมาที่ webkit โดยตรง คลิกขวาใน Chrome ตรวจสอบองค์ประกอบ. สำรวจแท็บ มีพลังการดีบักมากมายพร้อมกับความสามารถในการเปลี่ยนรหัสในคอนโซลระหว่างรันไทม์เป็นหนึ่งในตัวเลือกที่ทรงพลังที่สุด แต่ไม่ค่อยชัดเจน เหมาะสำหรับการทดสอบเช่นกัน

ในบันทึกที่เกี่ยวข้องข้อผิดพลาดคือเพื่อนของคุณ อย่าเขียนคำสั่ง catch ที่ว่างเปล่า ใน JS เราทำไม่ได้ซ่อนหรือฝังข้อผิดพลาด (หรืออย่างน้อยเราไม่ควรไอยูอิ/ ไอ ) เราเข้าร่วมกับพวกเขา อะไรที่น้อยลงจะส่งผลให้ความเจ็บปวดในการแก้ปัญหา และถ้าคุณเขียนคำสั่ง catch เพื่อซ่อนข้อผิดพลาดที่อาจเกิดขึ้นในการผลิตอย่างน้อยก็เงียบบันทึกข้อผิดพลาดและเอกสารวิธีการเข้าถึงบันทึก


3
การเลื่อนขนาดของคำตอบ ...
Florian Margaine

5

สิ่งที่คุณพูดเป็นเพียงเรื่องธรรมดาของคนที่มีใจจาวาที่มองจาวา

ก่อนอื่นให้ตอบคำถามของคุณ ...

... คำถามของฉันคือโปรแกรมเมอร์คนอื่นจะรับมือกับปัญหาเหล่านี้อย่างไร ...

คำตอบ: พวกเขาไม่ได้ พวกเขาเรียนรู้ปรัชญา JavaScript โดยการปล่อยจาวาลัทธิแรก

คุณต้องเข้าใจหลักฐานนี้ ... JavaScript ไม่ใช่ Java มันไม่ได้เกี่ยวกับไวยากรณ์ - มันเป็นเรื่องของปรัชญามากกว่า

ทีนี้ลองมาดูกัน ...

  • ดูสถานที่ทั้งหมดทันทีที่มีการเรียกใช้เมธอดหรือใช้ค่าคงที่ (ลำดับชั้นการโทรเปิด / แสดงการอ้างอิง)

    คลิกควบคุมที่ชื่อฟังก์ชัน / สมาชิก / คลาสเพื่อไปที่คำจำกัดความ

    สิ่งเหล่านี้พร้อมใช้งาน - เพียงเลือก IDE ที่เหมาะสม

  • การพิมพ์แบบสแตติกหมายถึงคุณสามารถใช้การเติมโค้ดให้สมบูรณ์เพื่อแสดงพารามิเตอร์ / ฟังก์ชั่นทั้งหมดที่มีบนวัตถุ

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

  • และแน่นอนว่า JSLint สามารถตรวจจับข้อผิดพลาดบางอย่างได้ก่อนที่จะทำการรันไทม์ แต่ถึงกระนั้นก็ยังไม่สะดวกเท่ากับการมีเส้นหยักสีแดงใต้รหัสของคุณในเบราว์เซอร์โดยตรง

    Firebug, Chrome / Safari console และแม้แต่ IDE ทำทุกอย่างและอีกมากมาย

    มี JSHint ที่สามารถทำการวิเคราะห์แบบคงที่ที่โปรแกรมเมอร์ Java ใช้

  • ผลที่สุดคือคุณต้องมีโปรแกรมทั้งหมดไว้ในหัวตลอดเวลา สิ่งนี้จะเพิ่มภาระการรับรู้อย่างหนาแน่นสำหรับการเขียนโปรแกรมที่ซับซ้อน

    ไม่ถูกต้อง! ในทางตรงกันข้าม JavaScript เป็นภาษาการเขียนโปรแกรม "เบา" และสนับสนุนให้คุณมีโปรแกรมที่ง่ายขึ้น ดังที่ Doug Crockford กล่าวว่า ... มันจะ "ลงโทษ" คุณถ้าคุณพยายามที่จะเขียนโปรแกรมที่ใช้แบบจำลองอย่างหนักใน JavaScript

  • ในขณะที่โปรแกรมอาจจะง่ายกว่าเล็กน้อยและเร็วกว่าในการเขียนจากประสบการณ์ของฉันพวกเขาอ่านและดีบักได้ยากกว่ามาก

    ผิดอย่างสิ้นเชิง! คุณจะตัดสินใจว่าจะอ่านตามภาษาการเขียนโปรแกรมได้อย่างไร โปรแกรมสามารถอ่านได้ (หรือไม่) - ไม่ใช่ภาษา นอกจากนี้ JavaScript ยังมีตัวแก้ไขข้อบกพร่องที่ยอดเยี่ยมอีกด้วย

ให้อภัยฉันถ้าฉันฟังดูหยาบคายเล็กน้อย - แต่ความจริงก็คือคุณต้องเปลี่ยนการจัดการจาวาของคุณเพื่อทำความเข้าใจกับจาวาสคริปต์

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


2
คุณมีตัวอย่างของ JavaScript IDE ที่ฉันสามารถ "ควบคุมคลิกที่ชื่อฟังก์ชัน / สมาชิก / คลาสเพื่อตรงไปที่คำจำกัดความของ" ฉันใช้ Eclipse สำหรับ Java และ Scala แต่ไม่มี IDE / Editor ที่ดีสำหรับ JavaScript
Jonas

11
เตรียมที่จะวิจารณ์บางอย่าง แต่บางสิ่งในที่นี่ค่อนข้างผิด ถ้าฉันสร้างวัตถุและส่งต่อไปยังฟังก์ชันฉันสามารถคลิก ctrl บนพารามิเตอร์และดูคุณสมบัติได้หรือไม่ ไม่ฉันไม่สามารถทำได้เพราะวัตถุสามารถเป็นอะไรก็ได้ หากฉันสะกดคำผิดหนึ่งในชื่อคุณสมบัติวัตถุมันจะเตือนฉันไหม ไม่มันจะไม่ได้เพราะไม่ใช่ข้อผิดพลาดใน JS แม้ว่ามันอาจจะไม่เป็นอย่างที่คุณต้องการก็ตาม การกรอกโค้ดที่มีประโยชน์เป็นไปไม่ได้ การค้นหาคุณสมบัติของพารามิเตอร์ของฟังก์ชันที่เกี่ยวข้องกับการ spelunking ผ่านโค้ดที่เรียกใช้ฟังก์ชันเพื่อค้นหาตำแหน่งที่วัตถุถูกสร้างขึ้น
funkybro

3
คุณสามารถบ่นได้ว่าวิธีการสร้าง JS นั้นทำให้ IDE สำหรับรหัสสำหรับคุณยากขึ้น ฉันจะบ่นว่าใน Java ฉันไม่สามารถติดคุณสมบัติแบบไดนามิกเพื่อด่าใกล้สิ่งที่ฉันต้องการหรือวิปัสสนาบนวัตถุทั้งหมดในช่วงเวลาทำงาน ปรัชญาทั้งสองนั้นแตกต่างกันมากในด้านปรัชญา ฉันคิดว่าวิธีที่สร้างการเชื่อมต่อระหว่าง Java และ JS devs มีขนาดใหญ่กว่าระหว่าง JS และภาษาอื่น ๆ ส่วนใหญ่ โดยส่วนตัวฉันพบว่า C ปรับตัวได้ง่ายกว่า Java และฉันเกลียดการทำงานกับ IDE ที่ป่องๆ
Erik Reppen

2
แม้แต่ผู้พัฒนา Java ของ Google ก็ไม่สามารถออกจาก Java ได้เมื่อเขียน JS sitepoint.com/google-closure-how-not-to-write-javascript
Erik Reppen

3
คุณเขียน: JavaScript ไม่ใช่ Javaและคุณต้องเปลี่ยนการจัดการ Java ของคุณเพื่อทำความเข้าใจ JavaScriptตามด้วย: เฉพาะโปรแกรมเมอร์ Java ที่ "เป็นผู้ใหญ่" เท่านั้นที่สามารถชื่นชม JavaScript ...ดังนั้นเพื่อที่จะเข้าใจ Javascript ฉันต้องเป็นจาวาสคริปต์เป็นอันดับแรก มัน?
Caleb

3

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


2

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

บางทีเราควรใช้หลักการไม่ร่วมมือกับขยะนี้เพื่อทำให้มันหายไป


3
"ภาษาที่พิมพ์ไม่ดี" - โปรแกรมเมอร์หลายคนอาจไม่เห็นด้วยกับคุณ
Sean McMillan

7
+1, เหตุผลเดียวที่ทำให้ Javascript เป็นที่นิยมก็คือเพราะมันถูกที่แล้วในเวลาที่เหมาะสม
maple_shaft

2
อ๊ะพวกคุณเศร้ามากที่ Node.js ผูกกับ C ++ แทนที่จะเป็นจาวาใช่ไหม?
Erik Reppen

1
ฉันไม่แน่ใจว่า "ภาษาที่พิมพ์ไม่ดี" มีความหมายอย่างไร JavaScript ไม่ได้ "พิมพ์ไม่ดี" มันพิมพ์แบบไดนามิกและการดำเนินการอาจทำให้เกิดการข่มขู่ประเภท อย่ากล่าวโทษภาษาเพราะบรรณาธิการ / IDE ของคุณไม่ทราบประเภทของตัวแปร - คุณควรรู้จักมันอยู่ดี
Ryan Kinal

3
@RyanKinal จริงเหรอ? ที่คุณควรรู้ทุกคุณสมบัติและวิธีการทั้งหมดวัตถุและการเรียนการตรวจสอบภายในทั้งของคุณและของ API ภาษาของคุณและที่ห้องสมุดใด ๆ ที่คุณกำลังใช้โดยหน่วยความจำ ? คุณปฏิเสธความคิดเกี่ยวกับการเติมโค้ด IDE อย่างมากมายเพื่อปรับปรุงประสิทธิภาพการผลิตโดยลดภาระการรับรู้และให้สิ่งที่คุณคิดน้อยลง
funkybro

2

ผมเคยชอบจาวาสคริปต์ (และพิมพ์แบบไดนามิกของมัน) แต่ฉันได้เติบโตขึ้นเพื่อขอบคุณปฐมนิเทศวัตถุของการปิดและการเขียนโปรแกรมการทำงาน นอกจากนี้วัตถุระดับโลกและการกำจัดการแปลงแบบเงียบก็เป็นอากาศบริสุทธิ์เมื่อฉันพบพวกมันครั้งแรก

ide ที่ฉันต้องการสำหรับ javascript นั้นเป็นwebstormเพราะมันง่ายต่อการทำให้ jQuery intellitext ทำงานได้

นอกจากนี้ฉันจะไม่พูดว่ามันเติบโต - แพร่หลายไปแล้ว

คะแนนเฉพาะของคุณ:

ไม่มีวิธีการค้นหาจุดเริ่มต้นของฟังก์ชันในทันที

ฉันไม่เข้าใจสิ่งนี้มันจะง่ายกว่านี้ได้อย่างไร

พารามิเตอร์จะถูกส่งผ่านไปยังฟังก์ชันโดยไม่ทราบว่าคุณสมบัติและฟังก์ชันใดที่มีอยู่ในพารามิเตอร์นั้น

หากคุณตั้งค่า IDE ของคุณเพื่อรวมคำจำกัดความของวัตถุคุณสมบัติของวัตถุจะพร้อมใช้งานผ่าน intellitext (แต่ฉันอาจพลาดจุดของคุณที่นี่)

การใช้งานทั่วไปของฟังก์ชั่นที่ไม่ระบุชื่อเป็นการเรียกกลับซึ่งมักจะนำไปสู่ปาเก็ตตี้ของเส้นทางรหัสสับสนที่คุณไม่สามารถนำทางไปรอบ ๆ อย่างรวดเร็ว

การใช้งานทั่วไป? หากคุณไม่ชอบฟังก์ชั่นนิรนามอย่าใช้มัน หรือคุณหมายถึง jQuery ที่ใช้พวกมันอย่างมาก? jQuery เป็นที่น่ายกย่องจากนักพัฒนาเว็บมากที่สุดในขณะที่ประหยัดเวลาเดียวที่ใหญ่ที่สุดในประวัติศาสตร์ของการพัฒนาเว็บ

JSLint จับข้อผิดพลาดบางอย่างก่อนรันไทม์

มันจับทั้งหมดของพวกเขาคุณสามารถรวมไว้ในของคุณIDE หรือ Webstorm รวมไว้โดยค่าเริ่มต้น (ฉันคิดว่า)


การมีความแพร่หลายและความนิยมนั้นไม่จำเป็นต้องเหมือนกัน! ;-) อย่างไรก็ตาม webstorm เป็น IDE ที่ยอดเยี่ยมสำหรับ JavaScript (และแม้ว่าจะไม่ฟรีมันก็ค่อนข้างถูก) ฉันไม่ได้ใช้ แต่ฉันเชื่อว่า IntelliJ (เช่นจาก Jetbrains) มีฟังก์ชันการทำงานเดียวกันซึ่งอาจเกี่ยวข้องถ้าคุณมาจากพื้นหลัง Java และต้องการใช้ IDE เดียว
FinnNk

ตกลงบางทีฉันต้องชี้แจง ... ฉันหมายถึง "การเติบโตของความนิยม" ในบริบทของการพัฒนามากกว่าเบราว์เซอร์ / DOM คือมันจะถูกใช้เมื่อมีทางเลือกอื่น โดย "จุดเข้าใช้งานของฟังก์ชั่น" ฉันหมายถึงการหาจุดในรหัสที่มีการเรียกใช้ฟังก์ชั่น คุณสมบัติของพารามิเตอร์: ไม่มีทางที่ IDE จะรู้คุณสมบัติของวัตถุที่กำหนดก่อนรันไทม์! ฟังก์ชั่นไม่ระบุชื่อ: ฉันอาจไม่ชอบพวกเขา แต่คนอื่น ๆ ที่มีรหัสที่ฉันต้องบำรุงรักษาทำ JSLint ไม่ทราบว่าฉันพิมพ์ผิดชื่อคุณสมบัติของวัตถุที่กำหนดหรือไม่
funkybro

@funkybro "ไม่มีทางที่ IDE จะรู้คุณสมบัติของวัตถุที่กำหนดก่อนรันไทม์" มีเพียงรวม "whatMyObjectIs.js" เป็นสคริปต์อ้างอิงใน IDE และสำหรับชื่อคุณสมบัติที่พิมพ์ผิดลอง webstorm (ถ้าฉันจำไม่ผิด)
NimChimpsky

3
นั่นไม่ใช่! พิจารณารหัสนี้: var myFunc = function(param) { ... }; var myObj1 = { fooProp: fooVal, barProp: barVal}; var myObj2 = { catProp: catVal, dogProp: dogVal}; myFunc(myObj1); myFunc(myObj2); IDE สามารถเสนอโค้ดให้เสร็จสมบูรณ์myFuncได้paramอย่างไรในพารามิเตอร์ของ paramอาจเป็นวัตถุประเภทใดก็ได้ที่มีคุณสมบัติใด ๆ
funkybro

ใช่ แต่สันนิษฐานว่าพารามิเตอร์ที่คุณส่งผ่านนั้นมีอยู่จริงในบริบทนั้น ตัวแยกวิเคราะห์สามารถเรียงลำดับนั้นโดยไม่ต้องเป็นล่าม JS แบบเต็มของตัวเอง
Erik Reppen

2

ฉันพลาดอะไรไป

คุณพลาดข้อดีสองข้อที่ Javascript มีเหนือ Java:

  • รหัส Javascript มีขนาดประมาณหนึ่งในสี่ของรหัส Java ที่เทียบเท่ากัน
  • คุณไม่ต้องรอการคอมไพล์และรีสตาร์ทเซิร์ฟเวอร์

ฉันทำงานแตกต่างกันใน Javascript ฉันเพิ่มรหัสเล็กน้อยในแต่ละครั้งเท่าที่ฉันสามารถทดสอบได้และรีเฟรชเบราว์เซอร์และทดสอบ ด้วย jQuery Javascript สองบรรทัดเป็นสิ่งที่ฉันต้องการมากที่สุด

ฉันพบว่าการเขียนโปรแกรม Java ค่อนข้างไม่ก่อผลและตอนนี้ฉันกำลังเขียนโค้ดฝั่งเซิร์ฟเวอร์ทั้งหมดของฉันใน Groovy ด้วยเหตุผลสองประการเดียวกัน


5
"รหัส Javascript มีขนาดประมาณหนึ่งในสี่ของรหัส Java เทียบเท่า" <- นี่เป็นปัญหา! แน่นอนว่ามันรวดเร็วในการสร้างฟังก์ชั่นที่ไม่ระบุชื่อและเพิ่มคุณสมบัติพิเศษให้กับวัตถุต่างๆ แต่จะเกิดอะไรขึ้นเมื่อมีคนเยี่ยมชมโค้ดของคุณและพยายามหาว่าเกิดอะไรขึ้น นอกจากนี้โค้ดเพิ่มเติมใน Java ไม่จำเป็นต้องเท่ากับการพิมพ์เพิ่มเติม ... Eclipse เขียนมากสำหรับคุณ
funkybro

3
@funkybro: Eclipse เขียนมัน ... จากนั้นฉันติดอยู่มองผ่านมันไปตลอดชีวิตของโครงการ หากจำเป็นต้องใช้ แต่ปลั๊กอินเล็กน้อยสามารถสร้างได้นั่นคือกลิ่นภาษา คุณถูกต้องว่าคลาส Javascript ต้องการเอกสารเพิ่มอีกเล็กน้อย แต่เพียงแค่รู้ว่าลายเซ็นเมธอด Java นั้นไม่เพียงพอเช่นกัน
kevin cline

1
มันไม่จำเป็น! คุณสามารถจำลองจาวาสคริปต์ใน Java ได้ด้วยการเรียกใช้เมธอดที่มีการสะท้อนภาพเสมอและไม่ใช้อะไรนอกจากวัตถุธรรมดารายการและแผนที่หากคุณต้องการ อย่างไรก็ตามนักพัฒนาส่วนใหญ่ IME (ไม่ใช่ทุกคนที่ฉันจะสารภาพ!) เลือกที่จะกำหนดประเภทข้อมูลที่มีความหมายเนื่องจากพวกเขาพบว่ามันช่วยให้พวกเขาเขียนโค้ดที่จัดเก็บด้วยตนเองได้
funkybro

1
การสะท้อนกลับช่วยให้ Java สามารถปรับเปลี่ยนวัตถุในช่วงเวลาทำงานได้หรือไม่? วิธีการเกี่ยวกับการปิด? เรียนรู้ภาษาก่อนที่คุณจะวิพากษ์วิจารณ์หรือสมมติว่า Java ภาษากระบวนทัศน์ที่ปิดท้ายที่สุดของการชุมนุมนั้นสามารถเลียนแบบได้
Erik Reppen

1
Downvoters: นี่ไม่ใช่การลงประชามติบน Java vs. Javascript มันหยาบคายกับการลงคะแนนเสียงโดยไม่มีเหตุผล
วินไคลน์

0

ฉันรู้ว่าคำถามนี้เก่า แต่ในฐานะโปรแกรมเมอร์ C ++ / C # ที่มีความรู้สึกเหมือนกัน แต่ตอนนี้ผู้ที่ทำ JavaScript จำนวนมากในช่วง 10 ปีที่ผ่านมาคำแนะนำแรกของฉันคือการลองใช้Visual Studio Code

แน่นอนมันไม่สามารถนำเสนอทุกคุณสมบัติที่สามารถเพิ่มด้วยภาษาที่พิมพ์อย่างรุนแรง แต่มันมาค่อนข้างใกล้

นอกจากนี้ยังสามารถนำข้อมูลประเภทจาก typescript และนำไปใช้กับ JavaScript แม้ว่าคุณจะไม่เคยใช้ typescript คุณสามารถรับโค้ดที่สมบูรณ์และเอกสารเกี่ยวกับ API จำนวนมากเมื่อคุณพิมพ์ใน JavaScript

ดังนั้นคำถามของคุณ

  • ไม่มีวิธีการค้นหาจุดเข้าใช้งานของฟังก์ชันในทันที (นอกเหนือจากการค้นหาข้อความธรรมดาซึ่งอาจส่งผลให้มีการค้นหาวิธีการตามลำดับชั้นการโทรที่ตามมาหลังจากนั้นสองหรือสามแห่งซึ่งคุณลืมไปว่าคุณเริ่มต้นที่ไหน)

ดูเหมือนว่าแก้ไขส่วนใหญ่ใน VSCode?

  • พารามิเตอร์จะถูกส่งผ่านไปยังฟังก์ชันโดยไม่ทราบว่าคุณสมบัติและฟังก์ชันใดที่มีอยู่ในพารามิเตอร์นั้น

สิ่งนี้ได้รับการแก้ไขสำหรับ IDE จำนวนมากโดยการบันทึกโค้ดของคุณพร้อมกับข้อคิดเห็นสไตล์ JSDoc หรือ typescript ผู้แก้ไขจะอ่านความคิดเห็นและให้ความสมบูรณ์แบบเดียวกับที่คุณคุ้นเคย

การใช้งานทั่วไปของฟังก์ชั่นที่ไม่ระบุชื่อเป็นการเรียกกลับซึ่งมักจะนำไปสู่ปาเก็ตตี้ของเส้นทางรหัสสับสนที่คุณไม่สามารถนำทางไปรอบ ๆ อย่างรวดเร็ว

ในฐานะที่เป็นฟังก์ชั่นที่ไม่ระบุชื่อโปรแกรมเมอร์ C # เป็นเรื่องธรรมดาและได้รับการเพิ่มใน C ++ ฉันคิดว่านี่เป็นสิ่งที่คุณต้องคุ้นเคย

แม้ว่าการโทรกลับส่วนใหญ่จะถูกแทนที่ด้วยสัญญาและด้วย async / คอยและถ้าคุณมี api ที่ใช้โทรกลับคุณสามารถปิดมันได้อย่างรวดเร็วเพื่อใช้สัญญาและจากนั้นใช้ async / รอเพื่อให้ปัญหาหายไป

และแน่นอนว่า JSLint สามารถตรวจจับข้อผิดพลาดบางอย่างได้ก่อนที่จะทำการรันไทม์ แต่ถึงกระนั้นก็ยังไม่สะดวกเท่ากับการมีเส้นหยักสีแดงใต้รหัสของคุณในเบราว์เซอร์โดยตรง

คุณจะได้เส้นหยักใน Visual Studio Code ไม่เพียงแค่นั้น แต่หากคุณเปิดการรวม ESLint คุณจะได้รับคำเตือนและข้อผิดพลาดที่น่าทึ่งมากมายในตัวแก้ไขของคุณ มากกว่าที่ฉันเคยเห็นสำหรับภาษาอื่นจริง ๆ ประสบการณ์ของฉันคือ linters สำหรับ C / C # / Java ได้รับการเขียนโค้ดยากมากเนื่องจาก ESLint สามารถกำหนดค่าได้อย่างมากมายและสามารถขยายได้อย่างมหาศาลและเนื่องจากไลบรารียอดนิยมดังกล่าวสามารถรวมเข้าด้วยกันเพื่อให้คำแนะนำและคำเตือนเกี่ยวกับการใช้ไลบรารีเฉพาะในโปรแกรมแก้ไข บางสิ่งที่ฉันไม่ได้เห็นเป็นการส่วนตัวในภาษาอื่น (แม้ว่าตอนนี้อาจเป็นเรื่องปกติสำหรับภาษาอื่นด้วยหรือไม่)

นอกจากนี้ยังเป็น 2018 และ ES7 classเป็นบรรทัดฐานใหม่ให้คุณได้รับ คุณใช้โหมดเข้มงวดเสมอ คุณไม่เคยใช้varและมักจะใช้constและletและสิ่งต่าง ๆ ที่โปรแกรมเมอร์ C ++ / C # / Java ประสบความยากลำบากในการทำความคุ้นเคย เปิดno-undefกฎใน ESLint และปัญหาอื่น ๆ อีกมากมายหายไป

ที่กล่าวว่าเรียนรู้วิธีการใช้thisงานและวิธีการทำงานและวิธีการทำงานจริง ๆ เพราะมันไม่เหมือนกับ C ++ / C # / Java

2-3 ปีแรกของ JavaScript ของฉันทำให้ฉันผิดหวัง เมื่อถึงจุดหนึ่งมันก็คลิกแม้ว่า ฉันหยุดพยายามบังคับให้มันเป็น C ++ / C # / Java และตอนนี้ฉันรู้สึกหงุดหงิดที่จะย้อนกลับไปเมื่อสิ่งที่จะใช้ 15 บรรทัดใน JavaScript ใช้ 150 ในภาษาอื่น ๆ เหล่านั้น


-1

ถ้าคุณชอบ IDEs และใช้ในการทำให้เกิดคราสลองดู Aptana ว่าเป็น IDE สำหรับ JavaScript ฉันคิดว่ามันสามารถทำสิ่งที่คุณต้องการได้มาก (โดยส่วนตัวแล้วฉันเกลียด IDEs แต่นั่นคือการสนทนาที่แตกต่าง)

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

หากคุณต้องการสิ่งอื่นที่สามารถรวบรวมไปยัง JavaScript มีตัวเลือกมากมาย CofffeeScript, Clojure และ GWT ล้วน แต่น่าสนใจ


2
ฉันลอง Aptana ครั้งเดียวและมันก็แย่จริงๆ มันไม่ได้มีการเยื้องอัตโนมัติและจะทำลายการตั้งค่าโปรเจ็กต์ทั้งหมดที่กำหนดโดยโปรแกรมแก้ไข Eclipse อื่น ๆ เช่นการระบายสีและเนื้อหาถ้าฉันใช้ Eclipse และ Aptana ในโครงการเดียวกัน
Jonas

1
ฉันใช้ไปครู่หนึ่งแล้วก็เกลียด แต่อย่างที่ฉันบอกว่าฉันเกลียด IDE ของฉันทำการจัดรูปแบบโดยเครื่องมือบรรทัดคำสั่งและแก้ไขใน GVIM หรือ emacs (ขึ้นอยู่กับสิ่งที่ฉันทำ)
Zachary K

เกิดปัญหาในช่วงสองสามชั่วโมงแรกและฉันไม่มีอะไรเปิดนอกจากไฟล์จำนวนหนึ่ง ลาก่อนลาก่อน
Erik Reppen

Webstorm ไม่เลว ฉันยังคงใช้ Scite เป็นส่วนใหญ่ แต่ฉันเริ่มรู้สึกถึงสิ่ง IDE มากขึ้นเมื่อเขียนข้อมูลของ Node.js และฉันไม่ได้รับประโยชน์จากข้อเสนอแนะของเบราว์เซอร์และเครื่องมือ dev ที่มองเห็นได้
Erik Reppen

-1

ฉันยังไม่ได้ใช้ตัวเอง แต่ฉันได้เห็นการสาธิตบางอย่างและฉันประทับใจมากกับCloud 9ในฐานะ JavaScript IDE

คุณสามารถไปได้ทั้งแบบบริการออนไลน์หรือดาวน์โหลดจาก GitHub

และเป็นหลักฐานของคุณภาพในฐานะ IDE, Cloud9 ถูกเขียนโดยใช้ ... Cloud9!

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