ทำไม JavaScript ไม่ใช้สำหรับการพัฒนาแอพพลิเคชั่นแบบคลาสสิก (ซอฟต์แวร์ที่รวบรวม) [ปิด]


14

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

มันมีชุดคุณสมบัติมากมายเช่น:

  • การพิมพ์แบบไดนามิก
  • ฟังก์ชั่นชั้นหนึ่ง
  • ฟังก์ชั่นที่ซ้อนกัน
  • ปิด
  • ทำหน้าที่เป็นวิธีการ
  • ทำหน้าที่เป็นตัวสร้างวัตถุ
  • ต้นแบบตาม
  • ตามวัตถุ (เกือบทุกอย่างเป็นวัตถุ)
  • regex
  • ตัวอักษร Array และ Object

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

ด้วยฟังก์ชั่นที่กำหนดเองที่เน้นซอฟต์แวร์มากขึ้น (I / O, FileSystem, อุปกรณ์อินพุต ฯลฯ ) ฉันคิดว่ามันจะยอดเยี่ยมในการพัฒนาแอปพลิเคชันด้วย

แม้ว่าเท่าที่ฉันรู้จะใช้เฉพาะในการพัฒนาเว็บหรือในซอฟต์แวร์ที่มีอยู่เป็นภาษาสคริปต์เท่านั้น

เมื่อไม่นานมานี้อาจต้องขอบคุณ V8 Engine ซึ่งถูกใช้มากขึ้นสำหรับงานประเภทอื่น ๆ (ดูตัวอย่าง node.js)

ทำไมจนถึงตอนนี้จะได้รับการลดชั้นเพื่อการพัฒนาเว็บไซต์เท่านั้น? สิ่งที่ทำให้มันแตกต่างจากการพัฒนาซอฟต์แวร์?


8
หากการพัฒนาเว็บไม่ใช่การพัฒนาซอฟต์แวร์ (เป็นกรณีพิเศษ) แล้วมันคืออะไรกันแน่ ...
PéterTörök

@ PéterTörök: ฉันคิดว่าคุณเข้าใจแล้ว สิ่งที่ฉันหมายถึงคือจนถึงตอนนี้มันถูกใช้เป็นภาษาสคริปต์โดยซอฟต์แวร์เพื่อปรับปรุงคุณสมบัติเท่านั้น มันไม่เคยถูกใช้เพื่อตั้งโปรแกรมซอฟต์แวร์จริงสำหรับระบบปฏิบัติการ
Jose Faeti

4
ฉันเห็นการพิมพ์แบบไดนามิกเป็นข้อเสียเปรียบอย่างมากและฉันยังต้องการกำจัดค่าว่าง
Jonas

2
คุณหมายถึง "การพัฒนาแอปพลิเคชันแบบคลาสสิก" ไม่ใช่ "การพัฒนาซอฟต์แวร์" ใช่ไหม เปลี่ยนหัวข้อของคุณให้ดีขึ้น
Doc Brown

2
@JoseFaeti สำหรับ windows windows 8 ที่ให้คุณพัฒนา HTML5 & JS ได้
Raynos

คำตอบ:


14

เมื่อเร็ว ๆ นี้node.jsได้นำการพัฒนาฝั่งเซิร์ฟเวอร์ไปข้างหน้า ดังนั้นตอนนี้เป็นไปได้ที่จะเขียน JavaScript เพื่อการพัฒนา

นั่นเป็นเรื่องจริง ในประวัติศาสตร์มันไม่ได้ถูกใช้เป็นภาษาในการพัฒนา แต่ถึงกระนั้นการเขียนสคริปต์ในสภาพแวดล้อมของลูกค้า (ตัวแทนผู้ใช้) เป็นประเภทของการพัฒนา ไม่ใช่เหรอ

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


จะต้องเป็นเช่นนั้นและฉันดูเหมือนว่าสิ่งที่เป็นจริงย้ายในขณะนี้ :)
โฮเซ่ Faeti

15

จากที่นี่ :

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

a) Magic 'this' นี่คือสิ่งนี้ยกเว้นเมื่อเป็นเช่นนี้ JavaScript ผลักดันให้คุณใช้ฟังก์ชั่นที่ไม่ระบุชื่อทั่วทุกแห่งยกเว้นพวกเขามักจะสูญเสียบริบทที่เหมาะสมสำหรับตัวแปร 'this' ดังนั้นคุณจะต้องจบด้วยรหัสที่โง่เช่น "var _this = นี่" ทั่วทุกที่แล้วใช้มัน ภายใน callbacks หรือฟังก์ชั่นอื่น ๆ ของคุณ บางวันฉันสาบานว่าจำนวนหน้าที่ฉันจัดการเพื่อเขียนที่ไม่ใช้การเปลี่ยนชื่อ 'นี้' จริง ๆ แล้วมีขนาดเล็กกว่าจำนวนที่ทำ

b) 1 + "1" - 1 = 10 นอกจากนี้ "1" + 0 = "10" ใช่สิ่งนี้ทำให้เกิดข้อผิดพลาดสำหรับแอปพลิเคชันของเราซึ่งข้อมูลที่คาดว่าจะเป็นตัวเลขถูกโหลดจากไฟล์ JSON เป็นสตริงเนื่องจากข้อผิดพลาดในแอปพลิเคชันอื่นและผลลัพธ์ไม่ดี รหัสการโหลดทั้งหมดของเราต้องได้รับการอัปเดตเพื่อเพิ่มการแปลงประเภทจำนวนมากทั่วทุกที่ เมื่อฉันต้องการบางสิ่งบางอย่างที่จะเป็นตัวเลขฉันอยากให้มันเป็นตัวเลขไม่ใช่สตริงหรือวัตถุหรือเป็นโมฆะหรืออย่างอื่น Lua ซึ่งคล้ายกับจาวาสคริปต์ในทุก ๆ ด้านแก้ไขปัญหานี้โดยการไม่ปัญญาอ่อนพอที่จะใช้ตัวดำเนินการเดียวกันสำหรับการบวกและการต่อสตริง

c) Global โดยตัวแปรเริ่มต้น ดังนั้นแม้ว่าคุณจะโต้แย้งว่าการพิมพ์แบบไดนามิกเป็นเพียง "ง่ายขึ้น" เพราะคุณไม่ต้องคิดเกี่ยวกับการประกาศตัวแปร JavaScript จะโยนอาร์กิวเมนต์นั้นออกไปนอกหน้าต่างโดยทำให้คุณใส่ 'var' ต่อหน้าตัวระบุใหม่ทั่วทุกที่ . ถ้าอย่างนั้นคุณก็ลืมมันไป

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

e) ไม่สามารถสร้างประเภทพาส - บาย - ค่า นี่เป็นปัญหาที่พบบ่อยในทุกภาษานอกเหนือจาก C ++ / D จริงๆแล้ว สำหรับผู้ที่ใช้ JavaScript เพื่อเขียนแอป WebGL ให้ดูที่ไลบรารีพีชคณิตเชิงเส้นทั้งหมดสำหรับ JavaScript ในแอป 3D คุณใช้เวกเตอร์บ่อยกว่าสเกลาร์ ลองนึกภาพถ้าจำนวนเต็มในแอปของคุณถูกส่งผ่านโดยการอ้างอิงดังนั้น "a = 1; b = a; b ++" ทำทั้ง a และ b เท่ากับ 2 ทุกเวกเตอร์องค์ประกอบสามชิ้นเป็นวัตถุเต็มสมบูรณ์ พวกเขาถูกส่งผ่านโดยการอ้างอิง (ที่มาของข้อบกพร่องเกือบครึ่งในเกม WebGL ของเราในความเป็นจริงแล้ว) มีอยู่ในปริมาณมากถูกจัดสรรเป็นกองและเก็บขยะซึ่งทำให้เกิดแรงกดดันอย่างมากต่อ GC ซึ่งสามารถและส่งผลให้ GC หยุดชั่วคราวในเกม WebGL ที่เรียบง่าย นอกเสียจากว่าผู้พัฒนาจะกระโดดผ่านห่วงที่ซับซ้อนอย่างน่าขันเพื่อหลีกเลี่ยงการสร้างเวกเตอร์ใหม่ในทุก ๆ ที่ที่มันมีเหตุผลในการสร้างเวกเตอร์ใหม่ คุณไม่สามารถมีผู้ปฏิบัติงานมากไปดังนั้นคุณมีนิพจน์ขนาดใหญ่และน่าเกลียดในการทำงานขั้นพื้นฐาน การเข้าถึงแต่ละองค์ประกอบช้า วัตถุไม่ได้ถูกจัดเรียงอย่างเป็นธรรมชาติและด้วยเหตุนี้จึงช้าอย่างไม่น่าเชื่อที่จะผลักดันลงในบัฟเฟอร์จุดสุดยอดถ้าคุณใช้พวกเขาเป็นอินสแตนซ์ Float32Array ซึ่งสร้างความสับสนให้อึออกจากเครื่องมือเพิ่มประสิทธิภาพของทั้ง V8 และ SpiderMonkey ฉันพูดถึงพวกเขาผ่านการอ้างอิง? การเข้าถึงแต่ละองค์ประกอบช้า วัตถุไม่ได้ถูกจัดเรียงอย่างเป็นธรรมชาติและด้วยเหตุนี้จึงช้าอย่างไม่น่าเชื่อที่จะผลักดันลงในบัฟเฟอร์จุดสุดยอดถ้าคุณใช้พวกเขาเป็นอินสแตนซ์ Float32Array ซึ่งสร้างความสับสนให้อึออกจากเครื่องมือเพิ่มประสิทธิภาพของทั้ง V8 และ SpiderMonkey ฉันพูดถึงพวกเขาผ่านการอ้างอิง? การเข้าถึงแต่ละองค์ประกอบช้า วัตถุไม่ได้ถูกจัดเรียงอย่างเป็นธรรมชาติและด้วยเหตุนี้จึงช้าอย่างไม่น่าเชื่อที่จะผลักดันลงในบัฟเฟอร์จุดสุดยอดถ้าคุณใช้พวกเขาเป็นอินสแตนซ์ Float32Array ซึ่งสร้างความสับสนให้อึออกจากเครื่องมือเพิ่มประสิทธิภาพของทั้ง V8 และ SpiderMonkey ฉันพูดถึงพวกเขาผ่านการอ้างอิง?

f) ไม่มีการรวมหรือต้องการฟังก์ชันในตัว อย่างจริงจังยัง มีห้องสมุดของบุคคลที่สามอยู่ แต่เกือบทั้งหมดมีข้อผิดพลาดบางอย่างไม่อย่างน้อยก็เป็นปัญหาการแคชที่ทำให้เกิดความสับสนใน Chrome อย่างน้อยทำให้การพัฒนาจริงเกิดความเจ็บปวดในก้น

g) การพิมพ์แบบไดนามิก ใช่ฉันยินดีที่จะเริ่มการโต้แย้ง คุณเริ่มสังเกตเห็นมันเป็นวินาทีที่คุณหยุดเขียนเว็บแอพหรือหน้าเว็บเล็ก ๆ น้อย ๆ และเริ่มเขียนแอพขนาดใหญ่ที่คุณมีข้อมูลที่ยังคงอยู่นานกว่าการคลิกเมาส์เพียงครั้งเดียวหรือรอบคำขอ / ตอบสนอง: เพิ่มวัตถุผิดประเภท อาร์เรย์ที่จะดำเนินการในภายหลังและได้รับความผิดพลาดในภายหลังจากวิธีที่หายไปหรือสมาชิกในรหัสที่แตกต่างกันอย่างสิ้นเชิงกว่าที่ผิดพลาดจริง ช่วงเวลาแห่งความสนุก. ใช่จาวาทำให้การพิมพ์คงที่ดูเหมือนชั่วร้าย ไม่จาวา / C # / C ++ ไม่ใช่วิธีเดียวในการพิมพ์แบบสแตติก การอนุมานประเภทการผูกอินเทอร์เฟซโดยนัย ฯลฯ ให้ประโยชน์ทั้งหมด "ง่ายต่อการจัดการและไม่กดแป้นจำนวนมาก" ของการพิมพ์แบบไดนามิกโดยไม่มีข้อบกพร่องทั้งหมด ภาษาเว็บที่ได้รับความนิยมอันดับสองคือ ActionScript 3 - จะถูกพิมพ์แบบสแตติกในความเป็นจริงแม้จะเป็นอย่างอื่นกับ JS / ECMAScript นอกจากนี้ฉันได้รับความขัดข้องจากแอพ Python บนเดสก์ท็อป Fedora ของฉันมากกว่าที่ฉันทำจากแอพ C / C ++ (อันที่จริงแล้วไม่มีแอพ C / C ++ บนเดสก์ท็อปของฉันล่มตอนนี้ที่ฉันคิดถึงมัน) ไม่มีข้อยกเว้นสำหรับสมาชิก == ง่ายต่อการพัฒนาและดูแลรักษาแอพใช่ไหม?

h) ความเร็ว ใช่มีความพยายามอันยิ่งใหญ่จำนวนมากจากนักพัฒนาที่มีปัญหาเรื่องภาษาทำให้ JS เกือบครึ่งเร็วเท่าคอมไพเลอร์ C เกรดต่ำที่วิทยาลัยจูเนียร์คนเดียวสามารถเขียนได้ในไม่กี่ครั้ง เดือน และ LuaJIT อยู่ในเรือลำเดียวกันกับ JS ในแง่ของข้อ จำกัด ทางภาษาพื้นฐาน แต่สามารถทำได้ดีกว่าการใช้ JavaScript ทุกครั้ง ผู้ที่ไม่เข้าใจว่าการเพิ่มประสิทธิภาพ JS ทั้งหมดใน V8 หรือเช่นนั้นทำอะไรชอบที่จะอ้างสิทธิ์ JS สามารถทำสิ่งที่น่าอัศจรรย์ได้อย่างรวดเร็ว แต่ความจริงก็คือการเพิ่มประสิทธิภาพทั้งหมดนั้นเป็นเพียงแค่ "พยายามอย่างหนักมากในการวิเคราะห์รหัสเพื่อหาประเภทของตัวแปรแล้วรวบรวมมันเหมือนแบบสเตชั่นแบบหน่วงเล็กน้อย ผู้แปลภาษาจะทำเช่นนั้น " โอ้และมีการติดตามอยู่ แต่จากนั้นการติดตามก็ยังทำงานกับภาษาที่พิมพ์แบบคงที่ (และทำงานได้ดีขึ้นเนื่องจากไม่จำเป็นต้องมีการ์ดรักษาความปลอดภัยชนิดในรหัสเครื่องที่สร้างขึ้น) ไม่ใช่หนึ่งเดียวของการเพิ่มประสิทธิภาพ whizbang ที่ถูกคิดค้นโดยหรือสำหรับ JS ในความเป็นจริง; ส่วนใหญ่นำมาจากการวิจัย JVMs (Java เป็นความชั่วร้าย!) หรือภาษา OOP คลาสสิก (ต้นแบบนั้นยอดเยี่ยมมาก!)

i) ไม่มี IntelliSense ที่เป็นไปได้ ต้องการดูว่ามีวิธีใดบ้างในตัวแปรนั้นที่คุณมีอยู่ในบรรทัด 187 of foo.js ในโปรแกรมแก้ไขข้อความ เลวร้ายเกินไป. ไปตามรหัสจนกว่าคุณจะรู้ว่ามันถูกกำหนดค่าเริ่มต้นจากนั้นไปติดตามรหัสเพื่อค้นหาสิ่งที่ต้นแบบมีอยู่ และหวังว่าจะไม่มีการเปลี่ยนรหัสต้นแบบด้านหลังของคุณแบบไดนามิก ในความเป็นจริงเพียงแค่เรียกใช้ในเบราว์เซอร์และตั้งจุดพักเนื่องจากการหาสิ่งที่มีประโยชน์เกี่ยวกับค่าวิธีอื่น ๆ นั้นเป็นไปไม่ได้สำหรับ codebase ใด ๆ ที่ใหญ่กว่าเว็บไซต์ toy_web_app.html ที่ apologists JavaScript ใช้เพื่อยกย่องความสะดวกสบาย บางบรรณาธิการรหัสลองมันยากที่จะทำดีกว่าและเกือบจะประสบความสำเร็จครับ sorta สำหรับกรณีที่เรียบง่ายจริงๆบางครั้งเมื่อ

j) ไม่มีข้อได้เปรียบ JavaScript ไม่ได้พิเศษแม้แต่เมื่อเทียบกับภาษาที่พิมพ์แบบไดนามิกอื่น ๆ มันไม่สามารถทำสิ่งที่น่าสนใจได้ทั้งหมดที่ไม่สามารถทำได้โดย Lua, Python, Ruby และอื่น ๆ การใช้งาน JS ไม่เร็วกว่า LuaJIT หรือ PyPy หรือการใช้ JIT-ing ขั้นสูงอื่น ๆ ของไดนามิกอื่น ๆ ภาษา JS ไม่มีด้านบวกเมื่อเปรียบเทียบกับภาษาอื่น ๆ ที่มีโดยทั่วไป โอ้ยกเว้นว่ามันจะทำงานในเว็บเบราว์เซอร์ที่ไม่มีปลั๊กอิน ซึ่งเป็นเหตุผลเดียวในโลกที่ว่าทำไมมันถึงได้รับความนิยม ในความเป็นจริงมันเป็นเหตุผลเดียวที่มันเหตุการณ์อยู่. ถ้าใครสักคนเมื่อ 10 ปีที่แล้วเพิ่งคิดว่า "เฮ้เราทิ้งภาษาที่ได้รับการออกแบบและมีชื่อเสียงมาไว้ในเบราว์เซอร์ของเราแล้วพาคนอื่นทำแบบเดียวกันแทนที่จะทำให้ทุกคนใช้แฮ็คกี้ตัวเล็ก ๆ วันนี้ "เว็บจะดูต่างออกไป (ดีกว่า)" ลองจินตนาการถึงอนาคตถ้า Chrome ปล่อย Python ลงใน Chrome เป็นภาษาที่รองรับ หรือลองจินตนาการถึงสิ่งนี้: Google หยด C / C ++ ลงใน Chrome เป็นภาษาที่รองรับ (http://code.google.com/p/nativeclient/)


นี่คือโพสต์ที่น่าสนใจจริงๆ ฉันอยากรู้อยากเห็นกรณีการใช้งานของเขาที่เป็นรากฐานของข้อโต้แย้งของเขา ฉันไม่เห็นด้วยกับคะแนนของเขา แต่ฉันพัฒนาแอพพลิเคชั่น JS ขนาดองค์กรมาเกือบ 10 ปีแล้วและยังไม่เคยสัมผัสกับสิ่งที่เขาพูดถึง (โดยเฉพาะอย่างยิ่งประเด็นแรกของเขาเกี่ยวกับ "magic this") จากประสบการณ์ของตัวเองการถกเถียงกับจาวาสคริปต์เหมือนในโพสต์นี้มักจะทำโดยคนที่มีภูมิหลังโอปดั้งเดิมที่หนักหน่วง ... ในกรณีนี้ฉันจะเข้าใจความสับสนของเขา
นายจาวา JavaScript

มันค่อนข้างน่าสนใจที่จะเห็นว่าในปี 2559 คำตอบนี้ล้าสมัยไปแล้วอย่างสิ้นเชิงจากวิวัฒนาการของภาษา
Stephan Bijzitter

@นาย. จาวาสคริปต์สวัสดี คุณรู้ชุดของบทเรียนที่มุ่งเน้นการแก้ปัญหาตัวอย่างในโลกแห่งความจริงมากกว่าเพียงแค่สำรวจ JavaScript และคุณสมบัติและกลไกของมัน? ฉันไม่มีโชคกับการค้นหาคำหลัก ตัวอย่างเช่นแทนที่จะไปดูลิงก์บทแนะนำโดยละเอียดและตัวอย่างและฟีเจอร์มากมายที่ฉันจะหาที่เก็บบทเรียนขนาดเล็กเกี่ยวกับวิธีสร้างแอปพลิเคชัน GUI เพื่อจัดการระบบประกันหรือแพทย์หรือโรงเรียนหรือส่วนปฏิบัติการของ ซุปเปอร์มาร์เก็ต ขอบคุณ
Joshua

12

ทำไม?

JavaScript เป็นภาษาที่เข้าใจผิดมากที่สุด

เราอยู่ในยุคมืดและยังเป็นชุมชนการพัฒนาทั่วไปที่จะยอมรับว่า JavaScript เป็นภาษาที่ทรงพลังและหลากหลาย มันไม่ใช่กระแสหลัก

ความก้าวหน้าล่าสุดเพียงอย่างเดียวคือ node.js กลายเป็นเรื่องปากต่อปากและผู้คนเริ่มยอมรับว่าจาวาสคริปต์นั้นมีประโยชน์อื่น ๆ ..

ฉันเฝ้าดูการพัฒนา JS & HTML5 สำหรับ windows 8 และปฏิกิริยาจากชุมชน. NET ก็คือ "ที่รักของพระเจ้าทำไม"

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

JavaScript ที่ยอมรับกันไม่สอดคล้องกับ "แนวทางการพัฒนาที่ทันสมัย" สำหรับฉันจาวาสคริปต์ยังคงเป็นภาษาที่แฮ็คฉันใช้ vim & อินเทอร์เน็ตเป็นเอกสารของฉัน ไม่มี IDE ไม่มีเครื่องมือในการพัฒนาไม่มีการทำให้สมบูรณ์อัตโนมัติหรือ "Intellisense" ไม่มีการคลิกและลาก GUIs

ในโลกของนักพัฒนา Java และ. NET พวกเขาจะแต่งงานกับ GUI & IDE ของพวกเขาและจะไม่สามารถเขียนโปรแกรมในกลุ่ม


1
ฉันเห็นด้วยกับคุณยกเว้น "ไม่มี IDE ไม่มีเครื่องมือในการพัฒนาไม่มีการทำให้สมบูรณ์อัตโนมัติหรือ" Intellisense "ไม่มีการคลิกและลาก GUIs" ที่จริงแล้วคุณสามารถนำทุกอย่างที่ใช้ IDE หลาย ๆ ตัวออกไปฉันใช้ Visual Studio เป็นตัวอย่างและมันยอดเยี่ยมมาก
Jose Faeti

1
@JoseFaeti ขออภัย Visual Studio ไม่ใช่ javascript IDE ฉันเร็วขึ้นเป็นกลุ่มแล้วใน VS2010 นี่หมายความว่า VS2010 เป็น JS IDE ที่รั่วไหล
Raynos

2
@ Raynos "ฉันเร็วขึ้นเป็นกลุ่มแล้วใน VS2010 ซึ่งหมายความว่า VS2010 เป็น JS IDE ที่รั่วไหล" - หรือนี่อาจหมายถึงว่าคุณไม่รู้ทั้ง VS และเสียงเรียกเข้า
PéterTörök

2
ไม่อย่างแน่นอน แต่ฉันจะไม่สร้างส่วนต่อ RIA ใน Silverlight เพราะฉันรัก Resharper และ LINQ หรือแอป ASP.Net MVC ที่มีเลเยอร์ jQuery บาง ๆ เพราะเป็นมิตรกับ. Net อีกครั้งเมื่อมี Javascript ฝั่งไคลเอ็นต์อยู่ในมือ ที่เหมาะกว่าสำหรับงาน
sa93

1
เพียงแค่เพิ่มเสียงของฉันไปยังคอรัสของคนที่ระบุว่ามี JavaScript IDEs มันงี่เง่าตรงไปตรงมาที่จะเรียกร้องอย่างอื่น คุณอาจไม่ชอบ IDE และพวกเขาอาจไม่สมบูรณ์แบบ แต่พวกเขายังคงเป็น IDE หรือว่าฉันจินตนาการถึง Intellisense และการเติมโค้ดของ VS เมื่อทำงานกับ JS?
Ian Newson

10

รายการของคุณไม่มีสิ่งใดที่เกี่ยวกับการเขียนไฟล์ไปยังระบบซึ่งเป็นส่วนสำคัญของการพัฒนาซอฟต์แวร์

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

เหตุใดจึงต้องเขียนเอเคอร์ของ JS เพื่อเขียนไฟล์เมื่อมีการทำงานเล็กน้อยใน Java / .NET / C / C ++

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


1
+1 ลืมไปว่าไลบรารี stdio นั้นมีความสำคัญอย่างไร
Raynos

1
สำหรับระบบไฟล์ตามที่คุณวางไว้เรามี API ที่จัดเก็บในตัวเครื่องในขณะนี้แม้ว่าคุณจะไม่เชื่อใจพวกเขาสำหรับความทนทานที่ร้ายแรง อย่างไรก็ตามการเขียนไปยังระบบไฟล์ไม่จำเป็นต้องถูกส่งโดยตรงจาวาสคริปต์ของคุณอาจทำการโทรไปยังเซิร์ฟเวอร์ที่สงบ (เขียนใน LOLCode หรือ C หรือ JS เอง) ที่เขียนไปยังที่เก็บข้อมูลบางรูปแบบ
sa93

1
ทางฝั่งเซิร์ฟเวอร์ API ไฟล์ NodeJS เป็นเพียงเรื่องเล็กน้อยเช่น C ฯลฯ ... <- ถ้าคุณทำ IO อย่างถูกต้องใน C (ไม่ใช่การปิดกั้น) นอกจากนี้การเรียก Ajax กับ wrapper สติสามารถบรรทัด 2-3 MyLib.Ajax.post ('/ persistence / Something', {data: blahObj})
sa93

@ sa93 โปรดอย่าสร้างความสับสนให้กับสภาพแวดล้อมโฮสต์เบราว์เซอร์ด้วย JavaScript localStorage เป็นโฮสต์ API ในเบราว์เซอร์ ไม่ได้กำหนดไว้ในข้อกำหนด ES5
Raynos

1
@reinierpost Writing files to the file system has been replaced with HTTP POST.ไม่ใช่ถ้าคุณเขียน API ที่จัดการกับโพสต์
StuperUser

5

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

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

  • ข้อบกพร่องที่แก้ไขไม่ได้มากมาย เกิดข้อผิดพลาดมากมายเมื่อเริ่มพัฒนา JS ไม่จำเป็นต้องระบุพวกเขาที่นี่พวกเขามีเอกสารที่ดี ทุกภาษามีข้อผิดพลาดในการออกแบบเริ่มต้นซึ่งได้รับการแก้ไขในภายหลัง ความแตกต่างกับ JS คือภาษาได้รับการพัฒนาและเผยแพร่ไปไกลอย่างรวดเร็วและข้อผิดพลาดเหล่านี้ไม่สามารถแก้ไขได้เนื่องจากความต้องการของความเข้ากันได้ย้อนหลังในเบราว์เซอร์
  • กระบวนการช้ามากสำหรับการแนะนำการปรับปรุงและคุณสมบัติใหม่ เนื่องจากผู้ขายเบราว์เซอร์ทั้งหมดต้องยอมรับและอาจด้วยเหตุผลทางการเมืองต่างๆต้องการชะลอการพัฒนาของภาษา ดู C # ซึ่งจริงๆแล้วเป็นภาษาใหม่กว่า JS เมื่อ C # ถูกนำมาใช้มันไม่ได้มีเช่น ฟังก์ชั่นการปิดหรือการสั่งซื้อที่สูงขึ้นเช่น JS แต่หลังจากทำซ้ำหลาย ๆ ครั้งตอนนี้ก็มีคุณสมบัติทั้งหมดและเพิ่มเติมเช่นไวยากรณ์ Linq และ async ซึ่งนักพัฒนา JavaScript สามารถอิจฉาได้เท่านั้น
  • ไลบรารีมาตรฐานที่ไม่สมบูรณ์ ภาษาสมัยใหม่เช่น Python, Ruby หรืออะไรก็ตามที่ใช้ Java หรือ. net มีไลบรารีมาตรฐานที่กว้างขวางสำหรับเกือบทุกสิ่งที่คุณต้องการ ใน JS คุณไม่สามารถอ่านไฟล์ได้หากไม่มีห้องสมุดบุคคลที่สาม คุณพูดถึง Regex แต่ทุกภาษาในปัจจุบันมีสิ่งนั้นและอีกหลายพันสิ่ง
  • ภาษาอื่น ๆ มีข้อได้เปรียบเล็กน้อยของ JavaScript คุณสมบัติเช่นการปิดและฟังก์ชั่นชั้นหนึ่งนั้นทรงพลังเมื่อเทียบกับภาษาแบบคงที่ที่มี clunky เช่น Java เมื่อสิบปีที่แล้ว แต่ภาษาแบบไดนามิกและการใช้งานได้มีคุณสมบัติเหล่านี้มานานแล้วและแม้แต่ Java ซึ่งเป็นภาษาอนุรักษ์นิยม

ฟีเจอร์เดียวที่ทำให้ JavaScript แตกต่างจากภาษาสมัยใหม่อื่น ๆ คือการสืบทอดตามต้นแบบ (ซึ่งต่างกับคลาส) และข้อดีของรุ่นนี้คือพิรุธเพราะทุกคนใช้เพื่อเลียนแบบการสืบทอดคลาสตามเดิม

ไม่มีเหตุผลที่จะเลือก JavaScript หากคุณมีตัวเลือกในการเลือกภาษาที่ทันสมัยอื่น เหตุผลเดียวก็คือหากเป็นภาษาเดียวที่คุณรู้

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