ข้อดีและข้อเสียของ Coffeescript คืออะไร [ปิด]


48

แน่นอนโปรใหญ่หนึ่งคือปริมาณน้ำตาล syntactic ที่นำไปสู่รหัสที่สั้นลงในหลายกรณี บนhttp://jashkenas.github.com/coffee-script/มีตัวอย่างที่น่าประทับใจ ในทางกลับกันฉันสงสัยว่าตัวอย่างเหล่านี้แสดงถึงรหัสของแอปพลิเคชันโลกแห่งความซับซ้อน ในรหัสของฉันเช่นฉันไม่เคยเพิ่มฟังก์ชั่นไปยังวัตถุที่เปลือยเปล่า แต่แทนที่จะเป็นต้นแบบของพวกเขา ยิ่งไปกว่านั้นคุณสมบัติต้นแบบถูกซ่อนไว้จากผู้ใช้ซึ่งแนะนำ OOP แบบคลาสสิกมากกว่าจาวาสคริปต์ที่ใช้สำนวน

ตัวอย่างความเข้าใจอาร์เรย์จะดูในรหัสของฉันอาจเป็นดังนี้:

cubes = $.map(list, math.cube); // which is 8 characters less using jQuery...

7
นั่นไม่ใช่ความเข้าใจของอาเรย์ นั่นคือ JQuery.map ()
Rein Henrichs

1
แน่นอนดังนั้นฉันไม่ได้หมายถึง "array comprehension" แต่เป็น "ตัวอย่าง comprehension array [บนเว็บไซต์]"
ฟิลิป

ยุติธรรมพอสมควร ประเด็นของฉันคือ jut ที่ foldl (แผนที่) เป็นบางกรณีที่ความเข้าใจในรายการแย่ลง (ซึ่งโดยทั่วไปจะมีประสิทธิภาพมากกว่า)
Rein Henrichs

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

Rails ทำให้สคริปต์กาแฟเป็นอัญมณีเริ่มต้น มันกระตุ้น "การสนทนา" github.com/rails/rails/commit/…
generalhenry

คำตอบ:


53

ฉันเป็นผู้เขียนหนังสือเกี่ยวกับ CoffeeScript:
http://pragprog.com/titles/tbcoffee/coffeescript

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

  1. ส่งเสริมการใช้รูปแบบ JavaScript ที่ดี
  2. กีดกันการต่อต้านรูปแบบ JavaScript
  3. ทำให้โค้ด JavaScript ที่ดียิ่งสั้นลงและอ่านง่ายขึ้น

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

  • เนื่องจากตัวแปรถูกกำหนดขอบเขตโดยอัตโนมัติคุณจะไม่สามารถเขียนทับ globals โดยไม่ตั้งใจได้โดยไม่ใส่varเงาของตัวแปรที่มีชื่อเดียวกัน (ยกเว้นอาร์กิวเมนต์ที่มีชื่อ) หรือมีตัวแปรในไฟล์ต่าง ๆ ที่โต้ตอบกัน (ดูhttps://stackoverflow.com/questions / 5211638 / pattern-for-coffeescript-modules / 5212449 )
  • เนื่องจาก->การเขียนง่ายกว่าfunction(){}มากดังนั้นจึงง่ายต่อการใช้การโทรกลับ การเยื้องความหมายทำให้ชัดเจนเมื่อการโทรกลับซ้อนกัน และ=>ทำให้ง่ายต่อการรักษาthisเมื่อเหมาะสม
  • เนื่องจากunless xง่ายกว่าสำหรับผู้พูดภาษาอังกฤษในการแยกวิเคราะห์if (!x)และif x?ง่ายกว่าif (x != null)ให้เพียงสองตัวอย่างคุณสามารถใช้รอบสมองน้อยลงในไวยากรณ์ตรรกะและอื่น ๆ ในตรรกะตัวเอง

ห้องสมุดที่ยอดเยี่ยมอย่างUnderscore.jsสามารถดูแลปัญหาเหล่านี้ได้ แต่ไม่ใช่ทั้งหมด

ตอนนี้สำหรับข้อเสีย:

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

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


2
โอ้โหโอ้วววฉันคิดถึงอะไร=>ในโลกเอกสารบ้าง? นั่นเป็นที่น่ากลัว (ประเด็นอื่น ๆ ก็ดีเช่นกัน - คำตอบที่เป็นกลางดีมากพร้อมรายการข้อเสียที่ซื่อสัตย์ :)
Michelle Tilley

ขอบคุณสำหรับคำตอบที่ไม่ต้องเสียเงิน แม้ว่าฉันจะรอสักครู่ที่จะยอมรับมันเป็นสิ่งที่น่าสนใจที่จะมีข้อดี / ข้อเสียในการพิจารณาแนวทาง OOP ที่แตกต่างกัน
Philip

2
ผมบอกว่ารูปแบบการเรียน CoffeeScript สามารถเข้าถึงได้มากขึ้นที่จะมาใหม่กว่ารุ่นต้นแบบของ JavaScript และสนับสนุนการปฏิบัติที่ดี (โดยเฉพาะอย่างยิ่งการกำหนดต้นแบบของคุณในสถานที่หนึ่งมากกว่ากระเจิงFoo.prototype.bar = ...สายทั่วทุกมุมซึ่งเป็นความบ้า!) มันเป็นวิธีที่ยอดเยี่ยมในการจัดระเบียบโค้ด ในทางกลับกันมันอาจทำให้คนใช้ OOP แม้ว่าวิธีการทำงานจะสวยงามกว่ามาก
เทรเวอร์เบิร์นแฮม

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

1
คะแนน 1 และ 2 ต้องการรายละเอียด ฉันคิดว่าคำตอบของแอนดรูว์เป็นตัวอย่างที่ดีของ # 3 เป็นถุงผสม ฉันไม่เห็นด้วยกับสัญลักษณ์แสดงหัวข้อย่อย: การลืมวาเป็นเรื่องงี่เง่าและคุณไม่ควรมี vars ทั่วโลกมากมายที่จะชนกันในตอนแรก 'ฟังก์ชั่น' ไม่ยาก - วิธีการตั้งชื่อที่กำหนดไว้ล่วงหน้าแม้แต่น้อยดังนั้น 'ถ้า (! x ) 'สั้นและหวานและ' เว้นแต่ 'ทำให้ละเอียดมากขึ้น (ดูหัวข้อย่อยก่อนหน้าของคุณเองและจุด # 3) และความคล้ายคลึงกันของภาษามนุษย์นั้นไม่ใช่เป้าหมายการออกแบบที่ประสบความสำเร็จในการเขียนโปรแกรมภาษา เราต้องติดต่อกับมนุษย์และเครื่องจักร
Erik Reppen

30

เรามี codebase JavaScript ที่ค่อนข้างใหญ่และประมาณหนึ่งเดือนที่ผ่านมาเราพยายามที่จะให้ CoffeeScript ได้ลองใช้ หนึ่งในนักพัฒนาของเราเริ่มต้นด้วยการโยกย้ายหนึ่งในโมดูลของเราจาก JS การบริการลูกค้าโดยใช้http://js2coffee.org/ เครื่องมือนี้ค่อนข้างมีประโยชน์และใช้เวลาประมาณสองหรือสามชั่วโมงในการพอร์ตจาวาสคริปต์ 1,000 บรรทัด ข้อสังเกตบางอย่างที่เราสังเกตเห็น ณ จุดนั้น:

  1. รหัส CoffeeScript ที่ได้นั้นค่อนข้างอ่านได้

  2. เรารวบรวมมันกลับไปที่จาวาสคริปต์และมันค่อนข้างง่ายต่อการนำทางและการดีบัก ในขณะที่เราทำการพอร์ตโมดูลนั้นผู้พัฒนารายอื่นจากทีมของเราพบข้อผิดพลาด นักพัฒนาสองคนนี้แก้ไขข้อผิดพลาดนั้นในรหัส JavaScript เก่าของเราและในรหัส JavaScript ใหม่ที่ออกมาจากคอมไพเลอร์ CS พวกเขาทำงานอย่างอิสระและใช้เวลาประมาณ 15-20 นาที

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

  4. โดยทั่วไปความสามารถในการอ่านฟังก์ชั่นที่สั้นลงและวัตถุขนาดเล็กจะเพิ่มขึ้นในบางส่วนของการขยาย อย่างไรก็ตามสำหรับวิธีการที่ยาวกว่านั้นไม่ใช่ในทุกกรณี การขยายตัวที่ใหญ่ที่สุดมาจาก->และชัดเจนreturnแต่นอกเหนือจากที่รหัสของเราไม่ได้สั้นลงหรือง่ายขึ้นมาก บางส่วนของไวยากรณ์ดูเหมือนสับสนโดยเฉพาะอย่างยิ่งตัวอักษรวัตถุ CS ละเว้นเครื่องหมายปีกการอบคำจำกัดความของสมาชิกและรวมกับ"ทุกอย่างเป็น is-an-expression"และโดยปริยายreturnซึ่งทำให้โค้ดบางส่วนอ่านยาก

    นี่คือ JavaScript:

    var rabbitGenerator = {
        makeRabbit: function(rabbitName, growCarrots) {
            if (growCarrots) {
                carrots.growMore(10);
            } else {
                carrots.ensureSupply();
            }
            return {
                name: rabbitName, 
                height: 0,
                actions: {
                    jump: function (height) {
                        this.height += height;
                    },
                    eatCarrot: function () {
                        // etc
                    }
                }
            };
        },
        // more members
    }
    

    และนี่คือลักษณะของโค้ด CoffeeScript ที่เกี่ยวข้อง:

    rabbitGenerator = 
      makeRabbit: (rabbitName, growCarrots) ->
        if growCarrots
          carrots.growMore 10
        else
          carrots.ensureSupply()
        name: rabbitName // (*)
        height: 0
        actions: 
          jump: (height) ->
            @height += height
    
          eatCarrot: ->
    

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

  5. แม้ว่าการแก้ไขข้อบกพร่อง CoffeeScript จะกลายเป็นเรื่องง่ายกว่าที่เราคาดไว้ประสบการณ์การแก้ไขจะลดลงเล็กน้อย เราไม่พบโปรแกรมแก้ไข / IDE ที่ดีสำหรับภาษานี้ เราไม่ได้สร้างมาตรฐานให้กับ editor / IDE สำหรับรหัสฝั่งไคลเอ็นต์สำหรับโครงการของเราและในความเป็นจริงเราทุกคนใช้เครื่องมือที่แตกต่างกัน ในความเป็นจริงทุกคนในทีมตกลงว่าเมื่อพวกเขาเปลี่ยนมาใช้ CoffeeScript พวกเขาจะได้รับการสนับสนุนจากเครื่องมือของพวกเขาค่อนข้างแย่ ปลั๊กอิน IDE และโปรแกรมแก้ไขอยู่ในช่วงเริ่มต้นและในบางกรณีพวกเขาไม่สามารถให้การเน้นไวยากรณ์ที่เหมาะสมหรือการสนับสนุนการเยื้อง ไม่ได้พูดถึงตัวอย่างโค้ดหรือการปรับโครงสร้างใหม่ เราใช้ WebStorm, Eclipse, NetBeans, VisualStudio, Notepad ++ และ SublimeText2

  6. การพูดถึงเครื่องมือฉันควรพูดถึงว่าตัวรวบรวม CoffeScript นั้นมาพร้อมกับแพ็คเกจ Node JS เราเป็นร้าน Java / .NET เป็นหลักดังนั้นทุกคนจึงพัฒนาบนกล่อง Windows จนกระทั่งเมื่อเร็ว ๆ นี้การรองรับ Windows เกือบจะไม่มีอยู่ใน Node เราไม่สามารถทำให้คอมไพเลอร์ CoffeeScript ทำงานบน Windows ดังนั้นในขณะนี้เราตัดสินใจติด<script type="text/coffeescript">แท็กและคอมไพเลอร์ on-the-fly บนเบราว์เซอร์

    คอมไพเลอร์ค่อนข้างเร็วและไม่เพิ่มเวลาเริ่มต้นมากนัก ข้อเสียคือ JavaScript ที่ได้รับจะมีการevalแก้ไขและเป็นการยากที่จะวางเบรกพอยต์ไว้ในเครื่องมือสำหรับนักพัฒนาของเบราว์เซอร์ (โดยเฉพาะอย่างยิ่งใน IE8) หากเรามีปัญหาในการดีบักเราจะรวบรวมโค้ด CoffeeScript ล่วงหน้าด้วยเครื่องมือการย้ายข้อมูลเดียวกันกับที่ฉันได้กล่าวไว้ข้างต้น แต่นั่นก็ยังไม่สะดวก

  7. คำสัญญาอื่น ๆ ของ CoffeeScript เช่นการvarแทรกอัตโนมัติหรือการจัดการแบบกึ่งโปร่งใสของthisตัวดำเนินการลูกศรไขมัน ( =>) กลับกลายเป็นว่าไม่ให้ผลกำไรมากเท่าที่เราคาดหวัง เราใช้ JSLint เป็นส่วนหนึ่งของกระบวนการสร้างของเราแล้วและเราเขียนโค้ดในES3 x ES5-Strictส่วนย่อยของภาษา อย่างไรก็ตามความจริงที่ว่ากาแฟผลิตชนิดเดียวกันของ"สะอาด"รหัสเป็นสิ่งที่ดี ฉันหวังว่าทุกเฟรมเวิร์กฝั่งเซิร์ฟเวอร์จะสร้างมาร์กอัป HTML5 และ CSS3 ที่ถูกต้องเช่นกัน!

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

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

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


10

ข้อดี

ดูคำตอบที่เทรเวอร์อัม

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

จุดด้อย

CoffeeScript ไม่มีอะไรมากไปกว่าน้ำตาลทรายและแว่นสีชมพู

สำหรับสิ่งที่ง่าย - CoffeeScript ซ้ำซ้อนเพราะการทำสิ่งต่าง ๆ เป็นเรื่องง่ายในภาษาใด ๆ และ jQuery นั้นอาจจะง่ายกว่า CoffeeScript

สำหรับสิ่งที่ยาก - คุณต้องเข้าใจสื่อของคุณ สื่อของคุณคือ HTML, DOM และ CSS, Javascript เป็นเพียงเครื่องมือในการเชื่อมต่อระหว่างกัน แต่ API ทั้งหมดนั้นเขียนขึ้นสำหรับ Javascript โดยเฉพาะ การใช้ภาษาอื่นซึ่งจะถูกรวบรวมเป็น "ของจริง" - มีความเสี่ยงมากไม่ว่าจะเป็น Java (GWT), Dart หรือ CoffeeScript

รูปแบบการต่อต้านหรือความไม่รู้ของกฎภาษาสามารถแก้ไขได้โดยการอ่านหนังสือที่ดีหนึ่งหรือสองเล่ม และฉันค่อนข้างแน่ใจว่า Coffeescript มีรูปแบบการต่อต้านของตัวเอง

การสนับสนุน IDE สำหรับ Coffeescript ยิ่งกว่า JS



JavaScript เป็นมากกว่า "เครื่องมือเชื่อมต่อระหว่างกัน" ในแอปพลิเคชันเว็บขนาดใหญ่และมีความเคลื่อนไหวสูง ปริมาณของ JS ในไลบรารีเช่น React หรือ Angular แม้แต่ jQuery เป็นกรณี ๆ ไป
Andy

6

มืออาชีพที่ใหญ่ที่สุดในใจของฉันคือ:

รวบรวม coffescript ที่ตรงไปตรงมาใน javascript ที่คุณควรเขียน แต่ไม่ได้เพราะมันไม่ได้ตรงไปตรงมา

มีบางส่วนที่น่ารังเกียจของจาวาสคริปต์ที่หลีกเลี่ยงได้ด้วยความระมัดระวัง - ตัวอย่างจากด้านบนของหัวของฉัน:

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

ถ้าคุณเขียน CoffeeScript ทุกคนได้รับการจัดการสำหรับคุณโดยอัตโนมัติ

ข้อเสียคือ IMO ส่วนใหญ่รองลงมา:

  • การแก้จุดบกพร่องเป็นความเจ็บปวด
  • มีโปรแกรมเมอร์โปรแกรมเมอร์น้อยลง
  • คุณต้องแปลเอกสารจาก javascript เป็น coffeescript

3

ข้อดี

  1. CoffeeScript ช่วยให้ฉันเรียนรู้เพิ่มเติมเกี่ยวกับ JavaScript
  2. ค่อนข้างง่ายต่อการอ่านแม้กระทั่งการโทรกลับซ้อนที่ซับซ้อน
  3. ให้ความปลอดภัยกับบางส่วนของจาวาสคริปต์ที่ยากต่อการติดตามปัญหาภาษา

ตัวอย่างการทำงานข้างต้นของ Andrew ฉันพบว่ามีความกระจ่างแจ้ง ฉันเชื่อว่าการอ่านค่าตอบแทนตามวัตถุที่มีอยู่ของพวกเขาจะได้รับการปรับปรุงโดยเพียงแค่ระบุการส่งคืนด้วยตนเอง

กลับ

// วัตถุตามตัวอักษรที่นี่

เครื่องมือ IDE ได้รับการปรับปรุง TextMate และ Cloud9 รองรับ CoffeeScript การสนับสนุน windows ที่เป็นที่ยอมรับนั้นล้าหลัง (ไม่เป็นความจริงสำหรับการพัฒนาเว็บโดยทั่วไปใช่ไหม)

ข้อเสีย

เบราว์เซอร์ตีความ CoffeeScript สามารถท้าทายในการแก้ปัญหา

มันเป็นเลเยอร์เพิ่มเติมบน JavaScript ที่ต้องการความเข้าใจและการพิจารณาจากผู้พัฒนา


0

ข้อดี

  1. พวกเขาปรับให้เหมาะสมกรณีทั่วไป syntatically ในความเป็นจริง CoffeeScript เป็นหนึ่งในถ้าไม่ใช่ภาษาที่รัดกุมที่สุดที่เป็น "ปกติ" ใช้ http://redmonk.com/dberkholz/2013/03/25/programming-languages-ranked- โดยการแสดงออก /
  2. ซ่อนส่วนที่ไม่ดีของ JavaScript (auto-coercion ==, globals โดยนัยระบบชั้นเรียนแบบดั้งเดิมที่มากขึ้นทำให้สิ่งต่าง ๆ ง่ายขึ้น)
  3. ง่ายมากที่จะเรียนรู้สำหรับโปรแกรมเมอร์ Python / Ruby
  4. ฟังก์ชั่นที่ไม่ระบุชื่อหลายบรรทัด + ไวยากรณ์ช่องว่าง

ข้อเสีย

  1. การลบvarหมายความว่าคุณไม่สามารถเปลี่ยนตัวแปรขอบเขตด้านนอกภายในขอบเขตภายในโดยไม่ต้องใช้วัตถุหรือ `var fall_back_to_js;` แฮ็ก [ทำไมไม่ใช่คำสั่งการกำหนดอื่น ': =' ซึ่งกำหนดค่าใหม่ดังนั้น obj.naem: = การแก้ไขข้อผิดพลาด 5 ครั้งง่ายขึ้น]
  2. คุณต้องให้ทุก ๆ เครื่องมือรู้เกี่ยวกับมันจนกว่าคุณจะต้องการดีบัก JavaScript :(; btw: คุณสามารถดีบัก CoffeeScript จาก Chrome ได้โดยเพิ่มการรองรับแผนที่ต้นทาง; Yeoman (npm install Yeoman) สามารถช่วยคุณเขียนไฟล์ gulp หรือ grunt CoffeeScript
  3. ไม่มีตัวเลือกการพิมพ์คงที่ (ต้องรอ EcmaScript มาตรฐานถัดไป)
  4. ยังคงต้องการไลบรารีบุคคลที่สามสำหรับระบบโมดูล
  5. กับดักไวยากรณ์ที่ต้องระวัง: ผลตอบแทนโดยนัยabgoหมายถึง(b (g (o))) , fp, b: 2, c: 8 หมายถึง f (p, {b: 2, c: 8}) มากกว่า f (p, {b: 2}, {c: 8})
  6. จะไม่เปลี่ยนระบบหมายเลข / ประเภท JavaScript ที่ใช้งานไม่ได้
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.